捕获Invoke-Command返回值时无法查看Python脚本输出的问题及解决
问题原因及解决办法
原因
当你将Invoke-Command的返回值赋值给变量时,PowerShell会把远程执行Python脚本产生的所有标准输出内容都捕获到变量中,不再默认输出到控制台。原本要显示的内容被存进$returnedValue里,这就是赋值后看不到输出的核心原因。
解决办法
方法1:赋值后手动输出变量
先把输出捕获到变量,之后直接打印变量即可同时保留捕获值和显示输出:
$Session = New-PSSession -ComputerName "WSEM00G2NZ" -Credential $credObject $returnedValue = Invoke-Command -Session $Session -Scriptblock { python path\to\script\print_stuff.py } # 手动输出捕获的内容 $returnedValue Remove-PSSession -Session $Session
方法2:使用-OutVariable参数
Invoke-Command支持-OutVariable参数,既能把输出存入指定变量,又会默认将内容输出到控制台:
$Session = New-PSSession -ComputerName "WSEM00G2NZ" -Credential $credObject Invoke-Command -Session $Session -Scriptblock { python path\to\script\print_stuff.py } -OutVariable returnedValue Remove-PSSession -Session $Session # 后续可直接使用$returnedValue变量
方法3:同时捕获输出和Python脚本退出码
如果需要同时获取Python脚本的标准输出和退出码(比如脚本用sys.exit()返回状态),可以在远程脚本块里主动返回退出码,之后分离输出内容和退出码:
$Session = New-PSSession -ComputerName "WSEM00G2NZ" -Credential $credObject $capturedContent = Invoke-Command -Session $Session -Scriptblock { # 执行Python脚本,输出会被捕获 python path\to\script\print_stuff.py # 返回脚本的退出码 $LASTEXITCODE } # 输出脚本的标准输出(除最后一个元素外的所有内容) $capturedContent[0..($capturedContent.Count-2)] # 获取退出码 $exitCode = $capturedContent[-1] Remove-PSSession -Session $Session
内容的提问来源于stack exchange,提问作者user3221037
相关产品推荐
相关产品推荐

