powershell - 比较具有空元素的数组

标签 powershell

我有两个数组,这些数组的值超过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/

相关文章:

regex - Powershell 模式匹配正则表达式

powershell - 如何将解析路径与另一个目录连接

json - 无法使用Powershell提取json值

powershell - 通过 Azure API、门户或 ISE 加载项启动 Runbook 会产生 "input parameter type mismatch"错误

powershell - 智能硬盘信息 Powershell

powershell - CMake - 如何轻松添加缺少的库?

android - 如何修复 "emulator: ERROR: No AVD specified. Use ' @foo' 或 '-avd foo' 以启动名为 'foo' 的虚拟设备“

powershell - 在程序包管理器控制台中,出现 'Set-Location' 无法识别错误,无法加载

PowerShell 飞溅不起作用

powershell - 如何将整数强制转换为 PowerShell 中的枚举类型?