Ищем папки куда у нас нету доступа
Продолжаю выполнение чужих просьб
В этот раз попросили сделать следующее. Есть файловый сервер и на нем бордак с правами и наследование отсутствует. Нужно найти все папки где в пермишенах нету определенной группы/пользователя. Во время написания скрипта обнаружилось две проблемы. Первая заключалась в том, что нашлись папки куда у администратора вообще доступа не было. Так же нашлись папки с путем больше 256 символов. По этому был добавлен обработчик ошибок который проблемные папки выводит в два файлика для дальнейшего разбирательства. Вот собственно и сама функция:
#--- очищаем лог ошибок
$error.Clear |out-null
#--- рекурсивно перебираем все папки
foreach ($item in Get-ChildItem -LiteralPath $path -Recurse -Force -ErrorAction SilentlyContinue -ErrorVariable error_mass | Where-Object {$_.PSIsContainer}) {
#--- создаем массив с разрешениями
$groups = ($item.PSPath |get-acl).Access | select -expandproperty IdentityReference
#--- проверяем есть ли в массиве интересующая нас группа
if ($groups -notcontains $group) { '"'+$item.fullname+'"'}
}
#--- проверяем существует ли файл и если чего удаляем его
if (Test-Path $error_rights) {Remove-Item -Path $error_rights -Force -Confirm}
if (Test-Path $error_long) {Remove-Item -Path $error_long -Force -Confirm}
#--- обрабатываем полученные ошибки
foreach ($item in $error_mass ) {
#--- нету доступа
if ($item.CategoryInfo.Reason -eq 'UnauthorizedAccessException') {
'"' + $item.TargetObject + '"' |Out-File -Encoding 'Unicode' -FilePath $error_rights -Append
}
#--- длинный путь, больше 256 символов
elseif ($item.CategoryInfo.Reason -eq 'PathTooLongException') {
'"' + $item.TargetObject + '"' |Out-File -Encoding 'Unicode' -FilePath $error_long -Append
}
}
}
Ну и конечно пример запуска:
Всем привет, вчера 13.11.09 в 13.00 по иркутскому времени я стал Microsoft Certified Professional он же MCP в простонародье. Добиться этого я смог сдав экзамен 70-290. Сегодня я получил два письма из которых я узнал свой MCP ID под номером 7215719
Сегодня я стал участком MCP клуба Microsoft в городе Иркутск. MCP это аббревиатура от Microsoft Certified Professional (рус. Сертифицированный профессионал Microsoft). Я правда пока не являюсь таковым, но стремлюсь к этому. Грубо говоря это клуб по интересам, где делаются доклады по продуктам компании Microsoft. При чем докладчики не всегда являются сотрудниками MSFT. Здесь на оборот поощряется если докладчиком выступает член клуба. После доклада можно задавать вопросы докладчику, развивать дискуссии на интересующие темы среди коллег 

.gif)