我正在尝试远程管理 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"
Windows Update API 很特别。它通过检查您的令牌是否标记为远程来专门检查和禁止远程访问。不知道为什么要这样写。
我最终创建了一个计划任务并在其中调用了 Windows 更新 API - 非常麻烦。
根据 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 作为身份验证机制。
您还可以将命令包装在计划任务中并立即运行,但这是很多不必要的额外工作。
从 Stack Overflow 复制:Powershell Remote:Microsoft.Update.Session,拒绝访问:0x80070005:
当您处于远程 PowerShell 会话中时,您在此远程计算机上的登录会话被标记为“网络”登录(登录类型:3)。出于一些不明确的原因(安全?出售 SCCM?),部分Windows 更新代理 COM API 被限制为仅供本地登录的管理员使用。
建议使用 PsExec 和计划任务作为解决方法。
IMO,最无缝(并且仍然安全)的解决方案是促进PowerShell会话配置/ JEA的RunAs风格的“本地虚拟帐户”功能。通常,JEA 用于“限制”用户可以在远程计算机上以 PowerShell 方式执行的操作,但我们在这里(滥用)使用它来获得完全访问权限,就好像我们是本地登录的管理员一样。
ComputerB
(1.) 在(远程服务器)上创建一个新的不受限制的(和持久的!)会话配置:(2.) 从
ComputerA
(本地客户端)连接到我们在 ComputerB 上的无限制会话配置:尝试使用
Get-WURebootStatus -ComputerName <your remote computer> -Silent
。