Set-Acl to polecenie PowerShell (z modułu Microsoft.PowerShell.Security), które zapisuje listę kontroli dostępu (ACL) na pliku, katalogu lub kluczu rejestru. W praktyce działa w parze z Get-Acl: pobierasz obiekt zabezpieczeń, modyfikujesz w nim reguły (kto i co może zrobić z zasobem) albo właściciela, a potem Set-Acl wgrywa zmieniony deskryptor z powrotem na zasób. To jest podstawowe narzędzie, gdy chcesz skryptowo zarządzać uprawnieniami NTFS bez klikania w zakładce „Zabezpieczenia”.
Składnia i najważniejsze opcje
Podstawowa forma: Set-Acl [-Path]
-Path— ścieżka do zasobu, którego ACL ustawiasz. Akceptuje symbole wieloznaczne (np.*) i wiele ścieżek naraz.-LiteralPath— to samo co-Path, ale ścieżka brana jest dosłownie, bez interpretacji znaków wieloznacznych. Ratuje, gdy nazwa ma nawiasy kwadratowe.-AclObject— obiekt zabezpieczeń (zwykle zGet-Acl), który chcesz zastosować. To jest „treść” uprawnień.-CentralAccessPolicy— ustawia centralną politykę dostępu (CAP) na zasobie; podajesz jej nazwę lub identyfikator.-ClearCentralAccessPolicy— usuwa centralną politykę dostępu z zasobu.-Passthru— domyślnie polecenie nic nie zwraca; ten przełącznik oddaje zmieniony obiekt zabezpieczeń, żebyś mógł go sprawdzić.-Include/-Exclude— filtrują, które elementy ze ścieżki obejmuje operacja.
Przykłady użycia
Get-Acl C:\wzor.txt | Set-Acl -Path C:\cel.txt— kopiuje uprawnienia z jednego pliku na drugi (klasyczny „klonuj ACL”).$acl = Get-Acl C:\dane; $acl.SetAccessRuleProtection($true,$false); Set-Acl C:\dane -AclObject $acl— wyłącza dziedziczenie uprawnień na folderze.$acl = Get-Acl C:\raporty; $r = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMENA\jkowalski","Read","Allow"); $acl.AddAccessRule($r); Set-Acl C:\raporty -AclObject $acl— dodaje użytkownikowi prawo odczytu.Get-Acl C:\wzor | Set-Acl -Path C:\projekty\* -Include *.log— wgrywa wzorcowy ACL na wszystkie pliki.logw katalogu.Set-Acl -Path C:\zasob -AclObject $acl -Passthru— ustawia ACL i od razu zwraca wynik do podglądu.
Częste błędy i pułapki
Najczęstsza wpadka to próba edycji w locie wyniku Get-Acl bez przypisania do zmiennej — modyfikuj obiekt w $acl, dopiero potem podaj go do -AclObject. Pamiętaj, że Set-Acl nadpisuje deskryptor: jeśli zbudujesz ACL od zera bez dziedziczonych reguł, możesz odciąć dostęp wszystkim łącznie z sobą. Zmiana właściciela (SetOwner) zwykle wymaga uprawnień administratora i przywileju SeRestorePrivilege, więc odpalaj konsolę „jako administrator”. I uważaj na ścieżki z nawiasami — tam zamiast -Path użyj -LiteralPath, bo inaczej PowerShell potraktuje je jako wzorzec i nic nie znajdzie.
Powiązane polecenia: Get-Acl (odczyt ACL), icacls (narzędzie wiersza poleceń do uprawnień NTFS), takeown (przejęcie własności), Get-Item (wskazanie zasobu).