请教两个个关于invoke-command结果返回的问题


PowerShell交流中心分类: Powershell基础请教两个个关于invoke-command结果返回的问题
0
Arthas Liu asked 5年 ago

如下的一段脚本,对于一批服务器进行一些测试,然后输出结果。这里有两个疑问想请教一下诸位大神。

问题1, 通常我使用$a=icm -computername XXX -scriptblock{XXXX} 来取得icm执行的结果,并赋值给一个变量,方便最后输出成文本,但是我发现如果scriptblock中使用了write-host之后,这个方法就不管用了,被赋值的变量$a将返回空值,有没有办法既使用write-host又能方便最终结果输出为文本呢?

问题2,如下的脚本中包含两种结果,一个是pass一个是failed,怎样在打印到控制台的同时又能将最终结果分别输出到两个文本文件呢?

icm -ComputerName $serverlist -ScriptBlock{
    $servername=$env:COMPUTERNAME
    $result=.....testcode......
    
    if($result){Write-Host "$servername, test pass" -ForegroundColor Green}
    else{Write-Host "$servername, test failed" -ForegroundColor Red}
}
×用微信扫描并分享
Arthas Liu replied 5年 ago

想到一个解决方案,就是在scriptblock中不使用write-host,将icm的结果保存为一个数组,再对数组进行操作

Mooser Lee 管理员 replied 5年 ago

感谢分享

1 Answers
0
crushonme answered 5年 ago

icm -ComputerName $serverlist -ScriptBlock{
    $servername=$env:COMPUTERNAME
    $result=.....testcode......
     
    if($result){Add-Content -Path "success.txt" -value "$servername, test pass" }
    else{Add-Content -Path "success.txt" -value "$servername, test failed"}
}