私はposh-gitをダウンロードして自動的にインストールするPowerShellスクリプトを作成しようとしています。私はダウンロードが非同期的に行われるようにしたいと思っています。もしダウンロードが完了した後にコールバックを持ったり、完了するのを待つことができます。PowerShellの非同期ダウンロード完了イベントハンドラが実行されない
ダウンロード用のURL、保存先のパス、コールバック関数を作成する関数を作成しました。残念ながら、コールバック関数は呼び出されないようです。
function DownloadFileAsync([string] $url, [string] $destination, [ScriptBlock] $action = $null)
{
$web_client = New-Object System.Net.WebClient
if ($action)
{
Register-ObjectEvent -InputObject $web_client -EventName DownloadFileCompleted -Action $action | Out-Null
}
$web_client.DownloadFileAsync($url, $destination)
}
$download_finished =
{
# This is never reached
echo "Download finished"
}
DownloadFileAsync "https://github.com/dahlbyk/posh-git/archive/master.zip" "C:/posh-git-master.zip" $download_finished
コールバックを呼び出さないように修正するにはどうすればよいですか?ダウンロードが完了するまで、コードの中で待つ方法を実装する方法もありますか?イベントアクションから
'Register-ObjectEvent'は関数スコープで奇妙な動作をします。代わりに '$ web_client.add_DownloadFileCompleted($ action)'を試してください –
'echo'がPowerShellホスト上に文字列を表示すると思いますか? 'Write-Output'がやっていることではありません。 'echo' - >' Write-Host' – PetSerAl
@ MathiasR.Jessenこれで、PowerShell ISEがクラッシュします。この問題は、私がWrite-Hostを使用していなかったためで、テキストが決してコンソールに出力されていないようです。 – tambre