Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell执行直到脚本未将HTTP状态代码发送到控制台-输出为空_Powershell_Loops - Fatal编程技术网

PowerShell执行直到脚本未将HTTP状态代码发送到控制台-输出为空

PowerShell执行直到脚本未将HTTP状态代码发送到控制台-输出为空,powershell,loops,Powershell,Loops,专家们,我的PowerShell在下面的脚本不向控制台发送任何HTTP状态代码之前都会这样做,尽管我已经告诉过它。输出为空。它运行时没有错误。我不知道如何将状态代码输出到控制台。注意:下面的主机notexist.nowhere.com是故意错误的。它只是用来测试的 $url = "http://localhost" $Header = @{Host = "notexist.nowhere.com"; "Pragma" = "n

专家们,我的PowerShell在下面的脚本不向控制台发送任何HTTP状态代码之前都会这样做,尽管我已经告诉过它。输出为空。它运行时没有错误。我不知道如何将状态代码输出到控制台。注意:下面的主机notexist.nowhere.com是故意错误的。它只是用来测试的

$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输出为空表示服务器未返回任何状态代码。