您的代码看起来像是函数的一部分。你可以变成advanced function,把url变成parameter,接受多个值甚至管道输入。
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.'
}
对于多个网站:
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
请注意,同样可以使用 PowerShell 的 Invoke-WebRequest
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 = Invoke-WebRequest $item
}
catch {
$response = $_.Exception.Response
}
$statusCode = $null
if ($response) {
$statusCode = [int]$response.StatusCode
}
[PSCustomObject]@{
Url = $item
Online = $validStatus -contains $statusCode
StatusCode = $statusCode
}
}
}
}