我正在起草一个PowerShell脚本来手动备份一些DC。需要将备份从一个文件夹移动到另一个文件夹,我使用Get-ChildItem -Filter“Backup *”来选择备份文件,然后使用robocopy移动它们。
它可以正常工作,但如果源路径或目标路径不正确,我想添加一个陷阱和自定义错误消息“将本地备份从XX复制到SystemStateBackup”。我还想将任何错误传递给日志文件。
没有陷阱的原件是
Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name | ForEach-Object {
robocopy "f:\WindowsImageBackup\ITUPW-PRODDC7\$_" "f:\WindowsImageBackup\ITUPW-PRODDC7\SystemStateBackup\$_" /Z /S /MOVE /njh /njs /ndl /nc /ns /np /nfl}
如果我只使用部分代码
,陷阱就会起作用Trap {"Error Copying Local Backup from XX to SystemStateBackup";Continue} Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name -ea "Stop"
但它不会这样工作
Trap {"Error Copying Local Backup from XX to SystemStateBackup";Continue} Get-ChildItem f:\WindowsImageBackup\ITUPW-PRODDC7 -Filter "Backup*" -Name | ForEach-Object {
robocopy "f:\WindowsImageBackup\ITUPW-PRODDC7\$_" "f:\WindowsImageBackup\ITUPW-PRODDC7\SystemStateBackup\$_" /Z /S /MOVE /njh /njs /ndl /nc /ns /np /nfl} -ea "Stop"
导致以下PowerShell错误
Get-ChildItem:找不到路径'F:\ WindowsImageBackup \ ITUPW-PRODDC',因为它不存在。 在行:1 char:88 + Trap {“将本地备份从XX复制到SystemStateBackup时出错”;继续} Get-ChildItem<<<< F:\ WindowsImageBackup \我 TUPW-PRODDC -Filter“备份*” - 名称| ForEach-Object {robocopy“f:\ WindowsImageBackup \ ITUPW-PRODDC7 \ $ ”“f:\ WindowsIma geBackup \ ITUPW-PRODDC7 \ SystemStateBackup \ $ “/ Z / S / MOVE / njh / njs / ndl / nc / ns / np / nfl} -ea”停止“ + CategoryInfo:ObjectNotFound:(F:\ WindowsImageBackup \ ITUPW-PRODDC:String)[Get-ChildItem],ItemNotFoun dException + FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
非常感谢任何建议。
谢谢你的时间。
Amelia - 吸引短信的系统管理员
答案 0 :(得分:0)
您正在将-ea "Stop"
应用于foreach而不是Get-ChildItem。在管道|
对于robocopy,您可能希望使用$?
或$lastexitcode
(在foreach-object中)查看它是否正常运行。