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

dir -recurse | where { $_.PSIsContainer -eq "TRUE" } | get-acl

Однако он застревает в папке, для которой у меня нет разрешений, возвращая эту ошибку:

get-acl : Attempted to perform an unauthorized operation.
At line:1 char:56
+ dir -recurse | where { $_.PSIsContainer -eq "TRUE" } | get-acl
+                                                        ~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

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

В конечном счете, именно эти папки меня интересуют, чтобы я мог определить, какие папки должны проверять их разрешения. Так есть ли какой-нибудь способ, которым я могу заставить эту команду просто зарегистрировать "несанкционированный доступ", а затем продолжить?

1 ответ1

1

В зависимости от того, как вы просматриваете выходные данные в данный момент (в консоли), чтобы заставить ваш код продолжать работать после возникновения исключения, нужно заключить в Get-Acl объект ForEach-Object (с псевдонимом% ниже} вместо прямой передачи по трубопроводу. получить Acl

dir -recurse | where { $_.PSIsContainer -eq "TRUE"} | %{get-acl $_.FullName}

и вы увидите красным, ошибки как:

dir : Access to the path 'C:\folder\subfolder' is denied.

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

Ура :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .