我想弄清楚如何使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
参数将进程的本地输出流重定向到-总是纯文本-文件。
2>
重定向,允许重定向stderr流。
关于何时使用Start-Process
合适或不合适的指导,请参阅GitHub文档问题。