我不明白为什么 "start-job" 只在我输入 "receive-job" 时启动

I don't understand why "start-job" starts only when I enter "receive-job"

我在 Powershell 中有一个功能,可以从某个网络服务器下载 .jpg 文件(使用 invoke-webrequest)。当我在 powershell cli 中调用该函数时,它会下载请求的文件。但是当我把它包装成一个开始作业命令时,它只有在我添加“接收作业”时才有效。 (我想将它与 start-job 一起使用,因为它是我同事的 gui 的一部分,因此需要一个进程栏)。

使用另一个函数,“start-job”命令按预期工作。我做错了什么??

我的代码:

function DNBDownload ( $pfad, $ISBN ){
        $url = "https://a.certain.url/cover?isbn="
        $out_file = $( $pfad + "\" ) 
        $file_endung =".jpg"
            foreach ($i in $ISBN) {
                Invoke-WebRequest $url+$i -OutFile $( "$out_file$i$file_endung" )
}
}

$job1 = Start-Job -scriptblock ${function:DNBDownload} -argumentlist $path, $ISBN

$path 来自文件夹浏览器对话框调用,$ISBN 来自剪贴板。

它对我有用(甚至做了第二个),但直到接收作业才显示进度条。默认文件夹是 ~\documents。我的测试:

start-job { invoke-webrequest https://live.sysinternals.com/procmon.exe -outfile procmon.exe }
dir ~\documents\procmon.exe
job | receive-job -AutoRemoveJob -wait

我还欠你我的解决方案。这很简单:我必须用 $ProgressPreference = 'SilentlyContinue' 抑制进度条(windows 显示为横幅)。 在 Invoke-WebRequest 命令之前添加它之后,我的脚本按需要运行。 我在那里找到了我的解决方案:Hide progress of Invoke-WebRequest .