在我的函数中写入输出PSCustomObject]@{时可能有不同的数组名称



有没有办法在Catch {中为数组的变量命名,然后在函数的Try/script部分中为该数组指定另一个数组名称?

因为当我尝试这样做$computerObject = [PSCustomObject]@{然后写输出$computerArray,我只能在Powershell窗口中显示Try/script数组中的任何一个变量。或者只从我的Catch获取$error消息。。有没有办法给每个数组命名,这样我就可以像下面这样做了。

write-host "Results"Write-Output $computerArray-在此处显示我的第一个阵列

write-host "Failed: computerlist" -foregroundcolor redWrite-Output $computerArray2-在此显示$error计算机。$error应该只包括没有响应ping的计算机和我的invoke-commandcomputerlist.txt 中的其他内容

为什么我需要单独使用它,唯一真正的答案是有时我希望我的数组位于CSV文件中。有时我只想直接从Powershell窗口复制信息。然后,将出现故障的计算机分离并不在同一阵列输出中更为实际。

此函数(如注释中所述(没有利用CIM cmdlet的并行功能,建议对其进行一些调整,但为了回答实际问题,如何"分割">成功与失败之间的输出:

该函数不需要任何修改即可实现,它的trycatch块输出具有相同属性的对象,幸运的是,其中一个属性是Error,它的值是布尔值,因此您可以简单地首先查询所有计算机,然后使用.WhereSplit模式分割结果。

代码如下:

$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

最新更新