获取Invoke-WmiMethod启动的进程的状态

时间:2011-03-21 19:31:01

标签: powershell powershell-v2.0 win32-process

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上,它就悬空了。我现在要做的是获取正在运行的进程的状态,如果它已挂起,请将其终止并记录kill,然后继续。

我确实在帖子中找到了一种可行的方法 Starting a process remotely in Powershell, getting %ERRORLEVEL% in Windows - 然而,当我尝试在进程$ proc.ProcessId上执行Register-WmiEvent时,我遇到了可怕的0x80070005 (E_ACCESSDENIED)错误......我正在运行PowerShell主机作为域管理员。

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

谢谢!

1 个答案:

答案 0 :(得分: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客户端进行异步回调。从Windows 98计算机到Windows XP计算机之类的调用(如SWbemServices.ExecNotificationQueryAsync)将导致返回到Windows 98计算机的“拒绝访问”错误。

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

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

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