포쉬 자식을 다운로드하고 자동으로 설치하는 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가 충돌합니다. 문제는 필자가 쓰기 호스트를 사용하지 않고 텍스트가 절대로 콘솔에 출력되지 않는 것 같습니다. – tambre