我有三个框:A、B、C。
我试图从 A 调用 C 上的命令,而不提示输入凭据。
我可以成功地调用命令
a) 从 A 到 B
b) 从 B 到 C
但不能
用嵌套的 Invoke-Command 从 A 调用 c) 在 C 上
我想我可以通过从 B 调用 A 和 C 来解决问题。
但是为什么它不能以这种方式工作仍然困扰着我。所有三个盒子似乎都配置正确。
我什至无法弄清楚这是身份验证还是网络问题。
请问有什么帮助吗?
错误是:
Connecting to remote server failed with the following error message:
WinRM cannot process the request. The following error occured while using
Negotiate authentication: A specified logon session does not exist.
It may already have been terminated.
(...)
+ CategoryInfo : OpenError: (:) [], PSRemotingTransportException
+ FullyQualifiedErrorId : PSSessionStateBroken
+ PSComputerName : [IP]
详细信息:
准备存储的密码:
$key = ([KEY])
Read-Host -AsSecureString| ConvertFrom-SecureString -Key $key| Out-File [PATH]
调用 A > B
$key = ([KEY])
$pw = Get-Content "[PATH1]"| ConvertTo-SecureString -Key $key
$cred = New-Object System.Management.Automation.PSCredential("[USER1]", $pw)
Invoke-Command -ComputerName [B] -Credential $cred { dir c:\ }
这让我得到了正确的结果(目录列表)。
调用 B > C(相同,除了路径、用户等)
$k = ([KEY])
$p = Get-Content "[PATH2]"| ConvertTo-SecureString -Key $k
$c = New-Object System.Management.Automation.PSCredential("[USER2]", $p)
Invoke-Command -ComputerName [C] -Credential $c { dir c:\ }
这让我得到了正确的结果(目录列表)。
现在,组合调用 A > C:
$key = ([KEY])
$pw = Get-Content "[PATH1]"| ConvertTo-SecureString -Key $key
$cred = New-Object System.Management.Automation.PSCredential("[USER1]", $pw)
Invoke-Command -ComputerName [B] -Credential $cred { $k = ([KEY]); $p = Get-Content "[PATH2]"| ConvertTo-SecureString -Key $k; $c = New-Object System.Management.Automation.PSCredential("[USER2]", $p); Invoke-Command -ComputerName [C] -Credential $c { dir c:\ } }
产生上述错误。