AzCopy不通过PS脚本的Start-Process工作



我想弄清楚如何使AzCopy工作与PS命令"Start-Process"在PS脚本。我想把PS脚本放在一起,下载一个名为"语言"的文件夹。使用SAS令牌从Azure存储Blob容器到本地磁盘

脚本如下所示:

Start-Process `
-FilePath "C:tempAzCopyazcopy.exe" `
-ArgumentList "cp 'https://<storageaccountname>.blob.core.windows.net/<blobcontainername>/Languages?<SASTOKEN>' 'C:Temp' --recursive" `
-Wait `
-Passthru

这个语法给出了以下输出:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                                                                         
-------  ------    -----      -----     ------     --  -- -----------                                                                                                                         
19       3     1492       2004       0,00   2520   1 azcopy       

立即退出,什么也没发生。如果我手动运行AzCopy:

azcopy cp 'https://<storageaccountname>.blob.core.windows.net/<blobcontainername>/Languages?<SASTOKEN>' 'C:Temp' --recursive

运行正常

没有使用Start-Process调用控制台应用程序的好理由-只需直接调用它们,如第二个代码片段所示。

默认情况下,Start-Process不产生输出,并且(在Windows上)在新控制台窗口中运行。

对于-PassThru,它输出一个进程信息对象,表示启动的进程,即System.Diagnostics.Process的一个实例,您的问题中显示的输出是该实例的默认输出格式

使用Start-Process允许返回启动进程的输出;这样做的唯一方法是使用-RedirectStandardOutput和/或-RedirectStandardError参数将进程的本地输出流重定向到-总是纯文本-文件。

相比之下,direct调用将进程的stdout流映射到PowerShell的等效成功输出流,并且根据需要,通过2>重定向,允许重定向stderr流。

关于何时使用Start-Process合适或不合适的指导,请参阅GitHub文档问题。

最新更新