如何在远程 Powershell 会话中保留凭据?

Raz*_*anu 14 remote-access powershell windows-server-2012-r2

我有一个 Azure 文件共享,并希望在我的 Azure VM 中使用它 - 在使用 cmdkey 在 VM 上保留凭据并使用网络使用挂载之后。这是通过在 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)
Run Code Online (Sandbox Code Playgroud)

和错误:

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

替换成cmdkey /list 检查语法,没有错误。

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *
Run Code Online (Sandbox Code Playgroud)

Windows 更新 PowerShell 模块 (Invoke-WUInstall) 有一个类似的问题(并且无法修复),它在 VM 上的本地 Powershell 会话上运行得很好,但在通过远程 Powershell 启动时不会更新。

有什么办法可以解决这个问题?

小智 3

由于 Windows 处理身份验证的方式,无法使用 CMDKEY 通过远程 PowerShell 会话设置凭据,因此在使用 CMDKEY 时必须以交互方式完成。

\n\n

引用唐·琼斯(Don Jones)在寻找与您类似的答案的帖子中的话:

\n\n
\n

这是 Cmdkey 命令的限制 \xe2\x80\x93 并不是真正的 PowerShell\n 东西。但这与 Remotig 处理凭据的方式有关。远程会话实际上并没有获得凭据,而是获得了委托票证,因此没有要实际保存的令牌。这都是设计使然,\n 而不是您可以重新配置的。

\n
\n