5

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

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

我现在在那些远程站点之一。我当前的工作站是(Computer-SiteA)。所以我不能直接登录Computer-Central;我必须加入 RDP。问题是,RDP 会话在脚本完成之前超时(大约需要 12 小时)。所以我不能进入 RDP,启动脚本,然后走开。由于各种原因,制作计划任务也被淘汰了。

Powershell 远程处理已启用。我使用我的域管理员帐户登录到 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”,它会失败。我希望这有帮助。

4

1 回答 1

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,并且不允许在不再次提供用户名和密码的情况下从 B 到 C 再次使用 NTLM。

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

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

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

希望这可以帮助,

于 2013-06-21T14:51:10.360 回答