Где применить -ErrorAction к вызову .Net? - PullRequest
0 голосов
/ 16 января 2019

Это работает для подсчета * .jpg файлов.

PS C:\> @([System.IO.Directory]::EnumerateFiles('C:\Users\Public\Pictures', '*.jpg', 'AllDirectories')).Count
8

Как можно применить -ErrorAction Continue к этому?

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 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Полезный ответ Ansgar Wiechers показывает обходной путь с использованием Get-ChildItem, что необходимо при использовании полного, Windows- только .NET Framework (FullCLR), на котором Windows PowerShell .

Напротив, .NET Core v2.1 + - на котором PowerShell Core построен - делает предлагаем решение:

@([System.IO.Directory]::EnumerateFiles(
  'C:\Users',
  '*.jpg', 
  [System.IO.EnumerationOptions] @{ 
    IgnoreInaccessible = $true
    RecurseSubDirectories = $true
  }
)).Count

Обратите внимание, что это эквивалент -ErrorAction Ignore, а не Continue (или SilentlyContinue, в этом недоступном спокойно игнорируется , без возможности проверить, какие каталоги впоследствии были недоступны.

Решение основано на этой System.IO.Directory.EnumerateFiles() перегрузке , которая предлагает параметр System.IO.EnumerationOptions.

0 голосов
/ 16 января 2019

Не думаю, что ты можешь. Если вы не хотите реализовать обратный путь в каталогах, вы, вероятно, застряли с чем-то вроде этого:

Get-ChildItem 'C:\Users' -Filter '*.jpg' -Recurse -Force -ErrorAction SilentlyContinue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...