0

我正在起草一个 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”,因为它不存在。在 line:1 char:88 + Trap {"Error Copying Local Backup from XX to SystemStateBackup";Continue} Get-ChildItem <<<< f:\WindowsImageBackup\I TUPW-PRODDC -Filter "Backup*" -Name | ForEach-Object { robocopy "f:\WindowsImageBackup\ITUPW-PRODDC7\$ " "f:\WindowsIma geBackup\ITUPW-PRODDC7\SystemStateBackup\$ " /Z /S /MOVE /njh /njs /ndl /nc /ns /np /nfl} -ea "Stop" + CategoryInfo : ObjectNotFound: (F:\WindowsImageBackup\ITUPW-PRODDC:String) [Get-ChildItem], ItemNotFoun dException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

任何建议将不胜感激。

谢谢你的时间。

Amelia - 一个抽到最后一根稻草的系统管理员

4

1 回答 1

0

您将 应用于-ea "Stop"foreach 而不是 Get-ChildItem。将其移到管道前|

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

于 2012-01-05T03:33:43.417 回答