You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell如何判断两个数组类型变量的取值是否完全相等?

问题原因分析

  • 你用的-match是正则匹配运算符,不适合做数组全等判断:当左值为数组时,-match会返回所有匹配正则规则的元素,而右值为数组时PowerShell会自动将其转换为类型字符串,完全不符合你的校验需求。
  • Compare-Object无输出不是没生效,而是两个数组完全相等时该命令默认没有返回值,你只需要补全判断逻辑即可。

正确校验方法

方法1:基于Compare-Object判断(推荐,适配绝大多数场景)

如果需要校验元素数量、值、顺序完全一致,直接判断Compare-Object的返回值是否为$null即可:

if ($null -eq (Compare-Object -ReferenceObject $todhome.tod_disk_type -DifferenceObject $todhome.actual_disk_type)) {
    Write-Host "两个数组完全相等"
} else {
    Write-Host "两个数组存在差异"
}

如果不需要校验顺序,只需要校验元素值和数量一致,添加-SyncWindow ([int]::MaxValue)参数即可:

if ($null -eq (Compare-Object $todhome.tod_disk_type $todhome.actual_disk_type -SyncWindow ([int]::MaxValue))) {
    Write-Host "两个数组元素完全匹配(忽略顺序)"
}

方法2:字符串拼接后对比(适合简单字符串数组,写法简单)

选择不会出现在元素值中的分隔符,把两个数组拼接为字符串后直接对比:

# 用|作为分隔符,也可以换成其他不会出现在元素中的字符
$todDiskStr = $todhome.tod_disk_type -join '|'
$actualDiskStr = $todhome.actual_disk_type -join '|'

if ($todDiskStr -eq $actualDiskStr) {
    Write-Host "两个数组完全相等"
}

方法3:逐元素对比(适合复杂类型数组,可控性最高)

先判断数组长度是否一致,再逐个对比对应位置的元素:

$todDisk = $todhome.tod_disk_type
$actualDisk = $todhome.actual_disk_type
$isEqual = $false

# 先判断长度是否一致
if ($todDisk.Count -eq $actualDisk.Count) {
    $isEqual = $true
    # 逐元素对比
    for ($i = 0; $i -lt $todDisk.Count; $i++) {
        if ($todDisk[$i] -ne $actualDisk[$i]) {
            $isEqual = $false
            break
        }
    }
}

if ($isEqual) {
    Write-Host "两个数组完全相等"
}

内容的提问来源于stack exchange,提问作者Empty Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:04