Список пользователей с правами к папке

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

Например ситуация, когда права к папкам выдаются на основе групп AD и этих групп много, одна вложена в другую. Тем самым сильно усложняет поиск конкретного конечного пользователя который получили права.

Итак сам скрипт:

	Function GetFolderACL($tmpPath){
		$bufData = "" #
		$Domain = (Get-ADDomain).name.ToUpper() #Получаем имя домена
		#Получаем списки безопасности целевой папки
		$ACL = Get-Acl $tmpPath
		$ACL = $ACL.Access
		foreach ($tmpAcl in $ACL){ #Перебираем список доступа
			if ($tmpAcl.IdentityReference -match $Domain){ #Берем только доменные учетки
			    if ($tmpAcl.FileSystemRights.ToString() -eq "ReadAndExecute, Synchronize") {$AccessType = "ReadAndExecute"}
                elseif ($tmpAcl.FileSystemRights.ToString() -eq "Modify, Synchronize") {$AccessType = "Modify"}
                elseif ($tmpAcl.FileSystemRights.ToString() -eq "FullControl") {$AccessType = "FullControl"}
				else {$AccessType = "Custom"}
				
				$tmpName = $tmpAcl.IdentityReference.Value.ToString().Replace($Domain + "\",'')
				$ADObject = Get-ADObject -filter{SamAccountName -eq $tmpName} #Выясняем группа или пользователь

				if ($ADObject.ObjectClass.ToString() -eq "user") { #Если пользователь
                    $tmpUname = Get-ADUser -identity $tmpName | Format-Table name -HideTableHeaders | Out-String # запрос в AD для Ф.И.О.
                    $bufData += $tmpName + ";" + $tmpUname.trim() + ";" + $AccessType + ";`n"
				} elseif ($ADObject.ObjectClass.ToString() -eq "group") { #Если группа - получаем список пользователей в группе
					$Users = Get-ADGroupMember $tmpName -Recursive
					foreach ($tmpUser in $Users){
						$bufData += $tmpUser.SamAccountName + ";" + $tmpUser.name + ";" + $AccessType + ";`n" #Запись
					}
				}
			}
		}
		$bufData = $bufData.split("`n") # конвертируем в массив
		$buf = $bufData | sort -Unique # убираем дубли

		return $buf # ответ
	}

GetFolderACL([string[]]$args)  # вызываем функцию с входящ параметром

Скрипт состоит из одной функции, которой нужно указать полный URL до целевой папки. Например : \\domain\dfs-sd\folder1

В итоге мы получаем массив данных пользователей которые находятся в группах безопасности домена.

Синтаксис: Login; ФИО; Права


Рейтинг: 4,7/5 - 3 голосов

Комментарии ()