有没有办法在Catch {
中为数组的变量命名,然后在函数的Try/script部分中为该数组指定另一个数组名称?
因为当我尝试这样做$computerObject = [PSCustomObject]@{
然后写输出$computerArray,我只能在Powershell窗口中显示Try/script数组中的任何一个变量。或者只从我的Catch
获取$error
消息。。有没有办法给每个数组命名,这样我就可以像下面这样做了。
write-host "Results"
Write-Output $computerArray
-在此处显示我的第一个阵列
write-host "Failed: computerlist" -foregroundcolor red
Write-Output $computerArray2
-在此显示$error
计算机。$error
应该只包括没有响应ping的计算机和我的invoke-command
computerlist.txt 中的其他内容
为什么我需要单独使用它,唯一真正的答案是有时我希望我的数组位于CSV文件中。有时我只想直接从Powershell窗口复制信息。然后,将出现故障的计算机分离并不在同一阵列输出中更为实际。
此函数(如注释中所述(没有利用CIM cmdlet的并行功能,建议对其进行一些调整,但为了回答实际问题,如何"分割">成功与失败之间的输出:
该函数不需要任何修改即可实现,它的try
和catch
块输出具有相同属性的对象,幸运的是,其中一个属性是Error
,它的值是布尔值,因此您可以简单地首先查询所有计算机,然后使用.Where
和Split
模式分割结果。
代码如下:
$computers = 'computer1', 'computer2', ....
$computerArray = foreach($computer in $computers) {
Get-ComputerInformation -ComputerName $computer
}
# now we can split between FAIL and SUCCESS
$fail, $success = $computerArray.Where({ $_.Error }, 'Split')
$success | Export-Csv pathtosuccess.csv -NoTypeInformation
$fail | Export-Csv pathtofail.csv -NoTypeInformation