Ccmdlet Get-Acl w module Security PowerShella (Microsoft.PowerShell.Security) wykonuje świetną robotę przy uzyskiwaniu uprawnień do plików lub folderów (aka lista kontroli dostępu lub ACL). Ale uzyskanie użytecznych informacji z domyślnego wyjścia może wymagać przyzwyczajenia się.
W zamian, byłoby świetnie móc po prostu zobaczyć, co wyświetla zakładka Security pliku, folderu lub innego zasobu, ale bez konieczności przechodzenia przez interfejs Eksploratora plików i wielokrotnego klikania.
Figura 1: Zakładka Security folderu w Eksploratorze Windows
One-liner: Uzyskaj uprawnienia do pliku lub folderu
Oto one-liner, który dokładnie to robi:
(get-acl <nazwa folderu>).access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto
Wynik:
Funkcja Get-Permissions
Chcesz, aby wynik był bardziej czytelny? Oto funkcja PowerShell, która używa niestandardowych etykiet (tytułów w każdej kolumnie tabeli).
Możesz zapisać ją jako skrypt PowerShell lub dodać do swojego profilu PowerShell, aby była zawsze dostępna.
123456789 |
function Get-Permissions ($folder) { (get-acl $folder).access | select `@{Label="Identity";Expression={$_.IdentityReference}}, `@{Label="Right";Expression={$_.FileSystemRights}}, `@{Label="Access";Expression={$_.AccessControlType}}, `@{Label="Inherited";Expression={$_.IsInherited}}, `@{Label="Inheritance Flags";Expression={$_.InheritanceFlags}}, `@{Label="Propagation Flags";Expression={$_.PropagationFlags}}. | ft -auto} |
Możesz pominąć dwie właściwości związane z dziedziczeniem, jeśli nie potrzebujesz tych informacji.
Teraz można użyć polecenia Get-Permissions z nazwą folderu:
Get-Permissions c:myfolder
Wyjście:
Można również przekazać dane wyjściowe z poleceń dir, ls lub gci, z których wszystkie są aliasami PowerShell dla cmdleta Get-ChildItem.
dir <path> | % {Get-Permissions -path $_.fullname}
Funkcja do otwierania właściwości pliku lub folderu w Eksploratorze
Jeśli naprawdę chcesz zobaczyć uprawnienia w GUI Eksploratora plików, możesz użyć tej funkcji do otwarcia strony Właściwości > Ogólne pliku lub folderu. (Nie znalazłem sposobu, aby bezpośrednio otworzyć kartę Zabezpieczenia. Jeśli wiesz jak to zrobić, proszę podziel się w komentarzach do postu.).
12345678910111213141516171819202122 |
function Get-Properties ($path) {#exit if path not foundif (-not ($path | Test-Path)) { Write-Host "$path not found. Proszę podać poprawną ścieżkę do pliku lub folderu." -foregroundcolor red return } $o = new-object -com Shell.Application$item = get-item $path if ($item.gettype() -eq ) {write-host "Znaleziono folder $path.... Pobieranie właściwości"$fso = $o.Namespace("$path")$fso.self.InvokeVerb("properties") } if ($item.gettype() -eq ){write-host "Znaleziono plik $path.... Pobieranie właściwości"$fso = $o.Namespace($item.directoryname)$file = $fso.parsename($item.pschildname)$file.InvokeVerb("properties")}} |
Teraz wystarczy użyć Get-Properties <Folder nazwy pliku>, aby szybko otworzyć stronę właściwości pliku lub folderu z poziomu powłoki.
Figura 2: Użyj funkcji Get-Properties, aby szybko otworzyć właściwości pliku lub folderu z PowerShella
File System Security PowerShell Module
Microsoft PFE Raimund Andrée opublikował jakiś czas temu File System Security PowerShell Module. Dodaje on kilka przydatnych cmdletów do zarządzania uprawnieniami systemu plików za pomocą PowerShell. Sprawdź również jego odpowiednie posty na blogu Weekend Scripter: Use PowerShell to Get, Add, and Remove NTFS Permissions oraz NTFSSecurity Tutorial 2 – Managing NTFS Inheritance and Using Privileges.
Tags
PowerShell Scripts Security Windows