PS4, Get-WMIObject возвращает PID=0 для службы собственной разработки.

Заранее спасибо.

Вот скрипт 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

stop-process : Невозможно остановить процесс "Idle (0)" из-за следующей
ошибки: Отказано в доступе At C:\Windows\TEMP\tmp206027652026805712.ps1:6 char:1 + stop-process -id $oopid - force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (System.Diagnostics.Process (Idle):Process) [Stop-Process], ProcessCommandException + FullyQualifiedErrorId: CanNotStopProcess, Microsoft.PowerShell.Command s.StopProcessCommand

Ошибка №2

wait-process : эта команда остановила работу, потому что не может ждать в процессе «System Idle». Укажите другой процесс и снова запустите команду. В C:\Windows\TEMP\tmp206027652026805712.ps1:7 char:1 + wait-process -id $oopid -timeout 60 -WarningAction SilentlyContinue + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ Информация о категории : ObjectNotFound: (System.Diagnostics.Process
(Idle):Process) [Wait-Process], ProcessCommandException + FullyQualifiedErrorId : WaitOnIdleProcess,Microsoft.PowerShell.Commands. Команда ЖдатьПроцесс

===============================
command exit code: 0

Приведенный выше код является частью более крупного процесса, который запускается во многих службах на серверах Windows 2012 и рабочих станциях Win 7. Иногда, хотя это терпит неудачу, и я не знаю, почему. В этом случае извлекается правильное имя службы, которое можно увидеть в выводе команды, но PID равен 0, что не может быть правильным, поскольку это PID процесса бездействия системы.

Родительское программное обеспечение, вызывающее этот сценарий PS, позже показывает, что файлы в папке установки HotKey не могут быть обновлены, поскольку «(Процесс не может получить доступ к файлу, поскольку он используется другим процессом)», что имеет смысл, поскольку служба HotKeyService не правильно остановиться.

Я снова запустил родительское программное обеспечение, и оно работало правильно на том же сервисе.

Мой вопрос: как Get-WMIObject может вернуть правильное имя службы, но затем на следующем шаге показать нулевой PID? Я не могу понять это.

Спасибо за помощь. КДж


person K.J.    schedule 31.10.2017    source источник
comment
Я бы посоветовал вам добавить шаг для проверки PID, и если он равен 0, либо попробуйте еще раз несколько раз, либо изящно выдайте ошибку. Может быть очень сложно/невозможно отследить, почему иногда происходит сбой, поэтому, вероятно, проще повторить попытку.   -  person arco444    schedule 31.10.2017


Ответы (1)


Когда вы видите экземпляр Win32_Service со значением ProcessId 0, это просто означает, что служба не запущена.

Вы обнаружите, что:

(Get-WMiObject Win32_Service -Filter "Name ='HotKeyService'").State

is Stopped

person Mathias R. Jessen    schedule 31.10.2017