Set-Acl

Ustawia listę kontroli dostępu (ACL) na zasobie.

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] [-AclObject] [opcje]

  • -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 z Get-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 .log w 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).