Маркировка процесса для определения статуса его выполнения - PullRequest
0 голосов
/ 10 марта 2020

У меня есть скрипт D:\Script.ps1, который запускается с помощью ярлыка:

# The shortcut is located in the startup folder $Env:AppData\Microsoft\Windows\Start Menu\Programs\Startup\Script.lnk

# The object in this shortcut description
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File D:\Script.ps1

Как я могу увидеть в консоли, что процесс Script работает? Как я могу отметить этот процесс в сценарии или в описании ярлыка, чтобы я мог видеть, работает ли он или уже выполнил задачу и выполнил работу? Я мог бы отслеживать процесс, используя идентификатор (Get-Process).ID, но я не знаю идентификатор моего процесса при запуске ОС. Я не могу получить его имя легко и установить, как, например, в Start-Job. Я не могу отличить guish от других запущенных процессов powershell через (Get-Process).ProcessName, все они имеют ProcessName powershell. Что я могу сделать, чтобы отличить guish мой powershell процесс от других powershell запущенных? Спасибо

1 Ответ

1 голос
/ 10 марта 2020

Если вы можете отказаться от использования командного файла в качестве оболочки или можете допустить другой скрипт PowerShell для запуска реального скрипта. Вы можете использовать Start-Process с параметром -PassThru в сочетании с Wait-Process, чтобы сообщить вам, когда он завершится.

Что-то вроде:

$Process = Start-Process -FilePath C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -ArgumentList "-command .{read-host} -WindowStyle Normal" -passthru 
$Process | Wait-Process
Write-Host "The process has completed."

Однако, если вам необходимо соблюдать кроме этого процесса, есть несколько других подходов, которые я могу придумать.

Get-Process не возвращает свойство командной строки, но класс WMI Win32_Process делает. Вы можете сопоставить некоторые аспекты CommandLine, чтобы дифференцировать и изолировать процесс, выполняющий интересующий скрипт. Что-то вроде:

Get-CimInstance win32_Process -Filter "CommandLine LIKE '%d:\\script.ps1'"

Вы можете использовать это напрямую или получить PID или любую другую характеристику c для дальнейшего наблюдения. С фильтром вы можете более детально разобраться.

Примечание. Как правило, рекомендуется перемещать критерии фильтра влево, но в этом случае вы можете подумать об использовании PowerShell | Where-Object{}, так как производительность, вероятно, не будет проблемой. Это может облегчить фильтрацию на основе CommandLine. Я сделал бы это только в том случае, если существующий фильтр был проблематичным.

Вы также можете добавить столбец командной строки в диспетчере задач, чтобы посмотреть точно так же, но без сценариев и т. Д. c ...

Это не совсем красноречивые решения, но дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...