【问题标题】:Powershell 'in use by another process' error showing with silentlyContinuePowershell“正在被另一个进程使用”错误以静默方式显示
【发布时间】:2018-04-13 20:23:53
【问题描述】:

我有一个脚本,它执行从一个 Windows 共享到另一个的复制项目,偶尔会显示错误“无法访问该文件,因为它正被另一个进程使用”。执行此操作的代码如下,并且已经包含 -ErrorAction SilentlyContinue 但控制台上仍然出现错误:

Get-ChildItem $sourceDir -Filter $itemNum*.* | ForEach {    
    Copy-Item -LiteralPath $sourceDir\$_ -Destination $destDir -ErrorAction SilentlyContinue
}

我有额外的代码可以在无法复制项目时处理完美的工作,我只是不希望红色错误消息显示在控制台上。由于“-errorAction SilentlyContinue”似乎不起作用,是否有替代方法?

PS。总是导致问题的文件类型是 .msg 文件。为什么这些会有问题?我一直认为这是因为它们嵌入了附件和文件等,并且可能由于 GCI 对它们的 GCI 被 on access AV 扫描?

Powershell 是在 Windows Server 2008 上运行的 3.0 版。

【问题讨论】:

  • 您的Get-ChildItem 是否生成错误?还是Copy-Item?如果没有错误消息的详细信息,我们无法判断。
  • SilentlyContinue 隐藏非终止错误,而不是终止错误。 (PowerShell中有两种错误。)要捕获终止错误,您需要try/catch

标签: file powershell


【解决方案1】:

这发生在相当多的命令中,真的很烦人。要修复它,您可以尝试使用 try/catch,如以下基本示例所示:

Get-ChildItem $sourceDir -Filter $itemNum*.* | ForEach {    
   try { 
        Copy-Item -LiteralPath $sourceDir\$_ -Destination $destDir -ErrorAction Stop
   } 
   catch {}
}

【讨论】:

  • 请记住,这将捕获并忽略所有错误,而不仅仅是“使用中”错误。
猜你喜欢
  • 2014-03-26
  • 2018-08-07
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多