使用Powershell对站点进行向上或向下检查

时间:2020-11-05 11:57:39

标签: powershell foreach

如何为超过1个站点执行此脚本?我知道每个命令都有一个,但是您能协助我如何为该脚本添加此循环吗?

    Begin {
    $webRequest = [Net.WebRequest]::Create("http://172.20.1.33:81");
}
Process {
    $validStatus = 200, 401

    try {
        $status = $webRequest.GetResponse().StatusCode.value__
    } catch {
        $status = $_.Exception.InnerException.Response.StatusCode.value__
    }
    
    if ($validStatus -contains $status) {
        Write-Host 'Site is up.'
    } else {
        Write-Host 'Site is down.'
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码看起来像函数的一部分。您可以将其变成advanced function,并将url设为parameter,该URL可以接受多个值,甚至可以接受管道输入。

ID1

并像这样使用它:

function Test-Url {
    param(
        [Parameter(Position = 0, Mandatory, ValueFromPipeline)]
        [string[]]$Url,
        [int[]]$ValidStatus = (200, 401)
    )
    process {
        foreach ($item in $Url) {
            $webRequest = [Net.WebRequest]::Create($item)
            try {
                $response = $webRequest.GetResponse()
            }
            catch {
                $response = $_.Exception.InnerException.Response    
            }
            $statusCode = $null
            if ($response) {
                $statusCode = [int]$response.StatusCode
                $response.Close()
            }
            [PSCustomObject]@{
                Url = $item
                Online = $validStatus -contains $statusCode
                StatusCode = $statusCode
            }
        }
    }
}

对于多个站点:

if ((Test-Url "http://172.20.1.33:81").Online) {
    Write-Host 'Site is up.'
} else {
    Write-Host 'Site is down.'
}

请注意,使用PowerShell的Invoke-WebRequest

也是可以的
Test-Url "http://172.20.1.33:81", "http://172.20.1.34:81"
# or
"http://172.20.1.33:81", "http://172.20.1.34:81" | Test-Url