【发布时间】:2021-12-11 04:01:01
【问题描述】:
我有这个 powershell 脚本,我想将文件从生产服务器复制到测试服务器,并且只复制更新或更改的文件。 脚本本身有更多的功能,但这个复制就是其中之一。 为此,我正在使用以下 XCopy 命令:
... some other scriptingcode
try {
xCopy $source $destination /f /e /r /k /y /d
}
catch {
Write-Host "issue: $PSItem" -ForegroundColor Yellow -BackgroundColor Red
}
... some more other scriptingcode
当我直接从 powershell 提示符运行XCopy 命令时,它会在运行时显示它的进度、正在复制的文件,但是当我从脚本本身运行它时,它不会输出任何内容。只是在最后添加-Verbose 只会给我一个脚本错误。
我尝试了以下方法:
$output = $(xCopy $source $destination /f /e /r /k /y /d) -join "`r\`n"
Write-Host $output
但这只会在它已经被复制后给我输出,并且在没有复制 1 或 2 个文件时不是问题,但当您要复制 100 或 1.000 个文件时并没有真正的帮助。仅供参考,-join "'r'n" 是因为当输出多于一行时,输出是一个数组,所以我必须将这些行连接成一个字符串,可以由Write-Host 显示。
我试图用谷歌搜索解决方案,但我想我的谷歌技能不足以让我得到解决这个问题的任何结果。
那么,有没有办法让XCopy 输出,就像直接从 powershell 命令行一样?
【问题讨论】:
-
通常
xcopy从控制台或脚本调用时的行为不会有所不同。您是否重定向/管道输出脚本?在这种情况下,输出可能会延迟,因为重定向时许多本机可执行文件会缓冲输出。 -
顺便说一句:
try/catch对调用外部程序(如xcopy.exe)没有影响。检查$LASTEXITCODE是否包含非零值以推断失败。
标签: powershell xcopy