1
我現在在我的代碼中運行下面的foreach
循環,它工作的很好。但是,如果滿足條件,我寧願讓它在腳本末尾發送一封電子郵件,而不是發現每個問題的電子郵件。我怎樣才能做到這一點?如何在使用Powershell的foreach循環中使用變量編寫if語句?
foreach ($server in $servers) {
$DT = Get-WmiObject -Class Win32_LocalTime -ComputerName $server
$DateTime = (Get-Date -Day $DT.Day -Month $DT.Month -Year $DT.Year -Minute $DT.Minute -Hour $DT.Hour -Second $DT.Second)
$SUTC = $DateTime.ToUniversalTime()
$now = Get-Date
$NUTC = $now.ToUniversalTime()
$Difference = (New-TimeSpan -Start ($NUTC) -End ($SUTC))
Write-Host "Time at $server is $SUTC. Time difference of $Difference."
if ($Difference -ge '00:03:00') {
Send-MailMessage -Subject "Time Report -$(get-date -Format "MM-dd-yyy")" -Body "Time difference of more then 3 minutes detected." -SmtpServer "SMTPSERVER" -From "[email protected]" -To "[email protected]" -UseSsl
}
}
不要這樣做。追加到循環中的數組一定會執行得很差,因爲每次數組都被重新創建,其大小爲+ 1,並且所有現有元素都被複制到新實例中。相反,只需在循環內部回顯並將循環輸出分配給一個變量('$ var = foreach($ servers in $ servers){...}')。 –
imo,追加到數組將只是一個大數據的問題。但是這並不否認你的警告。 – wallybh
沒錯,對於少量的數據來說,它通常是不明顯的,但是你也沒有得到任何東西。 –