首页 > 解决方案 > 如何在 PowerShell 中处理循环数组?

问题描述

我有一个数组。我想检查一个变量(字符串)是否包含在该数组中。我试过这个,但它只检查第一个数组并进行判断。一旦数组为真,我就无法继续转到“NEXTFUNCTION”,它终止了。

function NEXTFUNCTION
{
  ##some process##
}
     $BCUControllerString = @("Configure Storage Controller for Optane","Configure Storage Controller for Raid")
 $DiskInfo = Get-PhysicalDisk | Select-Object FriendlyName, Size | 
 Where-Object {$_.FriendlyName -like "*INTEL OPTANE*" -or $_.FriendlyName -like "*INTEL MEM*" -or 
 $_.FriendlyName -like "*INTEL HBRPEK*"}

 if ($DiskInfo)
 {
      #Write-Host "Controller Optane"
      foreach ($ControllerStringOptane in $BCUControllerString)
      {
           if ($ControllerStringOptane -like "*Optane*")
           {
                Write-Host "Controller: $ControllerStringOptane"
                NEXTFUNCTION

           }
           else
           {
                Write-Host "Fail! "
           }    
      }
 }
 else
 {
      Write-Host "Controller Raid"
      foreach ($ControllerStringRAID in $BCUControllerString)
      {
           if ($ControllerStringRAID -like "*Raid*")
           {
                Write-Host "Controller: $ControllerStringRAID"
               NEXTFUNCTION

           }
           else
           {    
                Write-Host "Fail! "
           }
      }
 }

任何人都可以提供想法。谢谢你。

标签: arrayspowershellloops

解决方案


@SBR,除非数组中有更多元素,否则$BCUControllerString可以完全忽略数组,代码会被压缩,如下所示。

function NEXTFUNCTION
{
  ##some process##
}

$DiskInfo = Get-PhysicalDisk | 
    ? {$_.FriendlyName -like "*INTEL OPTANE*" -or $_.FriendlyName -like "*INTEL MEM*" -or $_.FriendlyName -like "*INTEL HBRPEK*"} | 
    select FriendlyName, Size

if ($DiskInfo)
{
    Write-Host "Controller Optane"
    Write-Host "Controller: Configure Storage Controller for Optane"          
}
else
{
    Write-Host "Controller Raid"
    Write-Host "Controller: Configure Storage Controller for RAID"
}

NEXTFUNCTION

PS:我已经Where-Object用它的别名?Select-Object' 的对应物替换了select


推荐阅读