如何使用 Powershell 在 foreach 循环中使用变量编写 if 语句?
How can I write an if statement using a variable in a foreach loop using Powershell?
我现在在我的代码中 运行 下面的 foreach
循环,它运行良好。但是,如果满足条件,我更愿意让它在脚本末尾发送一封电子邮件,而不是针对发现的每个问题都发送一封电子邮件。我该怎么做?
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 "admin@firm.com" -To "group@firm.com" -UseSsl
}
}
在foreach 之前声明一个数组并添加消息。然后在 foreach 之后调用 Send-MailMessage。示例:
$errors = @()
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') {
$errors += "Time difference of more then 3 minutes detected."
}
}
if($errors.Count -gt 0) {
Send-MailMessage -Subject "Time Report -$(get-date -Format "MM-dd-yyy")" -Body ($errors -join "`n") -SmtpServer "SMTPSERVER" -From "admin@firm.com" -To "group@firm.com" -UseSsl
}
我现在在我的代码中 运行 下面的 foreach
循环,它运行良好。但是,如果满足条件,我更愿意让它在脚本末尾发送一封电子邮件,而不是针对发现的每个问题都发送一封电子邮件。我该怎么做?
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 "admin@firm.com" -To "group@firm.com" -UseSsl
}
}
在foreach 之前声明一个数组并添加消息。然后在 foreach 之后调用 Send-MailMessage。示例:
$errors = @()
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') {
$errors += "Time difference of more then 3 minutes detected."
}
}
if($errors.Count -gt 0) {
Send-MailMessage -Subject "Time Report -$(get-date -Format "MM-dd-yyy")" -Body ($errors -join "`n") -SmtpServer "SMTPSERVER" -From "admin@firm.com" -To "group@firm.com" -UseSsl
}