题 为什么域管理员可以在本地运行PowerShell cmd,但是通过WinRM与同一帐户连接,命令会返回UnauthorizedAccessException?


我正在尝试远程管理Windows 7计算机。我启用了WinRM并且可以使用 Enter-PsSession 连接到远程计算机。

但是,我注意到在本地运行特定命令与远程运行特定命令之间存在差异,即使我使用相同的用户帐户(域管理员)进行连接也是如此。

远程会话的输出是:

> enter-pssession -computername  REMOTEHOST
[REMOTEHOST} > Get-WURebootStatus
New-Object : Creating an instance of the COM component with CLSID {C01B9BA0-BEA7-41BA-B604-D0A36F469133} from the IClassFactory failed due to the following error: 80070005.
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\pswindowsupdate\Get-WURebootStatus.ps1:52 char:33
+             $objSystemInfo= New-Object <<<<  -ComObject "Microsoft.Update.SystemInfo"
+ CategoryInfo          : NotSpecified: (:) [New-Object], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.NewObjectCommand

ExecutionPolicy设置为“Unrestricted”,当我在远程计算机上使用本地PowerShell会话时,此命令很有用。

远程PowerShell会话是否有不同的安全上下文?

编辑:它失败的特定线是这一个:

$objSystemInfo= New-Object -ComObject "Microsoft.Update.SystemInfo"

5
2018-03-28 12:15




可能是UAC吗? - HopelessN00b
即使该帐户是域管理员? - growse
是的,UAC提示(以及Windows Vista及其对管理员帐户使用拆分令牌身份验证的方式是技术性的)会干扰域管理员,就像对本地管理员一样。 - HopelessN00b
你启用了:winrm set winrm / config / winrs @ {AllowRemoteShellAccess =“True”} - timmeyh
我启用了 RemoteShellAccess 通过GPO,我仍然看到相同的结果。 - growse


答案:


Windows Update API很特别。它通过检查您的令牌是否标记为远程来专门检查和禁止远程访问。我不知道为什么这样写。

我最终创建了一个计划任务并在其中调用了Windows更新API - 非常麻烦。


3
2018-04-03 01:01



我认为这可能是前进的方向。 - growse


根据Get-WURebootStatus cmdlet如何访问它的信息,我认为它可能与PowerShell中的“第二跳”问题有关。

当您进入远程PowerShell会话时,您要求WinRM使用您的凭据在远程主机上创建会话。如果在同一会话中,您尝试访问需要这些凭据的另一个(远程)系统或服务,则该请求将失败,因为远程计算机无权使用您的凭据进行身份验证。一个'嘿,脚本专家!'博客解释得很好:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/14/enable-powershell-quot-second-hop-quot-functionality-with-credssp.aspx

出于同样的原因,在远程连接到计算机然后尝试使用Test-Path访问另一个远程计算机共享路径之后,您会看到相同(或类似)的问题。

解决方案(如博客文章中所示)是在创建PSSession时启用和使用CredSSP作为身份验证机制。

您还可以将命令包装在计划任务中,并立即执行该操作,但这是一项可能不必要的额外工作。


1
2018-04-04 01:38



编辑 说得太早了。 Get-WUList 给出一个理智的结果,但运行 Get-WUInstall 要么 Get-WURebootStatus 还是扔了一个 0x80070005 '访问被拒绝'错误。 - growse


尝试使用 Get-WURebootStatus -ComputerName <your remote computer> -Silent


-1
2017-08-16 22:59