我正在构建一个执行 http 请求的脚本,以便“唤醒”一些 asp.net 应用程序。
以下脚本正在运行,但是是同步的:
function WakeUp([string] $url)
{
Write-Host "Waking up $url ..." -NoNewLine
$client = new-object system.net.WebClient
$client.UseDefaultCredentials = $true
$null = $client.OpenRead($url)
$client.Dispose()
Write-Host " Ok"
}
# Run your code that needs to be elevated here
@(
"http://app1/",
"http://app2/",
"http://app3/"
) | % { WakeUp $_ }
Run Code Online (Sandbox Code Playgroud)
我想改进此脚本以避免唤醒目标站点。实际上,调用 toOpenRead
在返回之前等待答案。
我尝试使用OpenReadAsync
,但是在Dispose
实际发出请求并且目标应用程序未唤醒之前调用发生。
我有哪些选择?
[编辑]应用 Andy Arismendi 的建议,我的脚本现在是:
$WakeUp = {
Param ([string] $url)
try
{
Write-Output "Waking up $url ..."
$client = new-object system.net.WebClient
$client.UseDefaultCredentials = $true
$null = $client.OpenRead($url)
$client.Dispose()
Write-Output "$url Ok"
} catch {
Write-Error $_
throw $_
}
}
$jobs = @()
# Run your code that needs to be elevated here
@(
"http://app1/",
"http://app2/",
"http://app3/"
) | % {
$jobs += Start-Job -ScriptBlock $WakeUp -ArgumentList $_
}
Receive-Job -Job $jobs -Keep
Wait-Job -Job $jobs
Run Code Online (Sandbox Code Playgroud)
这似乎按预期工作,但我失去了写入主机。任何想法 ?
后台作业可以使您的工作流异步。
将唤醒函数转换为脚本块:
$WakeUp = {
([string] $url)
try {
# Processing...
} catch {
throw $_
}
}
Run Code Online (Sandbox Code Playgroud)对于每个 URL,启动脚本块作为后台作业。
@(
"http://app1"
# More...
) | % {
Start-Job -ScriptBlock $WakeUp -ArgumentList $_
}
Run Code Online (Sandbox Code Playgroud)看看我的答案从另一个问题,就看你怎么可以从后台作业接收数据并检测其失败。
更新
这解决了您的版本中有关未接收输出的问题。您想使用Wait-Job
beforeReceive-Job
以允许它们完成,因为它们是异步运行的。
$WakeUp = {
param ([string] $url)
try {
Write-Output "Waking up $url ..."
Start-Sleep -Seconds 3
if ($url -eq "http://app2/") {
throw ($url + " failed")
}
Write-Output "$url Ok"
} catch {
throw $_
}
}
$jobs = @()
# Run your code that needs to be elevated here
@(
"http://app1/",
"http://app2/",
"http://app3/"
) | % {
$jobs += Start-Job -ScriptBlock $WakeUp -ArgumentList $_
}
Wait-Job -Job $jobs | Out-Null
Receive-Job -Job $jobs -Keep
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1739 次 |
最近记录: |