我有两个数组,这些数组的值超过500,000,需要进行比较以找出差异。数组中的某些值为$null
。当我尝试执行以下代码时,出现错误Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null
有没有解决此问题的方法,还是有更好,更快的方法来找到差异?我只对方差/差异计数感兴趣。
谢谢!
示例代码:
$objSource = @('a', $null, 'c')
$objTarget = @('a', 'b','c')
Compare-Object -ReferenceObject $objSource -DifferenceObject $objTarget | Measure
错误信息:
Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null . At line:4 char:32
+ Compare-Object -ReferenceObject <<<< $objSource -DifferenceObject $objTarget
+ CategoryInfo : InvalidData: (:) [Compare-Object], ParameterBindingValid ationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft .PowerShell.Commands.CompareObjectCommand
最佳答案
documentation指出,如果-ReferenceObject
或-DifferenceObject
是$null
,则会发生这种情况,但如果这些对象的任何元素存在,则不会真正覆盖。
NOTE: If the reference set or the difference set is null ($null), Compare-Object generates a terminating error.
快速解决方法是将这些
$null
元素替换为控制字符或类似的内容。$objSource = @('a', $null, 'c') -replace "^$","null"
$objTarget = @('a', 'b','c') -replace "^$","null"
Compare-Object -ReferenceObject $objSource -DifferenceObject $objTarget
-replace
将从字符串“null”的数组中删除这些空条目。这样我们现在就可以直观地看到该数据。该文本不太可能是自然的元素,但是您必须保持相同。如果null不适合,我建议将百吉饼作为关键字!
关于powershell - 比较具有空元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833133/