PowerShell-эквивалент Perl's $ CHILD_ERROR - PullRequest
0 голосов
/ 08 марта 2019

Мне по существу требуется функциональность в Powershell, которая выполняет заданную строку (это может быть команда CMD / Powershell, perl / python / powershell с аргументами или exe с аргументами и т. Д.), Фиксирующая его значение выхода.В perl я передаю строку в system () и использую perlval для $ CHILD_ERROR и сдвигаю ее для доступа к коду выхода.

В powershell я не знаю.

Я пыталсяиспользуя Invoke-Expression, но даже если выражение, переданное Invoke-Expression, завершится неудачно, сам вызов Invoke-Expression завершится успешно.

1 Ответ

2 голосов
/ 08 марта 2019

Вы можете использовать $ LASTEXITCODE , чтобы получить код выхода из внешней программы или логическое значение $? , чтобы проверить, была ли последняя операция успешной или неудачной. Запустите Get-Help about_Automatic_Variables -ShowWindow из консоли PowerShell, чтобы увидеть больше деталей.

Возможно, вы захотите проверить команду & (call) в качестве альтернативы Invoke-Expression при запуске внешних программ. Запустите Get-Help about_Automatic_Variables -ShowWindow из консоли PowerShell для получения подробной информации.

Также помните, что вы можете просто вызывать внешнюю программу, не используя одну из команд выше. Смотрите пример ниже:

param($Hostname="127.0.0.1", $Tries=1, $Wait=1000)
$output = ping.exe $Hostname -n $Tries -w $Wait # captures anything written to stdout
$output|? {$_ -match 'Request timed out'}|Write-Warning
$LASTEXITCODE # returns the exit code from ping.exe

Вы можете скопировать его в файл test.ps1 и запустить его из окна консоли PowerShell (например,. \ Test.ps1 8.8.8.8), чтобы посмотреть, как он работает.

...