我正在尝试使用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语句,并将scriptblock计算为第一个'uncaptured'表达式。嗯?
另外,如果我确实希望这个块总是评估为return语句,甚至是最后一个语句,那么有没有人知道我可以如何实现它?
答案 0 :(得分:0)
执行整个脚本块并返回结果。 $ 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