所以这里有趣的时间:我有一个列中包含虚拟服务器值的数组等。每个服务器经历的ForEach循环,我试图清除服务器磁盘数为0。这是我的语法:
$VMInfo.Disks = Get-HardDisk -VM $VM | Measure-Object | Select-Object Count
在导出的CSV文件中,如果不是硬盘,则该列的值为{{Count = 0}。所以我想这个if语句是从报告中清除这些服务器的好方法(这个if语句是ForEach整体命令的一部分):
if ($VMInfo.Disks -ne "@{Count=0}") {
$Report += $VMInfo
}
但是,当我包含if语句时,我仍然会在导出的CSV文件中包含没有硬盘驱动器的服务器。有任何想法吗?我是否需要更改$ VMInfo.Disks -ne" @ {Count = 0}"命令别的?任何帮助将不胜感激!
编辑: 试图使用-gt 0而不是-ne" @ {Count = 0}"但得到了以下错误:
无法比较" @ {Count = 2}"到" 0"因为对象不是 相同的类型或对象" @ {Count = 2}"没有实施" IComparable"。
编辑: 试图使用@ {Count = 0}代替" @ {Count = 0}"但它没有什么区别 - CSV中仍然有@ {Count = 0}的列。
答案 0 :(得分:0)
尽管没有任何解释或帮助(对stackoverflow这么好的介绍)被低估了,但是一位同事帮助我解决了这个问题:
上面的$ VMInfo.Disks行基本上在结果中创建了一个哈希表 - 这就是电子表格显示@ {Count = 0}的原因。在上面的$ VMInfo.Disks行之后我需要做的是使用以下行:
$VMInfo.Disks = ($VMInfo.Disks).Count
那将返回一个整数。因为它会返回一个整数,所以我可以使用这个if语句:
if ($VMInfo.Disks -ne 0) {
$Report += $VMInfo
}
现在我很好!