Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69

Выгрузка текущих прав доступа на директории

10.08.2018, 12:24. Показов 5633. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Задача стоит выгрузить права на директориях в существующей самба шаре. Надо рекурсивно обойти все директории и записать информацию в cvs.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$folder = "\\SRV\FS\"
$level = $folder.Split(‘\’).count
$resc = gci -recurse $folder | where { $_.PSIsContainer -and ($_.fullname.Split(‘\’).count -le ($level + 2)) }
$out = foreach($r in $resc)
{
$s = get-acl $r.fullname
 
foreach($inherit in $s.Access)
    {
 $inherit | add-member -membertype noteproperty -name Path -value $r.fullname -passthru |
    select Path, IdentityReference, filesystemrights
 }
}
$out | Export-Csv -Encoding "Unicode" -Path "C:\FolderReport.csv" -Delimiter ";"
Пройтись надо только по двум верхним уровням, но выводит ошибку.
PowerShell
1
2
3
4
5
6
gci : Не удалось найти часть пути "\\rup-host01\FS\02 йцуекингьбшгьнтекимнсу\01 смкеикпсуыми\умкиетикмнсукмеи\2_08_2011".
строка:3 знак:9
+ $resc = gci -recurse $folder | where { $_.PSIsContainer -and ($_.full ...
+         ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\rup-host01\FS...т от 22_08_2011:String) [Get-ChildItem], DirectoryNotFoundException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
Названия специально заменил на абракадабру.

Прошу помощи.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2018, 12:24
Ответы с готовыми решениями:

Фильтрация прав доступа к папкам и их выгрузка
Здравствуйте. Возникла такая проблема: есть АД, в ней много пользователей, у них настроены политики безопасности; есть сетевая шара,...

Изменение прав доступа к директории
У меня есть вопрос. Есть ли какая-то команда которая позволяет менять права доступа? мне нужно что бы директория...

Проверка прав доступа (чтение/запись) в директории
Нужно проверить, доступна ли данная директория (к примеру "D:\\readonly_folder\") для записи/чтения файлов. Подскажите, как можно...

15
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
10.08.2018, 13:02
Лучший ответ Сообщение было отмечено inzaim как решение

Решение

Цитата Сообщение от inzaim Посмотреть сообщение
Пройтись надо только по двум верхним уровням
Получаем только 2 уровня папок относительно заданного пути и каких подсчётов сплитов:

PowerShell
1
2
$folder = "\\server\share"
gci "$folder\*","$folder\*\*" -dir
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
10.08.2018, 13:21  [ТС]
Все гениальное просто! Спасибо =)
0
22 / 18 / 4
Регистрация: 28.07.2015
Сообщений: 167
13.08.2018, 14:04
А еще можно использовать параметр -dept

PowerShell
1
ls C:\Windows -dept 1
цифра после -dept означает глубину погружения.
1
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
13.08.2018, 14:10
Цитата Сообщение от MGarry Посмотреть сообщение
А еще можно использовать параметр -dept
Точно, так будет ещё наглядней и короче.
0
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
17.08.2018, 09:18  [ТС]
z:\>ls /?
"ls" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Мы точно говорим про windows?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
17.08.2018, 09:48
Цитата Сообщение от inzaim Посмотреть сообщение
Мы точно говорим про windows?
Мы точно говорим не про cmd, а про powershell

PowerShell
1
Get-Alias ls
0
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
17.08.2018, 11:37  [ТС]
точно )))
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 36
31.01.2019, 11:30
KDE777, а какой итог? =)
Как будет выглядеть конечный результат? Простите не силен в PS, а функционал нужен.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
31.01.2019, 11:35
Цитата Сообщение от Yurk Посмотреть сообщение
а какой итог? Как будет выглядеть конечный результат?
Итог/результат чего?

Цитата Сообщение от Yurk Посмотреть сообщение
функционал нужен
Какой функционал?
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 36
31.01.2019, 11:39
Задача стоит выгрузить права на директориях в существующей самба шаре. Надо рекурсивно обойти все директории и записать информацию в cvs.Пройтись надо только по двум верхним уровням.

Добавлено через 1 минуту
Попытался срастить посты 2 и 4, но что-то не выходит.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
31.01.2019, 11:47
Цитата Сообщение от Yurk Посмотреть сообщение
Задача стоит выгрузить права на директориях в существующей самба шаре. Надо рекурсивно обойти все директории и записать информацию в cvs.
https://www.cyberforum.ru/post12438568.html

Цитата Сообщение от Yurk Посмотреть сообщение
Пройтись надо только по двум верхним уровням.
К Get-ChildItem (gci, ls, dir) добавить ключ: -dept 2
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 36
01.02.2019, 09:18
KDE777, Извините меня за назойливость.
Не смог я разобраться куда вставить -dept 2 (в первом примере вообще не понятно, а во втором хоть куда вставляю выходит ошибка)
Не могли бы Вы поправить скрипт, чтоб уровень вложенности был = 2, группы безопасности не раскрывались и названия групп и пользователей собирались в одну ячейку (как сделали здесь: Выгрузка всех пользователей всех групп домена)
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
01.02.2019, 11:27
Цитата Сообщение от Yurk Посмотреть сообщение
Не смог я разобраться куда вставить -dept 2
Цитата Сообщение от KDE777 Посмотреть сообщение
К Get-ChildItem (gci, ls, dir) добавить ключ: -dept 2
т.е. было:

PowerShell
1
Get-ChildItem -Path $RootPath -Directory
стало:

PowerShell
1
Get-ChildItem -Path $RootPath -Directory -Depth 2
Неужели это сложно?

Цитата Сообщение от Yurk Посмотреть сообщение
Не могли бы Вы поправить скрипт, чтоб уровень вложенности был = 2, группы безопасности не раскрывались
Итого, берём готовый пример и получаем:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$RootPath = '\\Server\Share'
$CsvPath = 'C:\Temp\report.csv'
 
Function New-Obj
{
 
    $Rights = $Access.FileSystemRights
    $IFlag  = $Access.InheritanceFlags
    $PFlag  = $Access.PropagationFlags
 
    if     ($Rights -eq "ReadAndExecute, Synchronize" -and $IFlag -eq 'ContainerInherit, ObjectInherit') {$AccessTemplate = 'Read'}
    elseif ($Rights -eq "ReadAndExecute, Synchronize" -and $IFlag -notlike '*ObjectInherit*')            {$AccessTemplate = 'ViewOnly'}
    elseif ($Rights -eq "Modify, Synchronize")                                                           {$AccessTemplate = 'ReadWrite'}
    elseif ($Rights -eq "FullControl")                                                                   {$AccessTemplate = 'Full'}
    else                                                                                                 {$AccessTemplate = '-'}
 
    [PSCustomObject][ordered]@{
        FullName          = $dir.FullName
        CreationTime      = $dir.CreationTime.ToString()
        LastAccessTime    = $dir.LastAccessTime.ToString()
        LastWriteTime     = $dir.LastWriteTime.ToString()
        Owner             = $Folder_ACL.Owner
        IdentityReference = $Access.IdentityReference
        AccessTemplate    = $AccessTemplate
        AccessControlType = $Access.AccessControlType
        FileSystemRights  = $Access.FileSystemRights
        IsInherited       = $Access.IsInherited
        InheritanceFlags  = $Access.InheritanceFlags
        PropagationFlags  = $Access.PropagationFlags
    }
 
}
 
 
cls
$list = @()
Get-ChildItem -Path $RootPath -Directory -Depth 2 |% {
   
    $dir = $_
    
    $Access,$obj = $null
    $Folder_ACL = Get-Acl -LiteralPath $dir.FullName
 
#   foreach ($Access in $Folder_ACL.Access)
    foreach ($Access in $Folder_ACL.Access | ? IsInherited -EQ $false)
    {
#       if ($Access.IdentityReference.Value -match 'Ivanov')
#       {
            $list += New-Obj | Tee -var obj | select *
#       }
    }
 
    if ($Access -and $obj) {Write-Host "Есть интересующие разрешения:" $dir.FullName -f Yellow}
    else                   {Write-Host "Нет интересующих разрешений :" $dir.FullName}
 
}
 
$list | ft -a
#$list | Export-csv $CsvPath -Encoding utf8 -Force -NoTypeInformation -Delimiter ";"
Цитата Сообщение от Yurk Посмотреть сообщение
и названия групп и пользователей собирались в одну ячейку
По моему, это не имеет смысла, т.к. ACL - это Access Control List, т.е. список контроля доступа.
0
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 36
04.02.2019, 06:02
Цитата Сообщение от KDE777 Посмотреть сообщение
Неужели это сложно?
А же написал выше, что выходит ошибка.
PowerShell
1
2
3
4
5
6
Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Depth".
C:\Users\xxx\Desktop\AD_шары3.ps1:37 знак:42
+ Get-ChildItem -Path $RootPath -Directory -Depth 2 |% {
+                                          ~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Цитата Сообщение от KDE777 Посмотреть сообщение
По моему, это не имеет смысла, т.к. ACL - это Access Control List, т.е. список контроля доступа.
Наверное Вы меня немного не поняли...
Список и нужен, только вот в таком виде:
Столбец1 Столбец2
шара1 группа1
группа2
пользователь23
шара2 группа1
пользователь32

Добавлено через 4 минуты
Code
1
2
3
4
5
6
7
Столбец1     Столбец2
шара1        группа1
             группа2
             пользователь23
             пользователь2
шара2        группа1
             пользователь32
Добавлено через 30 минут
Про список был не прав, понял что так не сделаешь и не нужно оно.
Остался вопрос про ошибку.
PS запускаю на контроллере домена под управлением WIN2012R2

Добавлено через 2 часа 17 минут
Разобрался, Depth появился с версии PS 5.0
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
04.02.2019, 12:43
Цитата Сообщение от Yurk Посмотреть сообщение
А же написал выше, что выходит ошибка.
Написали, а какая именно нужно было угадывать. На будущее, сразу цитируйте сообщение об ошибке...

Цитата Сообщение от Yurk Посмотреть сообщение
Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Depth".
Всё верно, -Depth появился в PS 5.

Без этого ключа можно сделать, как показано в ответе #2

Цитата Сообщение от Yurk Посмотреть сообщение
Про список был не прав, понял что так не сделаешь и не нужно оно.
Сделать так можно, но зачем

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$RootPath = '\\Server\Share'
$CsvPath = 'C:\Temp\report.csv'
 
cls
$list = @()
Get-ChildItem -Path "$RootPath\*","$RootPath\*\*" -Directory |% {
   
    $dir = $_
    $Folder_ACL = Get-Acl -LiteralPath $dir.FullName
 
    if ($Access = ($Folder_ACL.Access | ? IsInherited -EQ $false).IdentityReference -join "`n")
    {
 
        $list += [PSCustomObject][ordered]@{
            FullName          = $dir.FullName
            IdentityReference = $Access
        }
        Write-Host "Есть интересующие разрешения:" $dir.FullName -f Yellow
    }
    else {Write-Host "Нет интересующих разрешений :" $dir.FullName}
 
}
 
$list | ft -a -Wrap
#$list | Export-csv $CsvPath -Encoding utf8 -Force -NoTypeInformation -Delimiter ";"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2019, 12:43
Помогаю со студенческими работами здесь

Изменение владельца и прав доступа к директории командами chown и chmod
Помогите понять и разобраться! Предположим вы использовали команду sudo для создания директории dir. По умолчанию для dir были...

Ошибка "Ошибка создания папки. Возможно недостаточно прав доступа для создания новой директории.Битрикс24 Коробочн
При создании раздела на главной выдает ошибку "Ошибка создания папки. Возможно недостаточно прав доступа для создания новой директории....

Атрибуты прав при создании директории
Пишу mkdir("dir0777",0777); mkdir("dir0770",0770); mkdir("dir0707",0707); mkdir("dir0077",0077); Для владельца - права...

Монтирование директории с указание прав в формате 744
Как смонтировать директорию, чтобы с св-вах монтировани были указаны права доступа 744 ? или 755? или 777?

Перемещение файлов из системной директории неработающей ОС: не хватает прав
Проблема в том что когда я хочу переместить или удалить с папки System32,Windows Выбивает такая ошибка я даю права админа и оно работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru