4

PowerShell 的新手,但我喜欢到目前为止我可以这么快做这么多的事实 :)

无论如何,我因此在 PowerShell 脚本中启动了一个远程进程:

$compname = "MY-PC"
$myinstallcmd = "c:\install\myprog.exe /s"
$proc = Invoke-WmiMethod -class Win32_Process -name Create -ArgumentList ($myinstallcmd) -ComputerName $compname

在我尝试过的大多数 PC 上,Invoke-WmiMethod cmdlet 运行良好,但在一台 PC 上,它挂起。我现在要做的是获取正在运行的进程的状态,如果它被挂起,杀死它并记录杀死,然后继续。

我确实在博文中找到了一种可能的方法来执行此 操作 在 Powershell 中远程启动进程,在 Windows 中获取 %ERRORLEVEL% - 但是,当我尝试对进程 $proc.ProcessId 执行 Register-WmiEvent 时,我得到了可怕0x80070005 (E_ACCESSDENIED)的错误...我以域管理员身份运行 PowerShell 主机。

任何人都可以建议一种方法,让我可以在我开始的过程中获得状态,并能够根据状态采取行动吗?

谢谢!

4

1 回答 1

0

更新:我猜您缺少远程系统凭据:

-Credential尝试使用参数将凭据传递给远程系统。这需要一个 PSCredential 对象,因此您可以执行以下操作:

$cred = Get-Credential
Register-WMIEvent -Credential $cred <and other parameters here>

查看以下任何一项是否解决了拒绝访问错误:

0x80070005 (DCOM ACCESS_DENIED) 当连接的用户未被远程服务器识别或以某种方式受到限制(例如,用户可能被锁定)时,会发生此错误。当帐户位于不同域中时,最常发生这种情况。最近对 WMI 安全性的更改也可能导致发生此错误:

  • Windows XP 和 Windows Server 2003 中不允许使用以前允许的空白密码。

  • WMI 不允许异步回调到 Windows 98 客户端。像 SWbemServices.ExecNotificationQueryAsync 从 Windows 98 计算机到 Windows XP 计算机的调用将导致拒绝访问错误返回到 Windows 98 计算机。

  • DCOM 配置访问设置可能已更改。

  • 如果目标计算机运行的是 Windows XP,则注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 下的 Forceguest 值可能会设置为强制关闭来宾帐户(值为零)。

来源:http ://technet.microsoft.com/en-us/library/ee692772.aspx

于 2011-03-22T01:29:57.350 回答