我正在创建一个HTTPListener,它将执行一些代码,其中包含对脚本正在侦听的URI的POST数据:
$timeout = New-Timespan -Minutes 10
$sw = [Diagnostics.Stopwatch]::StartNew()
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add('http://+:8912/')
while ($sw.elapsed -lt $timeout) {
$listener.Start()
$context = $listener.GetContext()
$request = $context.Request
$response = $context.Response
$InputStream = New-Object System.IO.StreamReader $Context.Request.InputStream
# $msg = $InputStream.ReadToEnd() | ConvertFrom-Json
if ($request.Url -match '/post$') {
$response.ContentType = 'application/json'
# $msg | Write-Output
$message = "Message Received"
$raw = $InputStream.ReadToEnd()
$raw | Write-Output
$raw | Out-file -FilePath C:\msg.json
}
if ($request.Url -match '/end$') { break }
[byte[]] $buffer = [System.Text.Encoding]::UTF8.GetBytes($message)
$response.ContentLength64 = $buffer.Length
$output = $response.OutputStream
$output.Write($buffer, 0, $buffer.Length)
$output.Close()
}
$listener.Stop()
我遇到的问题是,即使$sw.elapsed -lt $timeout
为$false
,侦听器也不会终止并继续执行脚本。
有没有办法可以让监听器在10分钟后终止并继续运行脚本?
答案 0 :(得分:0)
这是脚本块的一部分,但这个概念适用于我的情况。在我的测试中,我需要exit
,因为此脚本块在运行空间中运行。
do{$counter++
Start-Sleep -Seconds 1
IF($counter -ge 600){#"Waited too long"
[PsCustomObject]@{
"Server" = $server
"Status" = "FailedToReboot!"
}#end custom logging object
exit
}#end if.
}#end do loop.
until (-not (Test-Connection -ComputerName $server -Count 1 -Quiet))