Как PowerShell информирует об окончании выполнения команды?

PowerShell предоставляет несколько способов информировать о завершении выполнения команды. Давайте рассмотрим каждый из них подробнее.

1. Использование переменной $?:
После выполнения каждой команды в PowerShell переменная $? устанавливается в значение $true, если команда успешно выполнена, и в значение $false, если команда завершилась с ошибкой. Таким образом, можно использовать это условие для проверки успешного выполнения команды. Например:

   $result = Get-Process
   if ($? -eq $true) {
       Write-Host "Команда выполнена успешно"
   } else {
       Write-Host "Команда завершилась с ошибкой"
   }

2. Использование записи $LASTEXITCODE:
После выполнения внешней команды или скрипта PowerShell устанавливает переменную $LASTEXITCODE в код выхода (exit code) этой команды. Код выхода 0 обычно указывает на успешное выполнение команды, а любой другой код выхода указывает на ошибку. Пример:

   Start-Process -FilePath "notepad.exe" -Wait
   if ($LASTEXITCODE -eq 0) {
       Write-Host "Команда выполнена успешно"
   } else {
       Write-Host "Команда завершилась с ошибкой"
   }

3. Использование событий:
PowerShell также поддерживает использование событий для отслеживания завершения выполнения команды. Например, можно подписаться на событие Exited объекта Process, чтобы получить уведомление о завершении команды. Пример:

   $process = Start-Process -FilePath "notepad.exe" -PassThru
   $process.WaitForExit()
   if ($process.ExitCode -eq 0) {
       Write-Host "Команда выполнена успешно"
   } else {
       Write-Host "Команда завершилась с ошибкой"
   }

В этом примере команда "notepad.exe" выполняется с использованием Start-Process, а затем ожидается его завершение с помощью метода WaitForExit(). После завершения команды можно проверить код выхода с помощью свойства ExitCode объекта Process.

Это лишь некоторые из способов, которые можно использовать для информирования о завершении выполнения команды в PowerShell. Если есть требования к другим моментам, таким как вывод сообщений, обработка исключений и т. д., напишите, и я расскажу о них подробнее.