Powershell

如何在遠端 Powershell 會話中保留憑據?

  • September 11, 2019

我有一個 Azure 文件共享,並希望在我的 Azure VM 中使用它 - 在使用 cmdkey 將憑據保存在 VM 上並使用 net use 掛載之後。這是通過在 Windows Server 2012 R2 上的本地 Powershell 會話中執行這些命令來測試的。

但我需要將此步驟添加到 Azure 部署腳本。一個 Azure Powershell 腳本從我的筆記型電腦上執行,連接到 Azure 訂閱並使用大量變數從頭開始建構 VM。

想出使用 Invoke-Command 將變數從 Azure Powershell 腳本傳遞到新創建的 VM 上的遠端 Powershell 會話。

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

和錯誤:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

換成 cmdkey /list 來檢查語法,沒有錯誤。

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

Windows Update PowerShell 模組 (Invoke-WUInstall) 存在類似問題(並且無法修復),該模組在 VM 上的本地 Powershell 會話上執行良好,但在通過遠端 Powershell 啟動時不會更新。

有什麼辦法可以解決這個問題?

由於 Windows 處理身份驗證的方式,無法使用 CMDKEY 通過遠端 PowerShell 會話設置憑據,因此在使用 CMDKEY 時必須以互動方式完成。

從尋找與您類似的答案的執行緒中引用Don Jones :

這是 Cmdkey 命令的一個限制——不是真正的 PowerShell 東西。但這與 Remotig 處理憑據的方式有關。遠端會話實際上並沒有獲得憑證,它獲得了委託票證,因此沒有實際保存的令牌。這都是設計使然,而不是您可以重新配置的東西。

引用自:https://serverfault.com/questions/678773