Какова ценность скриптового блока powershell?

Я пытаюсь запустить фрагмент удаленного кода, используя удаленное взаимодействие powershell и получая странное поведение, которое я не могу объяснить. Это последовательность команд, которые я запускаю.

$sb1 = {$r1 = 1; $r2 = 2; $r3 = Get-Culture; return $r3}
$sb2 = {1; 2; $r3 = Get-Culture; return $r3}

$session = New-PSSession -ComputerName $comp -Credential $creds

$ret1 = Invoke-Command -Session $Session -ScriptBlock $sb1
$ret2 = Invoke-Command -Session $Session -ScriptBlock $sb2

$ret1
>>> en-US
$ret2
>>> 1

Кто-нибудь знает причину такого поведения? Я нахожу это очень странным. Оператор return игнорируется, а блок сценария оценивается по первому выражению "uncaptured". Ммм?

Кроме того, если я хочу, чтобы этот блок всегда оценивался в операторе return или даже в последнем утверждении, кто-нибудь знает, как я могу это сделать?

1 ответ

Весь блок скрипта выполняется и результаты возвращаются. $ ret2 будет содержать три ответа. Первый - "1", второй - "2", а третий - результат "Get-Culture". Вы можете изучить их, посмотрев на $ret2[0], $ret2[1] и $ret[2]. Вы можете узнать, сколько результатов будет возвращено с помощью $ ret2.count.

Ниже показано все в $ ret2 на моем компьютере.

PS C:\Users\user\Documents\PowerShell> $ret2 | select * | fl
@{PSComputerName=MyComputer; RunspaceId=b9568f5d-88a0-4346-be1a-827b8ba2f29d; PSShowComputerName=True}
@{PSComputerName=MyComputer; RunspaceId=b9568f5d-88a0-4346-be1a-827b8ba2f29d; PSShowComputerName=True}


PSComputerName                 : MyComputer
RunspaceId                     : b9568f5d-88a0-4346-be1a-827b8ba2f29d
Parent                         : en
LCID                           : 1033
KeyboardLayoutId               : 1033
Name                           : en-US
IetfLanguageTag                : en-US
DisplayName                    : English (United States)
NativeName                     : English (United States)
EnglishName                    : English (United States)
TwoLetterISOLanguageName       : en
ThreeLetterISOLanguageName     : eng
ThreeLetterWindowsLanguageName : ENU
CompareInfo                    : CompareInfo - en-US
TextInfo                       : TextInfo - en-US
IsNeutralCulture               : False
CultureTypes                   : SpecificCultures, InstalledWin32Cultures, FrameworkCultures
NumberFormat                   : System.Globalization.NumberFormatInfo
DateTimeFormat                 : System.Globalization.DateTimeFormatInfo
Calendar                       : System.Globalization.GregorianCalendar
OptionalCalendars              : {System.Globalization.GregorianCalendar, System.Globalization.GregorianCalendar}
UseUserOverride                : True
IsReadOnly                     : False
Другие вопросы по тегам