Powershell:Invoke-Command权限问题

时间:2013-06-21 14:15:18

标签: powershell wmi

总结:在另一台计算机上运行“get-wmiobject”可以正常运行。但是当我“调用命令”“get-wmiobject”时,我被拒绝访问。

详细信息:我的中心站点有一个工作站(计算机中心),我从中运行了一个库存脚本。库存脚本遍历所有远程站点上的每个IP的几个“get-wmi”命令。如果我以域管理员身份登录到Computer-Central,则脚本可以正常运行。

我现在在其中一个远程站点。我目前的工作站是(Computer-SiteA)。所以我无法直接登录Computer-Central;我必须使用RDP。问题是,RDP会话在脚本完成之前超时(大约需要12个小时)。所以我不能RDP,启动脚本,走开。出于各种原因,制定计划任务也是出局。

启用Powershell Remoting。我使用我的域管理员帐户登录到Computer-SiteA并运行以下命令:

invoke-command -computername Computer-Central {dir c:}

这很正常。所以我使用以下命令启动了库存脚本(再次,在Computer-SiteA上以域管理员身份运行):

invoke-command -computername Computer-Central -filepath c:\inventory.ps1

脚本启动并在一夜之间运行。但是get-wmi命令都产生了“拒绝访问”错误。 我RDP进入Computer-Central并运行以下命令:

get-wmiobject -class win32_computersystem -property name -computername Computer-SiteB

这很正常。我收到了WMI信息。

然后我登录到Computer-SiteA并运行以下命令:

invoke-command -computername Computer-Central {get-wmiobject -class     win32_computersystem -property name -computername Computer-SiteB}

“拒绝访问”失败了。我以域管理员身份登录,甚至做了“以不同用户身份运行”以确保PS控制台作为我的域管理员帐户打开。

我很困惑。 “Invoke-Command”应该使用我在本地PC上使用的凭据启动远程系统上的Powershell.exe进程。 “get-wmiobject”命令应该使用相同的凭据将WMI查询从远程PC传递到目标PC。但事实似乎并非如此。

有什么想法吗?

编辑:我运行此命令以进行计算机中心查询。

invoke-command -computername Computer-Central {get-wmiobject -class     win32_computersystem -property name -computername Computer-Central}

那很有用。如果我在远程系统上调用“get-wmiobject”作为目标,它就可以工作。如果我在针对第三个系统的远程系统上调用“get-wmiobject”,则会失败。我希望这会有所帮助。

1 个答案:

答案 0 :(得分:3)

问题是您正在对远程计算机使用NTLM(Windows)身份验证,然后尝试连接到另一台计算机。这是经典的“双跳”问题:您在机器A上,对机器B进行身份验证,然后尝试从B连接到机器C(通过WMI。)

http://blogs.msdn.com/b/besidethepoint/archive/2010/05/09/double-hop-authentication-why-ntlm-fails-and-kerberos-works.aspx

它适用于RDP,因为您使用RDP从A连接到B并为B提供您的用户名和密码(您实际上必须输入RDP。)此时,B可以使用NTLM连接到C 。当您不使用RDP时,您使用NTLM从A连接到B,然后您不能再次使用NTLM从B到C而不再提供您的用户名和密码。

值得庆幸的是PowerShell有一个解决方案,它被称为CredSSP身份验证。它确实需要一些额外的工作来设置,但是一旦完成,你就可以做你需要做的事情。这是一个很好的演练:

https://blogs.technet.microsoft.com/heyscriptingguy/2012/11/14/enable-powershell-second-hop-functionality-with-credssp/

CredSSP将您的用户名和密码“隧道”从A到B,这样您就可以使用NTLM向C进行身份验证。当然,您必须重新输入您的凭据 - 它无法确定您从初次登录到A的密码(可能是您的桌面或笔记本电脑。)

希望这有帮助,