根据$ event

时间:2018-08-23 13:07:36

标签: powershell

此工具有2个可能的选项;

  1. 重置1个访问点
  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的值仍然是先到者。我应该怎么做?

1 个答案:

答案 0 :(得分:1)

您的主要问题是您正在使用赋值运算符代替相等比较器。因此if($event = 1)应该是if($event -eq 1)

我也认为if子句还有改进的余地。您正在检查$event的数值。它只是这些值之一。永远不要两个。您的if子句互斥,但您尝试同时评估-eq 1-eq 2。这不是最好的主意,因为它会使代码混乱。您应该使用ifelseif将其包含在同一块中

    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,它将评估所有开关条件并执行所有匹配的条件。