我有這個 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
當我XCopy
直接從 powershell 提示符運行命令時,它會顯示它的進度,正在復制的文件,而它正在運行,但是當我從腳本本身運行它時,它不會輸出任何內容。只是-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
,您既可以輸出到主機,也可以使用 捕獲輸出foreach
:
try {
$output = xcopy $src $dst /f /e /r /k /y /d |
Foreach {
# write line to console
$_ | Write-Host -ForegroundColor Yellow -BackgroundColor Red
# add line to $output
$_
}
}
請注意,這xcopy
不是 powershell 命令,因此它無法執行某些操作,例如使用默認值-verbose
或-ErrorAction
標誌。它也不會引發終止錯誤,因此除非您正確設置,否則Try
/Catch
將不起作用$ErrorActionPreference
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句