powershell scriptblock的值是什么?



我试图使用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被求值为第一个"未捕获"表达式。嗯?

另外,如果我确实想要这个块总是求值为return语句,甚至是最后一个语句,有人知道我该怎么做吗?

整个脚本块被执行并返回结果。$ret2将包含三个答案。第一个是"1",第二个是"2",第三个是Get-Culture的输出。您可以通过查看$ret2[0]、$ret2[1]和$ret[2]来研究它们。您可以使用$ret2.count查看返回了多少结果。

下面显示了我计算机上$ret2中的所有内容。

PS C:UsersuserDocumentsPowerShell> $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

相关内容

  • 没有找到相关文章

最新更新