提前致谢。
这是我们正在运行的 Powershell4 脚本:
$process = Get-WMiObject Win32_Service -Filter "Name ='HotKeyService'"
write-host Process Name = $process.name
write-host Process ID = $process.processid
$oopid = $process.processid
stop-process -id $oopid -force
wait-process -id $oopid -timeout 60 -WarningAction SilentlyContinue
-------------------------------
working directory: C:\Program Files\HK\HK.HotKeyService
有了这个,我得到:
Process Name = HotKeyService
Process ID = 0
错误#1
停止进程:由于以下错误,无法停止进程“空闲(0)”
:访问被拒绝在 C:\Windows\TEMP\tmp206027652026805712.ps1:6 char:1 + stop-process -id $oopid -force + ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (System.Diagnostics.Process (Idle):Process) [停止-进程],ProcessCommandException + FullyQualifiedErrorId : CouldNotStopProcess,Microsoft.PowerShell.Command s.StopProcessCommand
错误#2
wait-process :此命令停止操作,因为它无法等待“系统空闲”进程。指定另一个进程并再次运行您的命令。在 C:\Windows\TEMP\tmp206027652026805712.ps1:7 char:1 + 等待进程 -id $oopid -timeout 60 -WarningAction SilentlyContinue + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :ObjectNotFound:(System.Diagnostics.Process
(Idl e):Process)[Wait-Process],ProcessCommandException + FullyQualifiedErrorId:WaitOnIdleProcess,Microsoft.PowerShell.Commands。等待进程命令
===============================
command exit code: 0
上面的代码是在 Windows 2012 服务器和 Win 7 工作站上的许多服务上运行的更大进程的一部分。有时虽然它失败了,我不知道为什么。在这种情况下,检索到正确的服务名称,可以在命令 ouptut 中看到,但 PID 为 0,这不可能是正确的,因为那是系统空闲进程的 PID。
调用此 PS 脚本的父软件稍后显示 HotKey 安装文件夹中的文件无法更新,因为“(该进程无法访问该文件,因为它正在被另一个进程使用)”,这是有道理的,因为 HotKeyService 服务没有正确停止。
我再次运行父软件,它在同一服务上正常工作。
我的问题是 Get-WMIObject 如何返回正确的服务名称,但在下一步显示 PID 为零?我想不通这个。
感谢您的帮助。凯杰