在powershell中搜索多个数组中的名称

时间:2016-09-19 19:43:49

标签: arrays powershell search foreach

所以我有一些我希望搜索的名称数组,我想将这些数组分开,因为它们都是特定于某组名称的。我试图弄清楚如何同时搜索多个。我下面的代码是如何搜索一个数组,但我不确定搜索多个数据的最佳方法。我试图将-and $array2添加到foreach中,但这不起作用。

我知道我可以为每个阵列添加相同的块,但我想知道是否有更干净,更有效的方法。

$array1 = "name1", "name2", "name3"
$array2 = "name4", "name5", "name6"
$searchname = Read-Host "Enter the name to search for"
foreach($name in $array1){
   if($searchname -eq $name){
       Write-Host "$searchname found"
   }
}

3 个答案:

答案 0 :(得分:3)

如果您只需要验证该名称是否存在于任何数组中,您只需将它们连接起来并检查结果是否包含您要查找的名称:

if (($array1 + $array2) -contains $name) {
    Write-Host "$name found"
}

如果要识别发现它的数组,可以执行以下操作:

'array1', 'array2' | ForEach-Object {
    if ((Get-Variable $_).Value -contains $name) {
        Write-Host "$name found in `$$_"
        break
    }
}

或者像这样,如果数组存储在哈希表而不是单个变量中:

$hash = @{
    array1 = "name1", "name2", "name3"
    array2 = "name4", "name5", "name6"
}

$hash.GetEnumerator() | ForEach-Object {
    if ($_.Value -contains $name) {
        Write-Host ('{0} found in ${1}' -f $name, $_.Name)
        break
    }
}

答案 1 :(得分:2)

如果要搜索多个数组中的项目,可以在foreach语句中连接数组,如下所示:

foreach($name in @($array1;$array2)){
   if($searchname -eq $name){
       Write-Host "$searchname found"
   }
}

更加PowerShell惯用的方法需要使用带有Where-Object过滤器cmdlet的管道:

@($array1;$array2) |Where-Object {$_ -eq $searchname}

答案 2 :(得分:0)

  1. 使用PS3 + @Html.Partial("~/Views/Customer/CreateModal.cshtml") 运算符:-in
    或PS2 + $value -in $array运算符:-contains
  2. 如果是大型数组,则不要将它们连接起来,因为它很慢。
  3. 在数组中组织数组,以便您可以更轻松地枚举它们。

    $array -contains $value
  4. 或使用哈希表:

    $arrays = @(
        @("name1", "name2", "name3")
        @("name4", "name5", "name6")
    )
    
    $searchname = Read-Host "Enter the name to search for"
    1..$arrays.count | ForEach {
       if ($searchname -in $arrays[$_-1]) {
           Write-Host "$searchname found in array #$_"
       }
    }