Ищете простой способ проверить, является ли папка пустой или недоступной / доступ запрещен - PullRequest
0 голосов
/ 01 мая 2019

Тестирование, если папка пуста, довольно просто и обсуждалось много раз.В основном используется test-path или get-childitem Пример: Тест Powershell, если папка пуста

Я работаю над сценарием для аудита и исправления разрешений NTFS для файлов на общих ресурсах SMB в моей корпоративной среде.

Я столкнулся с чем-то, что на первый взгляд показалось бы простым, но я не смог найти простого решения.Мне интересно, есть ли командлет, который поможет.То есть различие между тем, является ли данная папка пустой или у меня нет к ней доступа.

Проблема в том, что все решения, которые я вижу, предполагают, что у вас есть доступ к папке.

Я думал, что мне придется написать жирную функцию, чтобы выполнить несколько тестов, а затем перехватывать и тестировать коды ошибок или что-то в этом роде.Но я решил спросить умных кодеров здесь, в Stack Overflow, прежде чем спуститься в эту кроличью нору.

Есть ли более элегантный способ проверить это?Командлет Test-MyAccess или что-то еще?

Test-Path возвращает одинаковые результаты для пустых папок и папок без доступа.Get-childitem возвращает пустое / пустое значение для пустых папок и папок без доступа.За исключением того, что в папке без доступа есть ошибка.

PS H:\PowerShell\NTFS> Test-Path $EmptyFolder
True

PS H:\PowerShell\NTFS> Test-Path $EmptyFolder\*
False

PS H:\PowerShell\NTFS> Test-Path $NoAccessFolder
True

PS H:\PowerShell\NTFS> Test-Path $NoAccessFolder\*
False

PS H:\PowerShell\NTFS> Get-ChildItem -Path $EmptyFolder

PS H:\PowerShell\NTFS> Get-ChildItem -Path $NoAccessFolder
Get-ChildItem : The specified network name is no longer available.
At line:1 char:1
+ Get-ChildItem -Path $NoAccessFolder
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\server.domain....\Sufolder1\Sub3:String) [Get-ChildItem], IOException
......

1 Ответ

0 голосов
/ 02 мая 2019

Благодаря @Lee_Dailey я, кажется, начал идти по правильному пути. Похоже, нужно проверить Get-ChildItem на наличие ошибок.

Похоже, для этого должен быть командлет, но я думаю, я напишу функцию. Нечто подобное я представляю.

Function Get-FolderProperties ($Path){
    $ErrOut = $Null
    $Folder = Get-ChildItem -Path $Path -ErrorAction SilentlyContinue -ErrorVariable ErrOut
    If($ErrOut) { 
    # There was an error accessing $path. Do something with $ErrOut

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...