比较对象导致不正确的结果

时间:2019-01-02 19:31:45

标签: powershell csv compare

当尝试将Compare-Object用于两个PC名称列表时,结果是一个项中的服务器名称列表,而另一个则是System.Object[]。这两个项目都是字符串类型,所以我不确定为什么会这样。

我的两个列表名称分别为$SCC$windowsWorkstations。当我运行$SCC时,它将返回PC名称列表。当我运行$windowsWorkstations.Name时,它还会返回PC名称列表。两者都是String类型。

为明确起见,$windowsWorkstations的类型为object,而$windowsWorkstations.Name的类型为String

Compare-Object -ReferenceObject $SCC -DifferenceObject $windowsWorkstations.Name -IncludeEqual

结果是一个列表,其中包含$SCC中带有=>作为侧面指示符的所有PC名称。列表中的最后一项是System.Object[],其中<=是侧面指示符。

InputObject     SideIndicator
-----------     -------------
PC53127         =>
System.Object[] <=

注意,我缩短了Compare-Object的结果,因为$SCC上有15,000多个PC名称。我仅以1为例。

什么使比较结果为System.Object[]?您不能比较psobjects吗?

1 个答案:

答案 0 :(得分:0)

在对象上调用ToString()给您该对象的字符串表示形式。在许多情况下,字符串表示形式只是对象的类型名称。在您的特定情况下,$SCC似乎是一个对象数组,因此在其上调用ToString()会为您提供类型名称System.Object[]

演示:

PS C:\> $v = Get-ChildItem
PS C:\> $v.ToString()
System.Object[]

如果$SCC的元素是字符串,那么从您的问题进行比较就可以了。只是不要先将$SCC转换为字符串。

如果$SCC的元素不是字符串,则需要使用有关该变量内容的更多信息来更新问题。