Как поймать возвращаемое значение в скрипте Powershell - PullRequest
0 голосов
/ 29 мая 2018

У меня есть сценарий powershell (.ps1), который выполняет другой сценарий Powershell с возвращаемым значением.

Я вызываю сценарий с помощью этой команды:

$result = Invoke-Expression -Command ".\check.ps1 $fileCommon"

Write-Output $result

Выходные данные - это только Write-Ouput, которые имеют другой скрипт, но не возвращаемое значение $true или $false.

Как я могу поймать возврат из другого скрипта?

1 Ответ

0 голосов
/ 29 мая 2018

Выражение, стоящее за оператором return в PowerShell, оценивается как любое другое выражение.Если он выдает результат, он записывается в стандартный вывод.Ваш результат $ получает все, что записано в stdout скриптом.Если в стандартный вывод записано более одной вещи, вы получите эти вещи в массиве.

Так, если ваш check.ps1, например, выглядит следующим образом:

Write-Output "$args[0]"
return $false

и вы вызываете его с помощью

$result = &".\check.ps1" xxx

, тогда $result будет массивом объектов размера 2 со значениями "xxx" (строка) и "False" (bool).

Если вы не можете изменить скриптто есть, записывает только возвращаемое значение в stdout (что будет самым чистым способом), вы можете игнорировать все, кроме последнего значения:

$result = &".\check.ps1" xxx | select -Last 1

Теперь $result будет содержать только «False» в качестве логического значениязначение.

Если вы можете изменить скрипт, другой вариант - передать имя переменной и установить его в скрипте.

Вызов:

&".\check.ps1" $fileCommon "result"
if ($result) {
    # Do things
}

Скрипт:

param($file,$parentvariable)
# Do things
Set-Variable -Name $parentvariable -Value $false -Scope 1

-Scope 1 относится к родительской (вызывающей) области, поэтому вы можете просто прочитать ее из вызывающего кода.

...