Get-ChildItem -Filter和Robocopy的Powershell错误陷阱(ErrorAction)

时间:2012-01-05 02:22:15

标签: powershell robocopy get-childitem powershell-trap

我正在起草一个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 - 吸引短信的系统管理员

1 个答案:

答案 0 :(得分:0)

您正在将-ea "Stop"应用于foreach而不是Get-ChildItem。在管道|

之前移动它

对于robocopy,您可能希望使用$?$lastexitcode(在foreach-object中)查看它是否正常运行。