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主机作为域管理员。
任何人都可以建议一种方法,我可以获得我已经开始的流程的状态,并能够根据状态采取行动吗?
谢谢!
答案 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帐户(值为零)。