Если вы можете отказаться от использования командного файла в качестве оболочки или можете допустить другой скрипт 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 ...
Это не совсем красноречивые решения, но дайте мне знать, если это поможет.