【问题标题】:Powershell Error Trap for Get-ChildItem -Filter and Robocopy (ErrorAction)Get-ChildItem -Filter 和 Robocopy (ErrorAction) 的 Powershell 错误陷阱
【发布时间】:2012-01-05 02:22:15
【问题描述】:

我正在起草一个 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 字符:88 + Trap {"将本地备份从 XX 复制到 SystemStateBackup 时出错";继续} Get-ChildItem " "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 d异常 + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

任何建议将不胜感激。

感谢您的宝贵时间。

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

【问题讨论】:

  • 您使用的是什么版本的 PowerShell。你可以通过输入$host来判断。
  • 您是否尝试过删除 -filter 并仅使用 Get-ChildItem "F:\WindowsImageBackup\ITUPW-PRODDC7\Backup*"

标签: powershell robocopy get-childitem powershell-trap


【解决方案1】:

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

对于 robocopy,您可能需要使用 $?$lastexitcode(在 foreach 对象内)来查看它是否运行良好。

【讨论】:

  • 谢谢。我可以让陷阱在没有 robocopy 的情况下为 Get-ChildItem 工作。有人可以告诉我如何将它放入一个函数中,以便我可以将'-ea“Stop”'应用于两者吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
相关资源
最近更新 更多