Выражение, стоящее за оператором 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
относится к родительской (вызывающей) области, поэтому вы можете просто прочитать ее из вызывающего кода.