Invoke-Command 行为说明
Invoke-Command behavior clarification
我 运行 在使用 Invoke-Command cmdlet 时遇到了一些麻烦。我使用我的域身份登录到我的本地计算机,该身份在 $server
上具有管理员权限。如果我手动输入我的凭据,然后使用 Invoke-Command,我会收到错误消息:
Cannot open Service Control Manager on computer ''. This operation might require other privileges.
# Works
Get-Service -ComputerName $server-ErrorAction Ignore
# Doesn't work
$cred = Get-Credential
Invoke-Command -ComputerName localhost -ScriptBlock {param($serverIPAddress) Get-Service -ComputerName $server -ErrorAction Ignore} -Credential $cred -ArgumentList $server
内置凭据是否有什么特别之处使它起作用?
这是经典的 kerberos 双跃点。
发生的特别事情是本地计算机有您的凭据。它可以与远程计算机对话并证明它具有凭据,而无需发送它们。
但是,如果远程计算机需要访问第三台计算机(第二跳)上的某些内容,它无法证明它具有凭据(因为它没有),因此它无法进行身份验证。
这是 Kerberos 的设计。
使用Invoke-Command
到localhost 仍然在进行远程连接,所以它仍然算作一个跃点。 Get-Service
调用是第二个跃点。
考虑:
Invoke-Command -ComputerName $server -ScriptBlock { Get-Service -ErrorAction Ignore } -Credential $cred
这会起作用(只要在远程计算机上启用了 powershell 远程处理)。
否则,您需要启用 kerberos 委派或 CredSSP,或者(如果可能,最好)修改您正在做的任何事情,以不需要双跳。
我 运行 在使用 Invoke-Command cmdlet 时遇到了一些麻烦。我使用我的域身份登录到我的本地计算机,该身份在 $server
上具有管理员权限。如果我手动输入我的凭据,然后使用 Invoke-Command,我会收到错误消息:
Cannot open Service Control Manager on computer ''. This operation might require other privileges.
# Works
Get-Service -ComputerName $server-ErrorAction Ignore
# Doesn't work
$cred = Get-Credential
Invoke-Command -ComputerName localhost -ScriptBlock {param($serverIPAddress) Get-Service -ComputerName $server -ErrorAction Ignore} -Credential $cred -ArgumentList $server
内置凭据是否有什么特别之处使它起作用?
这是经典的 kerberos 双跃点。
发生的特别事情是本地计算机有您的凭据。它可以与远程计算机对话并证明它具有凭据,而无需发送它们。
但是,如果远程计算机需要访问第三台计算机(第二跳)上的某些内容,它无法证明它具有凭据(因为它没有),因此它无法进行身份验证。
这是 Kerberos 的设计。
使用Invoke-Command
到localhost 仍然在进行远程连接,所以它仍然算作一个跃点。 Get-Service
调用是第二个跃点。
考虑:
Invoke-Command -ComputerName $server -ScriptBlock { Get-Service -ErrorAction Ignore } -Credential $cred
这会起作用(只要在远程计算机上启用了 powershell 远程处理)。
否则,您需要启用 kerberos 委派或 CredSSP,或者(如果可能,最好)修改您正在做的任何事情,以不需要双跳。