使用powershell向上或向下检查站点

使用powershell向上或向下检查站点,powershell,foreach,Powershell,Foreach,如何为超过1个站点执行此脚本?我知道每个命令都有一个循环,但是你能帮助我如何为这个脚本添加这个循环吗 Begin { $webRequest = [Net.WebRequest]::Create("http://172.20.1.33:81"); } Process { $validStatus = 200, 401 try { $status = $webRequest.GetResponse().StatusCode.va

如何为超过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.'
    }
}

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

函数测试Url{
param(
[参数(位置=0,必填,ValueFromPipeline)]
[string[]]$Url,
[int[]$ValidStatus=(200401)
)
过程{
foreach($Url中的项目){
$webRequest=[Net.webRequest]::创建($item)
试一试{
$response=$webRequest.GetResponse()
}
抓住{
$response=$\异常.InnerException.response
}
$statusCode=$null
如果($答复){
$statusCode=[int]$response.statusCode
$response.Close()
}
[PSCustomObject]@{
Url=$item
联机=$validStatus-包含$statusCode
StatusCode=$StatusCode
}
}
}
}
然后像这样使用它:

if((测试Url)http://172.20.1.33:81(www.Online){
写入主机“站点已启动”
}否则{
写入主机“站点已关闭”
}
对于多个站点:

测试Url“http://172.20.1.33:81", "http://172.20.1.34:81"
#或
"http://172.20.1.33:81", "http://172.20.1.34:81“|测试Url
请注意,使用PowerShell的

函数测试Url{
param(
[参数(位置=0,必填,ValueFromPipeline)]
[string[]]$Url,
[int[]$ValidStatus=(200401)
)
过程{
foreach($Url中的项目){
$webRequest=[Net.webRequest]::创建($item)
试一试{
$response=调用WebRequest$item
}
抓住{
$response=$\异常.response
}
$statusCode=$null
如果($答复){
$statusCode=[int]$response.statusCode
}
[PSCustomObject]@{
Url=$item
联机=$validStatus-包含$statusCode
StatusCode=$StatusCode
}
}
}
}

将部分功能转换为高级功能。然后简单地将URI作为参数发送进来。嘿,非常感谢您的快速回答,我将您的代码复制并传递到powershell ISE,但没有发生任何事情。很抱歉,可能我不理解或不正确。。我不能在这里写我在屏幕上写的东西,因为它有太多的字符。我如何向您展示我在powershell中尝试运行的内容?你是说这个?函数测试Url{param([Parameter(Position=0,必填,ValueFromPipeline)]正常工作!!但对于多个站点它不工作,我写了两个Url,一个用于工作站点,一个用于非工作站点,但我仍然收到一条消息“站点已启动”让我们来吧。