Je suis en train de construire un script qui effectue des requêtes http afin de "réveiller" certaines applications asp.net.
Le script suivant fonctionne, mais il est synchrone :
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 $_ }
J'aimerais améliorer ce script pour éviter que le site cible soit réveillé. En effet, l'appel à OpenRead
attend une réponse avant de revenir.
J'ai essayé d'utiliser OpenReadAsync
mais l'appel à Dispose
se produit avant que la requête ne soit effectivement émise et que l'application cible ne soit pas réveillée.
Quelles sont mes options ?
[Editer] En appliquant les suggestions d'Andy Arismendi, mon script est maintenant :
$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
Cela semble fonctionner comme prévu, mais je perds le Write-Host. Une idée ?