在将两个阵列与PowerShell比较对象进行比较时,更改数据类型是必要的



我正在尝试比较两个数组,以下代码不起作用:

$cluster="MyCluster"
foreach ($cluster in $clusters)
{$allnodes+=gwmi -q "Select Name from MSCluster_Node" -namespace rootmscluster -      ComputerName $cluster -Authentication PacketPrivacy|Select-Object @    {Name="Node";Expression={$_.Name}}
}}}}
foreach ( $cluster in $clusters) 
{
$actnodes+=gwmi -class "MSCluster_Resource" -namespace "rootmscluster" -computername $cluster  -Authentication PacketPrivacy | where {$_.type -eq "SQL Server"} | Select @{n='ServerInstance';e={("{0}{1}" -f $_.PrivateProperties.VirtualServerName,$_.PrivateProperties.InstanceName).TrimEnd('')}}, @{n='Node';e={$(gwmi -Authentication PacketPrivacy -ComputerName $cluster -Namespace "rootmscluster" -query "ASSOCIATORS OF {MSCluster_Resource.Name='$($_.Name)'} WHERE AssocClass = MSCluster_NodeToActiveResource" | Select -ExpandProperty Name)}}|Select "Node"
 }
$passivenodes=Compare-Object -ReferenceObject($allnodes) -DifferenceObject($actnodes)
$passivenodes

以上代码返回错误的结果。

但是,如果我将数据类型更改为这样的字符串:

$allnodes = [string[]]$allnodes|select -unique
$actnodes = [string[]]$actnodes|select -unique

然后根据需要起作用。

但是,在http://technet.microsoft.com/en-us/library/hh849941(v = wps.620).aspx上说

输入输入类型是您可以将其管道的对象类型 cmdlet。

•system.management.automation.psobject您可以管道 差异对象比较对象

为什么如果不更改数据类型,我不能使用比较?怎么了?

虽然您可以传递任意对象数组,但您可能应该告诉Compare-Object您要使用-Property参数比较对象的哪些属性,该参数可以以一个或多个属性的名称比较。执行$allnodes | get-member查看您要比较的属性。

相关内容

  • 没有找到相关文章

最新更新