Powershell中的比较数组

问题描述 投票:0回答:2

我正在尝试执行以下步骤:

  • 读取CSV文件
    • 将CSV文件中的内容添加到数组中
  • 将CSV中的内容与另一个数组中的内容进行比较
  • 如果数组中的项目不是CSV数组的成员,
    • 发送电子邮件

我首先尝试在Reports2 CSV文件中缺少一个主机的情况下运行脚本,该丢失的主机已显示到控制台并写入Reports2文件,但是仍然,当我重新运行代码时,它仍然显示最后一个元素(主机这是Reports2.CSV中缺少的内容:

这是我当前正在使用的脚本:

编辑:我现在已经编辑了代码段以反映有效的解决方案

$user = ''
$pswd = ''
$vCenter_Servers = ""
$now = Get-Date
$start = $now.AddDays(-15)
$esxiHosts = Import-CSV C:\Scripts\Report1.csv #Reading CSV File

$MaitanceMode = @()
$Ticket = @()

foreach($ESXI in $esxiHosts){
 $Ticket += $ESXI | Select-Object -ExpandProperty Name
}

foreach($vCenter in $vCenter_Servers) {

$srv = Connect-VIServer -Server $vCenter -User $user -Password $pswd
Get-VMHost -PipelineVariable esx -Server $srv |  Where-Object {$_.ConnectionState -eq 'Maintenance'} |


ForEach-Object -Process {

    $maintEntered = Get-VIEvent -Entity $esx -Start $start -MaxSamples ([int]::MaxValue) -Server $srv |

         Where-Object{$_ -is [VMware.Vim.EnteredMaintenanceModeEvent]}

    if($maintEntered){  
     #Skipping
    }
    else {

         $MaitanceMode += $esx | Select-Object -ExpandProperty Name

         }

   }
} #Ending ForEach Loop

$NoTicket = $MaitanceMode | Where {$Ticket -Contains $_}
$NoTicket
powershell powercli
2个回答
0
投票

您应该将包含结果的数组实例化为一个空数组,可能在ForEach-Object -Process {...之前用$MaitanceMode = @(),并且要向其中添加元素时,请替换此行:

$MaitanceMode = $esx | select name

0
投票

尽管接受了@Thomas的答案,但在PowerShell中使用增加赋值运算符(+=)创建集合不是

© www.soinside.com 2019 - 2024. All rights reserved.