Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39

Просмотр доступа к папке пользователей локальной группы

16.01.2019, 15:04. Показов 3323. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть скрипт для получения списка доступа к шаре с указанием уровня вложенности папок, рекурсией по AD-группе и экспортом в Excel.
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#Import-Module -Name ActiveDirectory
Function RecursiveFolder ($Path, $Max, $Level = 1)
{
  $Path = (Resolve-Path $Path).ProviderPath
  $Path
  ForEach ($Item in @(Get-ChildItem $Path | Where {$_.PsIsContainer}))
  {
    If ($Level -eq $Max) {Return}
    RecursiveFolder $Item.PSPath $Max ($Level + 1)
  }
}
 
# Целевая папка
$Share = "\\Сервер\Шара"
# Уровень вложенности папок
#$Deep = 1
Do {
    Clear-Host
    [int]$Deep = Read-Host "Уровень вложенности папок"
    }
    Until ($Deep -gt "0")
# Путь к экспортируемому файлу относительно каталога сценария
$Export = "\CSV\AccessFolder.csv"
# 3 строки для добавления в имя экспортируемого файла наименование целевой папки, дату и время
#$Export = "\CSV\AccessFolder({0})-{1:ddMMyyyy_HHmm}.csv"
#$ShareName = $Share.Replace("\\", "")
#$ShareName = $ShareName.Replace("\","_")
$ScriptPath = $MyInvocation.MyCommand.Path | Split-Path -Parent #Текущий каталог сценария
$ExcelExport = "$ScriptPath$Export" + $Args[0]
Write-Host "Ждите..."
$Folders = RecursiveFolder $Share -max $Deep
$Result = @()
ForEach ($CurFld in $Folders) {
    $Result += (Get-ACL $CurFld).Access  | Foreach {
        $Acl = $_
        $Id = $Acl.IdentityReference.Value.split("\")[1]
        $Dom = $Acl.IdentityReference.Value.split("\")[0]
        Try {
            $Obj = Get-ADObject -Filter "SamAccountName -eq '$Id'"
            If(!$Obj) {
                $Obj = [pscustomobject]@{Name = $Acl.IdentityReference.Value}
            }
            
            [pscustomobject]@{
                Folder = $CurFld
                Class = $Obj.ObjectClass
                Name = $Obj.Name
                IdentityReference = $Acl.IdentityReference
                AccessControlType = $Acl.AccessControlType
                FilesystemRights  = $Acl.FilesystemRights
            }
            If($Obj.ObjectClass -eq "Group") {
                Get-ADGroupMember $Obj -Recursive | Foreach {
                    [pscustomobject]@{
                        Folder = $CurFld
                        Class = $_.ObjectClass+" of "+$Acl.IdentityReference
                        Name = $_.Name.tostring()
                        IdentityReference = $Dom+"\"+$_.SamAccountName
                        AccessControlType = $Acl.AccessControlType
                        FilesystemRights  = $Acl.FilesystemRights
                    }
                } #end ForEach ADGroupMember
            } #end If Group
        } #end Try
        Catch {
            [pscustomobject]@{
                Folder = $CurFld
                Class = $Acl.ObjectClass
                Name = $Acl.IdentityReference.Value
                IdentityReference = $Acl.IdentityReference
                AccessControlType = $Acl.AccessControlType
                FilesystemRights  = $Acl.FilesystemRights
            }
        } #end Catch
    } #end ForEach ACL
} #end ForEach Folders
$Result | Sort-Object Folder,Class,Name | Export-Csv -Encoding UTF8 -Path ("$ExcelExport" -f $ShareName,(Get-Date)) -Delimiter ";" -Force -NoTypeInformation
Write-Host "Выполнено"
Вопрос №1: не могу получить список пользователей локальной группы, точнее не от чего оттолкнуться - не могу получить имя локальной группы, только SID;
Вопрос №2: после ввода имени сервера выпадает список шар, но не отсортированный и без контекстного ввода.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2019, 15:04
Ответы с готовыми решениями:

Настройка доступа отдельных пользователей к общей папке Windows XP по локальной сети
Добрый день. На работе небольшая локальная сеть ~10 ПК. У нас три из них, на которых и нужно произвести настройку. 1ПК:Windows XP Pro SP2...

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

Не удается добавить доступ к расшаренной папке для группы пользователей
Зашел под админом, пытаюсь расшарить общий доступ к папке для группы юзеров, открываю общий доступ, добавляю группу жму окей далее. все...

11
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
16.01.2019, 16:50
Цитата Сообщение от mutaborio Посмотреть сообщение
не могу получить список пользователей локальной группы, точнее не от чего оттолкнуться - не могу получить имя локальной группы, только SID
А чем не устраивает SID локальной группы?

PowerShell
1
Get-CimInstance -ClassName win32_group -ComputerName $comp -Filter "SID = '$SID'" | Get-CimAssociatedInstance -Association win32_groupuser
или

PowerShell
1
Invoke-Command -ComputerName $comp -ArgumentList $SID -ScriptBlock {"Get-LocalGroupMember -SID $args"}
+ только SID в IdentityReference может быть не только у локальной группы/пользователя, но и у объекта ранее удалённого из AD...

Цитата Сообщение от mutaborio Посмотреть сообщение
после ввода имени сервера выпадает список шар, но не отсортированный и без контекстного ввода.
Вы про функцию RecursiveFolder? Тогда не понятно, зачем этот велосипед, когда есть Get-ChildItem и ключ -Depth

Вот несколько примеров аудита NTFS разрешений:

Поиск папок, в которые есть доступ у пользователя
Выгрузка списка доступа к сетевой папке
0
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
16.01.2019, 17:28  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
Вы про функцию RecursiveFolder?
В строке 14 после ввода \\сервер\ появляется выпадающий список шар на этом сервере
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
16.01.2019, 17:47
Цитата Сообщение от mutaborio Посмотреть сообщение
В строке 14 после ввода \\сервер\ появляется выпадающий список шар на этом сервере
Вы про ввод в тексте самого скрипта? Если да, то у меня в PowerShell_ISE (WinServer 2012R2) - появляется отсортированный список, в котором доступна навигация мышью или клавиатурой...
0
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
16.01.2019, 18:00  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
Вы про ввод в тексте самого скрипта?
Да, в ISE навигация есть, но не отсортировано и контекстный поиск не поддерживается.
PSVersion 4.0
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
16.01.2019, 18:13
Цитата Сообщение от mutaborio Посмотреть сообщение
Да, в ISE навигация есть, но не отсортировано и контекстный поиск не поддерживается.
PSVersion 4.0
Win 8.1 и 2012R2, ISE, PS 4 и 5.1 - всё отсортировано и контекстно выбирается...
0
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
17.01.2019, 13:45  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
Win 8.1 и 2012R2, ISE, PS 4 и 5.1 - всё отсортировано и контекстно выбирается...
Intellisense при вводе командлетов сортирует и контекстно выбирает, но при вводе путей только навигация. Возможно, это параметр в $psise, пока не разбирался.
Цитата Сообщение от KDE777 Посмотреть сообщение
только SID в IdentityReference может быть не только у локальной группы/пользователя, но и у объекта ранее удалённого из AD...
Это понятно и на данный момент не имеет значения, т.к. удаленные объекты периодически подчищаются
Цитата Сообщение от KDE777 Посмотреть сообщение
PowerShell
1
Get-CimInstance -ClassName win32_group -ComputerName $comp -Filter "SID = '$SID'" | Get-CimAssociatedInstance -Association win32_groupuser
или
PowerShell
1
Invoke-Command -ComputerName $comp -ArgumentList $SID -ScriptBlock {"Get-LocalGroupMember -SID $args"}
WS-Management не поддерживается
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
17.01.2019, 13:49
Цитата Сообщение от mutaborio Посмотреть сообщение
WS-Management не поддерживается
Ну тогда, wmi вам в руки (вариант 1)
0
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
17.01.2019, 14:41  [ТС]
Могут быть иные варианты?


Get-CimInstance : Клиенту не удается подключиться к узлу назначения, указанному в запросе. Убедитесь, что служба на узле назначения работает и принимает запросы. Ознакомьтесь с журналами и документацией для определения запущенной на узле назначения службы WS-Management (чаще всего это IIS или WinRM). Если это служба WinRM, то для анализа состояния и настройки этой службы используйте на удаленном узле команду "winrm quickconfig".

New-CimSession : Клиенту не удается подключиться к узлу назначения, указанному в запросе. Убедитесь, что служба на узле назначения работает и принимает запросы. Ознакомьтесь с журналами и документацией для определения запущенной на узле назначения службы WS-Management (чаще всего это IIS или WinRM). Если это служба WinRM, то для анализа состояния и настройки этой службы используйте на удаленном узле команду "winrm quickconfig".
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
17.01.2019, 14:55
Цитата Сообщение от mutaborio Посмотреть сообщение
Могут быть иные варианты?
PowerShell
1
2
3
$option = New-CimSessionOption -Protocol Dcom
$session = New-CimSession -ComputerName $comp -SessionOption $option
Get-CimInstance -ClassName win32_group -CimSession $session -Filter "SID = '$SID'" | Get-CimAssociatedInstance -Association win32_groupuser
1
 Аватар для mutaborio
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
18.01.2019, 16:01  [ТС]
Спасибо!
Единственное неудобство, что долго выполняется.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
18.01.2019, 16:19
Цитата Сообщение от mutaborio Посмотреть сообщение
Единственное неудобство, что долго выполняется.
Один раз сохраните в переменную список всех локальных групп, а далее проверяйте sid'ы уже по этому списку. А можно сразу и всех участников сохранить, что-то типа:

SID1, GroupName1, User1
SID1, GroupName1, User2
SID2, GroupName2, User1
...

+ не раздавайте доступы через локальные группы и избавитесь от всех этих трудностей
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2019, 16:19
Помогаю со студенческими работами здесь

Изменение (сброс) прав доступа к локальной папке
Компьютер принадлежал домену На компе была папка, доступная по сети группе из домена. После смены домена прекратился локальный доступ к...

Ограничение доступа к расшаренным папкам через группы пользователей
Настраиваю папку общего доступа на файловом сервере (Windows 2003 r1) в домене. В ней содержится несколько папок, каждая из которых должна...

Удалил всех пользователей в вкладке безопасность у своего hdd, теперь нет доступа ни к одной папке
Удалил всех пользователей в вкладке безопасность у своего винта. сейчас не могу получить доступа ни к одной папке. Как вернуть нажитое...

Получить список пользователей из локальной группы "Администраторы" и вывести его в файл
На основе тех учёток компьютеров, что есть в АД. Теоретический вижу так. Выгрузить все активные учётки в домене, далее запросить...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru