当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 学习强大的 PowerShell 比较数组

作者:精品下载站 日期:2024-12-14 12:40:17 浏览:15 分类:玩电脑

学习强大的 PowerShell 比较数组


使用一些 PowerShell 功夫,您可以轻松地在 Powershell 中比较各种对象的数组。您可能会遇到许多不同的场景,因此让我们深入研究一下构建 PowerShell 来比较数组的方法。

要确定比较数组的最佳方法,必须首先弄清楚两个数组中的元素类型。

  • 两个数组是否包含相同类型的对象?
  • 两个数组的元素数量是否相同?
  • 每个数组中是否有不同类型的对象?

在准确比较数组之前,您必须知道每个问题的答案。让我们介绍一下每个场景。

比较字符串数组

使用 PowerShell 比较数组的最简单方法之一是如果您有两个仅包含字符串的数组。当您发现自己处于这种情况时,您可以使用几种不同的方法来比较数组中的字符串。

使用 -Contains 或 -In 运算符

-contains 运算符是一个 PowerShell 运算符,可让您检查对象是否在集合中。 -contains 运算符本身并不理解集合,但您可以构建代码以使其执行您的命令。

假设一个集合(数组)包含四个字符串,如下所示。

$array = @('blue','red','purple','pink')

-contains 运算符通过检查该数组中是否存在单个字符串来工作,如下所示:

$array -contains 'pink'

当左侧的集合包含该字符串时,PowerShell 将返回 True。如果不是,它将返回 False。

[玩转系统] 学习强大的 PowerShell 比较数组

我们可以使用 -contains 运算符来比较数组,方法是读取数组中的每个字符串并检查另一个数组是否包含该字符串。

假设我想比较两个数组,看看第一个数组中的哪些字符串存在于第二个数组中。

$array = @('blue','red','purple','pink')
$array2 = @('brown','red','black','yellow')

$array | ForEach-Object {
    if ($array2 -contains $_) {
        Write-Host "`$array2 contains the `$array1 string [$_]"
    }
}

您也可以使用 -in 运算符,它与 -contains 运算符相同,但语法相反。使用 -contains 运算符时,数组在左侧定义。使用 -in 运算符,数组在右侧定义,如下所示:

$array | ForEach-Object {
    if ($_ -in $array2) {
        Write-Host "`$array2 contains the `$array1 string [$_]"
    }
}

使用Where对象

或者,您还可以使用 Where-Object cmdlet 将一个数组中的所有字符串返回到另一个数组中,如下所示。

$array | Where-Object -FilterScript { $_ -in $array2 }

使用比较对象 Cmdlet

您还可以使用 PowerShell 中的 Compare-Object cmdlet 来比较数组。此 cmdlet 采用引用对象和差异对象,并返回一个侧面指示符,指示哪些元素在两个数组中,哪些元素不在这两个数组中。

Compare-Object -ReferenceObject $array -DifferenceObject $array2

[玩转系统] 学习强大的 PowerShell 比较数组

您可以在下面看到 Compare-Object cmdlet 允许您同时比较两个数组。如果 SideIndicator 属性为 =>,则表示返回的 InputObject 属性位于 DifferenceObject 值中,而不是在ReferenceObject 值,

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯