首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里应用-ErrorAction进行.Net调用?

在哪里应用-ErrorAction进行.Net调用?
EN

Stack Overflow用户
提问于 2019-01-16 14:49:49
回答 3查看 739关注 0票数 1

这可以用来计数*.jpg文件。

代码语言:javascript
复制
PS C:\> @([System.IO.Directory]::EnumerateFiles('C:\Users\Public\Pictures', '*.jpg', 'AllDirectories')).Count
8

如何将-ErrorAction Continue应用于此?

代码语言:javascript
复制
PS C:\> @([System.IO.Directory]::EnumerateFiles('C:\Users', '*.jpg', 'AllDirectories')).Count
An error occurred while enumerating through a collection: Access to the path 'C:\Users\Administrator' is denied..
At line:1 char:1
+ @([System.IO.Directory]::EnumerateFiles('C:\Users', '*.jpg', 'AllDire ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-16 15:06:51

我觉得你做不到。除非您想自己实现目录遍历,否则可能会遇到以下问题:

代码语言:javascript
复制
Get-ChildItem 'C:\Users' -Filter '*.jpg' -Recurse -Force -ErrorAction SilentlyContinue
票数 2
EN

Stack Overflow用户

发布于 2019-01-30 05:33:16

Get-ChildItemAnsgar Wiechers' helpful answer展示了一个使用的解决方案,这是使用完全的、只使用Windows的.NET Framework (FullCLR)时必需的,在此基础上构建了E 112Windows<代码>E 213。

相比之下,.NET Core v2.1+ -- PowerShell Core的基础--确实提供了一种解决方案:

代码语言:javascript
复制
@([System.IO.Directory]::EnumerateFiles(
  'C:\Users',
  '*.jpg', 
  [System.IO.EnumerationOptions] @{ 
    IgnoreInaccessible = $true
    RecurseSubDirectories = $true
  }
)).Count

请注意,这相当于-ErrorAction Ignore,而不是Continue (或SilentlyContinue),因为无法访问的目录被悄悄忽略,之后无法检查其中哪些目录是不可访问的。

上面的解决方案基于 overload,它提供了一个System.IO.EnumerationOptions参数。

票数 1
EN

Stack Overflow用户

发布于 2021-06-18 05:58:42

以上的答案围绕着这个问题展开。他们没有附加错误操作。

为了真正捕获.net调用中的错误操作,我在Windows中使用了$ErrorActionPreference变量,就像在https://devblogs.microsoft.com/scripting/handling-errors-the-powershell-way/中那样

代码语言:javascript
复制
# Store $ErrorActionPreference
$OldErrorActionPreference = $ErrorActionPreference
# Set $ErrorActionPreference for .net action
# see https://devblogs.microsoft.com/scripting/handling-errors-the-powershell-way/ for other values
$ErrorActionPreference = 'SilentlyContinue'
# .net call
@([System.IO.Directory]::EnumerateFiles('C:\Users\Public\Pictures', '*.jpg', 'AllDirectories')).Count
# restore origional $ErrorActionPreference
$ErrorActionPreference = $OldErrorActionPreference
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54219607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档