8

Compare-Object cmdlet 有没有办法预测 $Null 值?

例如,当我尝试像这样比较 2 个值时:

Compare-Object -ReferenceObject $Value1 -DifferenceObject $Value2 

我通常会收到以下错误:

Cannot bind argument to parameter 'ReferenceObject' because it is null

我的问题是:有没有办法说:如果其中任何一个等于 $null ;做一点事

4

5 回答 5

17

这接受空值:

Compare-Object -ReferenceObject @($Value1 | Select-Object) -DifferenceObject @($Value2 | Select-Object)
于 2017-08-11T12:09:09.597 回答
5

比较对象的帮助 说:

如果参考集或差异集为空 ($null),Compare-Object 将生成终止错误。

因此,您唯一的选择似乎是陷阱或尝试/捕获。

于 2013-03-18T21:58:32.653 回答
1
 if($Value1 -eq $NULL){
     return
 }
 Compare-Object -ReferenceObject $Value1 -DifferenceObject $Value2 
于 2013-03-19T20:10:40.763 回答
1

如果为空,这会做一些事情:

if ($Value1 -ne $null -and $Value2 -ne $null) {
    Compare-Object -ReferenceObject $Value1 -DifferenceObject $Value2
}
else {
    #do something
}
于 2017-08-11T17:14:10.500 回答
0

您可以使用一种解决方法

一、创建两个空数组对象

$reference = @()
$difference = @() 

现在

如果不为空,请检查您的源数组并将它们添加到先前创建的数组中

If( $array1 -ne $null ){ $reference.addrange($array1) 
If($array2 -ne $null) { $diffrence.addrange($array2) 

现在您确定您的参考数组和差异数组不为空,即使它们可能为空,您可以安全地进行比较

Compare-object -referenceObject $reference -differenceObject $difference 
于 2020-07-10T22:59:22.407 回答