Powershell where-object не работает с PSdrive - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь исключить два диска из поиска файлов. Я получаю сообщение об ошибке при запуске кода: «Get-ChildItem: доступ к пути 'C: \ Windows \ system32 \ LogFiles ...'». Поиск не должен касаться C. Помогите!! Что я делаю не так? Код прилагается.

$Drives = Get-PSDrive -PSProvider FileSystem | where { -not ('c','u' -eq $_.name) }

$FS='(.*18)\.FOO'

$FPath=@(foreach($Drive in $drives) {
    Get-ChildItem -Path $Drive.Root -Recurse | Where-Object {$_.Name -match $FS} -ErrorAction SilentlyContinue | %{$_.Name} 
})

1 Ответ

0 голосов
/ 29 мая 2020

Думаю, вы ищете

Get-PSDrive -PSProvider FileSystem | 
    Where-Object {"c","u" -notcontains $_.name} |
    ForEach-Object{
        Get-ChildItem -Path $_.Root -Recurse | 
        Where-Object {$_.Name -match '(.*18)\.FOO'} -ErrorAction SilentlyContinue |
        select Name 
    }

Судя по вашим комментариям, вы все еще получаете сообщение об ошибке. Давайте немного разберемся. Выведем диск, на котором действительно произошла ошибка.

Get-PSDrive -PSProvider FileSystem |
    Where-Object {"c","u" -notcontains $_.name} |
    ForEach-Object{
        $Drive = $_.Name
        try{
            Get-ChildItem -Path $_.Root -Recurse | 
            Where-Object {$_.Name -match '(.*18)\.FOO'} -ErrorAction SilentlyContinue |
            Select Name
        }catch{
            @{
                Drive = $Drive
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...