当尝试将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
吗?
答案 0 :(得分:0)
在对象上调用ToString()
给您该对象的字符串表示形式。在许多情况下,字符串表示形式只是对象的类型名称。在您的特定情况下,$SCC
似乎是一个对象数组,因此在其上调用ToString()
会为您提供类型名称System.Object[]
。
演示:
PS C:\> $v = Get-ChildItem PS C:\> $v.ToString() System.Object[]
如果$SCC
的元素是字符串,那么从您的问题进行比较就可以了。只是不要先将$SCC
转换为字符串。
如果$SCC
的元素不是字符串,则需要使用有关该变量内容的更多信息来更新问题。