PowerShell执行直到脚本未将HTTP状态代码发送到控制台-输出为空
专家们,我的PowerShell在下面的脚本不向控制台发送任何HTTP状态代码之前都会这样做,尽管我已经告诉过它。输出为空。它运行时没有错误。我不知道如何将状态代码输出到控制台。注意:下面的主机notexist.nowhere.com是故意错误的。它只是用来测试的PowerShell执行直到脚本未将HTTP状态代码发送到控制台-输出为空,powershell,loops,Powershell,Loops,专家们,我的PowerShell在下面的脚本不向控制台发送任何HTTP状态代码之前都会这样做,尽管我已经告诉过它。输出为空。它运行时没有错误。我不知道如何将状态代码输出到控制台。注意:下面的主机notexist.nowhere.com是故意错误的。它只是用来测试的 $url = "http://localhost" $Header = @{Host = "notexist.nowhere.com"; "Pragma" = "n
$url = "http://localhost"
$Header = @{Host = "notexist.nowhere.com"; "Pragma" = "no-cache"; "Cache-Control" = "no-cache, no-transform"}
$i = 1
Do{
Try {
$SC = (Invoke-RestMethod -Method POST -Uri $url -Headers $header -ErrorAction Stop ).StatusCode
}
catch {
$SC = ( $_.Exception.Response.StatusCode.value__ )
}
Write-host($SC) -ForegroundColor Red -BackgroundColor Cyan
$clipboard += $SC
$i++
} Until( $SC -eq 200 -or $i -gt 2 )
# Until($i -gt 10)
我做了类似的事情;我知道我的本地系统上可能没有RESTAPI,所以无论如何我都运行了代码 问题是没有来自无法与之通信的服务器的响应代码。因此,在catch块中分配一个null值,然后进入
Write Host
命令,没有任何输出,因为$SC是null
乍一看,显然没有环境和任务的知识优势,我可以使用catch块中的一些逻辑来解决这个问题:
$url = "http://localhost"
$Header = @{Host = "notexist.nowhere.com"; "Pragma" = "no-cache"; "Cache-Control" = "no-cache, no-transform"}
$i = 1
Do{
Try {
$SC = (Invoke-RestMethod -Method POST -Uri $url -Headers $header ).StatusCode
}
catch {
If( $error[0].Exception.Message -eq "Unable to connect to the remote server" )
{
$SC = $error[0].Exception.Message
}
# $SC = ( $_.Exception.Response.StatusCode.value__ )
}
Write-host($SC) -ForegroundColor Red -BackgroundColor Cyan
$clipboard += $SC
$i++
} Until( $SC -eq 200 -or $i -gt 2 )
注意:我没有使用尝试捕获特定异常的方法。抛出的异常似乎过于泛化
注意:我使用$Error[0]
来获取最后一条错误记录,而不是$
。这只是一个语法首选项,因为$\uu
在很多其他地方都被使用
您可以根据需要添加附加条件。您可以将自己的语言放入$SC变量中,等等
显然,增加更多的条件我做了类似的事情;我知道我的本地系统上可能没有RESTAPI,所以无论如何我都运行了代码 问题是没有来自无法与之通信的服务器的响应代码。因此,在catch块中分配一个null值,然后进入
Write Host
命令,没有任何输出,因为$SC是null
乍一看,显然没有环境和任务的知识优势,我可以使用catch块中的一些逻辑来解决这个问题:
$url = "http://localhost"
$Header = @{Host = "notexist.nowhere.com"; "Pragma" = "no-cache"; "Cache-Control" = "no-cache, no-transform"}
$i = 1
Do{
Try {
$SC = (Invoke-RestMethod -Method POST -Uri $url -Headers $header ).StatusCode
}
catch {
If( $error[0].Exception.Message -eq "Unable to connect to the remote server" )
{
$SC = $error[0].Exception.Message
}
# $SC = ( $_.Exception.Response.StatusCode.value__ )
}
Write-host($SC) -ForegroundColor Red -BackgroundColor Cyan
$clipboard += $SC
$i++
} Until( $SC -eq 200 -or $i -gt 2 )
注意:我没有使用尝试捕获特定异常的方法。抛出的异常似乎过于泛化
注意:我使用$Error[0]
来获取最后一条错误记录,而不是$
。这只是一个语法首选项,因为$\uu
在很多其他地方都被使用
您可以根据需要添加附加条件。您可以将自己的语言放入$SC变量中,等等
显然,添加更多的条件我复制了一个已执行的代码,与您发布的代码完全相同,并且它可以正常工作。我每次通过循环都会得到一个“405”错误。根据一般原则,我会将条件写为
,直到($SC-eq 200)-或($I-gt 2))
@boxdog-我在IIS上也得到了一个405,在我刚刚在那个平台上尝试之后。但奇怪的是,在ApacheWeb服务器上,我没有任何状态代码。很奇怪。我复制了一个文件,执行的代码与你发布的完全一样,并且可以正常工作。我每次通过循环都会得到一个“405”错误。根据一般原则,我会将条件写为,直到($SC-eq 200)-或($I-gt 2))
@boxdog-我在IIS上也得到了一个405,在我刚刚在那个平台上尝试之后。但奇怪的是,在ApacheWeb服务器上,我没有任何状态代码。很奇怪。我将此标记为已接受,但我认为问题不在于我的代码,也不在于Apache或IIS。我的结论是,Web服务器可能会,也可能根本不会响应奇怪的请求。PowerShell输出为空表示服务器未返回任何状态代码。我将此标记为已接受,但我认为问题不在于我的代码,也不在于Apache或IIS。我的结论是,Web服务器可能会,也可能根本不会响应奇怪的请求。PowerShell输出为空表示服务器未返回任何状态代码。