此工具有2个可能的选项;
为了保持记录,我有一个功能,在其中任何一个事件发生时都会发送电子邮件警报。
重置单个AP:
Function Manage-APReset {
Write-Verbose "Function start: Manage-APReset"
Write-Host "Executing access point reset for $apName .."
IF($controllerName -eq $null) {
Error-NoCon }
else {
## Establish connection(s)
[string]$cUser = "srv-****"
$cPassword = ConvertTo-SecureString -String "X***********" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($cUser, $cPassword)
Write-Host "Establishing SSH connection to Cisco Controller $controllerName"
New-SSHSession -ComputerName $controllerName -Credential $cred
$session = Get-SSHSession -Index 0
$stream = $session.Session.CreateShellStream("PS-SSH", 0, 0, 0, 0, 100)
sleep 4
Write-Host "Connected. Authenticating for SSH Stream.."
## Invoke login
$stream.WriteLine('srv-*****')
sleep 3
$stream.WriteLine('X********j8')
sleep 2
$Stream.Read()
Write-Host "Authenticated!"
## Invoke commands
$stream.WriteLine("config ap reset $apName")
sleep 2
$stream.WriteLine('y')
sleep 3
$stream.Read()
Write-Host "$apName has been reset successfully. Please allow up to 5 minutes to come back up"
Admin-SendAlert($event = 1)
Remove-SSHSession -SessionId 0,1,2,3,4,5,6,7,8,9
Repeat
}
}
您会注意到,最后我打给Admin-SendAlert
来处理电子邮件警报。在这段时间内,我通过了$event = 1
,以允许Admin-SendAlert
知道正在发生什么情况。
Function Admin-SendAlert {
Write-Verbose "Function started: Admin-SendAlert"
## Event 1: Single AP Reset Successfully
if($event = 1) {
$eventSub = "Single: $apName has been reset"
$eventBod = "$apName has been reset successfully by $tech`n Reason Summary: $reasonSum"
}
if($event = 2) {
$eventSub ="Full Store Reset: $Store All APs Reset"
$eventBod = "The following APs have been reset at Store $Store by user $tech. `n`nAll APs:`n $apArray`n Reason Summary: $reasonSum"
}
Send-MailMessage -To "CSOC <blank@email.com>" -From "AP Manager Beta <srv-blank@email.com>" -Subject $eventSub -SmtpServer smtp.email.com -Body $eventBod
}
我不认为应该这样处理,因为$event
的值仍然是先到者。我应该怎么做?
答案 0 :(得分:1)
您的主要问题是您正在使用赋值运算符代替相等比较器。因此if($event = 1)
应该是if($event -eq 1)
我也认为if子句还有改进的余地。您正在检查$event
的数值。它只是这些值之一。永远不要两个。您的if子句互斥,但您尝试同时评估-eq 1
和-eq 2
。这不是最好的主意,因为它会使代码混乱。您应该使用if
和elseif
将其包含在同一块中
if($event -eq 1) {
# Stuff happens
} elseif($event -eq 2) {
# Stuff happens
} else {
# Last resort
}
此外,如果您自己使用过多的elseif
子句,则最好使用switch
switch($event){
1 {
# Stuff happens
break
}
2 {
# Stuff happens
break
}
default {
# Last resort
}
}
注意:如果不使用break
,它将评估所有开关条件并执行所有匹配的条件。