我正在尝试执行以下步骤:
我首先尝试在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
您应该将包含结果的数组实例化为一个空数组,可能在ForEach-Object -Process {...
之前用$MaitanceMode = @()
,并且要向其中添加元素时,请替换此行:
$MaitanceMode = $esx | select name
尽管接受了@Thomas的答案,但在PowerShell中使用增加赋值运算符(+=
)创建集合不是