【问题标题】:Simple Powershell IIS Site Verification简单的 Powershell IIS 站点验证
【发布时间】:2020-06-17 14:07:27
【问题描述】:

修补后我们结帐过程的一部分是检查网络服务器。我想为每个循环创建一个运行以下脚本以查找 200 或 401 并弹出终端消息“站点正常消息”和站点名称。如果它得到其他任何东西,我想要一条错误消息,同时给出站点名称。

我知道 401 响应不太好,但我管理的一些网站我无权查看。 (这就是我想走这条路的原因,我从不知道在视觉检查上什么“看起来正确”。这是我到目前为止所拥有的。

    $HTTP_Request = [System.Net.WebRequest]::Create('https://someinternalserver.com')
    $HTTP_Response = $HTTP_Request.GetResponse()
    $HTTP_Status = [int]$HTTP_Response.StatusCode

            If ($HTTP_Status -eq 200) {
            Write-output $http_request | Select-Object RequestUri
            Write-Host "SITE OK! 200"

            If ($HTTP_Status -eq 401) {
            Write-output $http_request | Select-Object RequestUri
            Write_Host "SITE OK! 401"}
        }

        Else {
            Write-output $http_request | Select-Object RequestUri
            Write-Host "SITE DEAD"}

     If ($HTTP_Response -eq $null) { } 

     Else { $HTTP_Response.Close() }

当我运行命令时,我在第 5 行收到了我并不真正关心的错误消息。如何抑制它们?理想情况下,我会尽量让它看起来干净,这样我们就可以观看信息滚动并注意任何不是 200 或 401results

的服务器

...这有点太有效了,但现在我似乎已经把它弄坏了,一切都回到了 SITE DEAD 的地步。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你可以添加一个 try/catch。

    $HTTP_Request = [System.Net.WebRequest]::Create('http://localhost:8080')
    $HTTP_Response
    $HTTP_Status
    try {
        $HTTP_Response = $HTTP_Request.GetResponse()
        $HTTP_Status = [int]$HTTP_Response.StatusCode
    }
    catch {
    
    }
    If ($HTTP_Status -eq 200) {
        Write-output $http_request | Select-Object RequestUri
        Write-Host "SITE OK! 200"
    
        If ($HTTP_Status -eq 401) {
            Write-output $http_request | Select-Object RequestUri
            Write_Host "SITE OK! 401"
        }
    }
    
    Else {
        Write-output $http_request | Select-Object RequestUri
        Write-Host "SITE DEAD"
    }
    
    If ($HTTP_Response -eq $null) { } 
    Else { $HTTP_Response.Close() }
    

    如果你想循环访问一些 URL,你可以这样做:

    param(
        $urls = @('http://localhost:8080', 'https://google.com')
    )
    
    Clear-Host
    
    foreach ($url in $urls) {
        $HTTP_Request = [System.Net.WebRequest]::Create($url)
        $HTTP_Response
        $HTTP_Status
        try {
            $HTTP_Response = $HTTP_Request.GetResponse()
            $HTTP_Status = [int]$HTTP_Response.StatusCode
        }
        catch {
    
        }
        If ($HTTP_Status -eq 200) {
            Write-Host ($http_request | Select-Object RequestUri).RequestUri
            Write-Host "SITE OK! 200 `n"
        }
        ElseIf ($HTTP_Status -eq 401) {
            Write-Host ($http_request | Select-Object RequestUri).RequestUri
            Write_Host "SITE OK! 401 `n"
        } 
        Else {
            Write-Host ($http_request | Select-Object RequestUri).RequestUri
            Write-Host "SITE DEAD `n"
        }
    
        # $null should be on the left: https://evotec.xyz/the-curious-case-of-null-should-be-on-the-left-side-of-equality-comparisons-psscriptanalyzer/
        If ($null -eq $HTTP_Response) { } 
        Else { $HTTP_Response.Close() }
    }
    
    

    【讨论】:

    • 谢谢!两个问题,要将其嵌套到 foreach 循环中,我将如何处理 $HTTP_Request 变量?此外,它显示了 Webrequest 的所有属性,是否可以将其静音并仅获取名称和状态?
    • 非常感谢,我正在阅读有关输出为 null 的内容,很高兴知道我走在正确的道路上。再次感谢!
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多