Какова ценность скриптового блока 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