Udostępnij za pośrednictwem


Set-Acl

Zmienia deskryptor zabezpieczeń określonego elementu, na przykład plik lub klucz rejestru.

Składnia

Set-Acl
   [-Path] <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-PassThru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   [-InputObject] <PSObject>
   [-AclObject] <Object>
   [-PassThru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Set-Acl
   -LiteralPath <String[]>
   [-AclObject] <Object>
   [-ClearCentralAccessPolicy]
   [-PassThru]
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Opis

Cmdlet jest dostępny tylko na platformie Windows.

Polecenie cmdlet Set-Acl zmienia deskryptor zabezpieczeń określonego elementu, takiego jak plik lub klucz rejestru, tak aby odpowiadał wartościom w podanym deskryptorze zabezpieczeń.

Aby użyć Set-Acl, użyj parametru ścieżki lub parametru InputObject , aby odszukać element, którego deskryptor zabezpieczeń chcesz zmienić. Następnie użyj parametrów AclObject lub SecurityDescriptor, aby podać deskryptor zabezpieczeń zawierający wartości, które chcesz zastosować. Set-Acl stosuje deskryptor zabezpieczeń, który jest dostarczany. Używa wartości parametru AclObject jako modelu i zmienia wartości w deskryptorze zabezpieczeń elementu w celu dopasowania wartości w parametrze AclObject.

Przykłady

Przykład 1. Kopiowanie deskryptora zabezpieczeń z jednego pliku do innego

$DogACL = Get-Acl -Path "C:\Dog.txt"
Set-Acl -Path "C:\Cat.txt" -AclObject $DogACL

Te polecenia kopiują wartości z deskryptora zabezpieczeń pliku Dog.txt do deskryptora zabezpieczeń pliku Cat.txt. Po zakończeniu wykonywania poleceń deskryptory zabezpieczeń plików Dog.txt i Cat.txt są identyczne.

Pierwsze polecenie używa polecenia cmdlet Get-Acl w celu pobrania deskryptora zabezpieczeń pliku Dog.txt. Operator przypisania (=) przechowuje deskryptor zabezpieczeń w wartości zmiennej $DogACL.

Drugie polecenie używa Set-Acl, aby zmienić wartości na liście kontroli dostępu Cat.txt na wartości w $DogACL.

Wartość parametru ścieżki to ścieżka do pliku Cat.txt. Wartość parametru AclObject to ACL modelu, w tym przypadku ACL Dog.txt, jak zapisano w zmiennej $DogACL.

Przykład 2: Użyj operatora potoku do przekazywania deskryptora

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

To polecenie jest prawie takie samo jak polecenie w poprzednim przykładzie, z tą różnicą, że używa operatora potoku (|) do wysyłania deskryptora zabezpieczeń z polecenia Get-Acl do polecenia Set-Acl.

Pierwsze polecenie używa polecenia cmdlet Get-Acl w celu pobrania deskryptora zabezpieczeń pliku Dog.txt. Operator potoku (|) przekazuje obiekt reprezentujący deskryptor zabezpieczeń Dog.txt do polecenia cmdlet Set-Acl.

Drugie polecenie używa Set-Acl do zastosowania deskryptora zabezpieczeń Dog.txt do Cat.txt. Po zakończeniu działania polecenia listy ACL plików Dog.txt i Cat.txt są identyczne.

Przykład 3. Stosowanie deskryptora zabezpieczeń do wielu plików

$NewAcl = Get-Acl File0.txt
Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl

Te polecenia stosują deskryptory zabezpieczeń w pliku File0.txt do wszystkich plików tekstowych w katalogu C:\Temp i wszystkich jego podkatalogach.

Pierwsze polecenie pobiera deskryptor zabezpieczeń pliku File0.txt w bieżącym katalogu i używa operatora przypisania (=) do przechowywania go w zmiennej $NewACL.

Pierwsze polecenie w potoku danych używa cmdletu Get-ChildItem, aby pobrać wszystkie pliki tekstowe w katalogu C:\Temp. Parametr Recurse rozszerza polecenie na wszystkie podkatalogi C:\temp. Parametr Include ogranicza pliki pobrane do plików z rozszerzeniem nazwy pliku .txt. Parametr Force pobiera ukryte pliki, które w przeciwnym razie zostaną wykluczone. (Nie można użyć c:\temp\*.txt, ponieważ parametr Recurse działa w katalogach, a nie w plikach).

Operator potoku (|) wysyła obiekty reprezentujące pobrane pliki do polecenia cmdlet Set-Acl, który stosuje deskryptor zabezpieczeń w parametrze AclObject do wszystkich plików w potoku.

W praktyce najlepiej użyć parametru WhatIf ze wszystkimi poleceniami Set-Acl, które mogą mieć wpływ na więcej niż jeden element. W tym przypadku drugim poleceniem w potoku będzie Set-Acl -AclObject $NewAcl -WhatIf. To polecenie wyświetla listę plików, których dotyczy polecenie . Po przejrzeniu wyniku możesz ponownie uruchomić polecenie bez parametru WhatIf.

Przykład 4. Wyłączanie dziedziczenia i zachowywanie dziedziczone reguły dostępu

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
$isProtected = $true
$preserveInheritance = $true
$NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

Te polecenia wyłączają dziedziczenie dostępu z folderów nadrzędnych, zachowując jednocześnie istniejące dziedziczone reguły dostępu.

Pierwsze polecenie używa polecenia cmdlet Get-Acl w celu pobrania deskryptora zabezpieczeń pliku Dog.txt.

Następnie tworzone są zmienne, aby przekonwertować dziedziczone reguły dostępu na jawne reguły dostępu. Aby chronić reguły dostępu skojarzone z tym elementem przed dziedziczeniem, ustaw zmienną $isProtected na $true. Aby zezwolić na dziedziczenie, ustaw $isProtected na $false. Aby uzyskać więcej informacji, zobacz ustaw ochronę reguł dostępu.

Ustaw zmienną $preserveInheritance na $true, aby zachować dziedziczone reguły dostępu lub $false usunąć dziedziczone reguły dostępu. Następnie ochrona reguły dostępu jest aktualizowana przy użyciu metody SetAccessRuleProtection().

Ostatnia komenda używa Set-Acl, aby zastosować deskryptor zabezpieczeń do Dog.txt. Po zakończeniu działania polecenia, listy ACL Dog.txt odziedziczone z folderu Pets zostaną zastosowane bezpośrednio do Dog.txt, a nowe zasady dostępu dodane do folderu Pets nie wpłyną na dostęp do Dog.txt.

Przykład 5. Udzielanie administratorom pełnej kontroli nad plikiem

$NewAcl = Get-Acl -Path "C:\Pets\Dog.txt"
# Set properties
$identity = "BUILTIN\Administrators"
$fileSystemRights = "FullControl"
$type = "Allow"
# Create new rule
$fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
$newParams = @{
  TypeName     = 'System.Security.AccessControl.FileSystemAccessRule'
    ArgumentList = $fileSystemAccessRuleArgumentList
}
$fileSystemAccessRule = New-Object @newParams
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

To polecenie przyznaje grupie BUILTIN\Administrators pełną kontrolę nad plikiem Dog.txt.

Pierwsze polecenie używa polecenia cmdlet Get-Acl w celu pobrania deskryptora zabezpieczeń pliku Dog.txt.

Następne zmienne są tworzone w celu udzielenia BUILTIN\Administrators grupie pełnej kontroli nad plikiem Dog.txt. Zmienna $identity ustawiona na nazwę konta użytkownika . Zmienna $fileSystemRights jest ustawiona na FullControl i może być dowolną z wartości FileSystemRights, które określają typ operacji skojarzonych z regułą dostępu. Zmienna $type ustawiona na wartość "Zezwalaj", aby określić, czy zezwalać na operację, czy odmawiać jej. Zmienna $fileSystemAccessRuleArgumentList jest listą argumentów, która ma zostać przekazana podczas tworzenia nowego obiektu FileSystemAccessRule. Następnie zostanie utworzony nowy obiekt FileSystemAccessRule, a obiekt FileSystemAccessRule jest przekazywany do metody SetAccessRule(), dodaje nową regułę dostępu.

Ostatnia komenda używa Set-Acl, aby zastosować deskryptor zabezpieczeń do Dog.txt. Po zakończeniu wykonywania polecenia grupa BUILTIN\Administrators będzie miała pełną kontrolę nad Dog.txt.

Parametry

-AclObject

Określa listę ACL z żądanymi wartościami właściwości. Set-Acl zmienia ACL elementu określonego przez ścieżkę lub parametr InputObject, aby dopasować wartości w określonym obiekcie zabezpieczeń.

Dane wyjściowe polecenia Get-Acl można zapisać w zmiennej, a następnie użyć parametru AclObject, aby przekazać zmienną, lub wpisać polecenie Get-Acl.

Typ:Object
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-ClearCentralAccessPolicy

Usuwa centralne zasady dostępu z określonego elementu.

Począwszy od systemu Windows Server 2012, administratorzy mogą używać usługi Active Directory i zasad grupy do ustawiania centralnych zasad dostępu dla użytkowników i grup. Aby uzyskać więcej informacji, zobacz Dynamiczna Kontrola Dostępu: Omówienie scenariusza.

Ten parametr został wprowadzony w programie Windows PowerShell 3.0.

Typ:SwitchParameter
Aliasy:PSPath, LP
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Confirm

Prosi o potwierdzenie przed uruchomieniem polecenia cmdlet.

Typ:SwitchParameter
Aliasy:cf
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Exclude

Pomija określone elementy. Wartość tego parametru kwalifikuje parametr Path. Wprowadź element ścieżki lub wzorzec, taki jak *.txt. Dozwolone są symbole wieloznaczne.

Typ:String[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-Filter

Określa filtr w formacie lub języku dostawcy. Wartość tego parametru kwalifikuje parametr Path. Składnia filtru, w tym użycie symboli wieloznacznych, zależy od dostawcy. Filtry są bardziej wydajne niż inne parametry, ponieważ dostawca stosuje je podczas pobierania obiektów, zamiast filtrować obiekty programu PowerShell po ich pobraniu.

Typ:String
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-Include

Zmienia tylko określone elementy. Wartość tego parametru kwalifikuje parametr Path. Wprowadź element ścieżki lub wzorzec, taki jak *.txt. Dozwolone są symbole wieloznaczne.

Typ:String[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-InputObject

Zmienia deskryptor zabezpieczeń określonego obiektu. Wprowadź zmienną zawierającą obiekt lub polecenie, które pobiera obiekt.

Nie można przekazać do potoku obiektu, który ma zostać zmieniony na Set-Acl. Zamiast tego użyj parametru InputObject jawnie w poleceniu .

Ten parametr został wprowadzony w programie Windows PowerShell 3.0.

Typ:PSObject
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-LiteralPath

Zmienia deskryptor zabezpieczeń określonego elementu. W przeciwieństwie do Path, wartość parametru LiteralPath jest używana dokładnie tak, jak ją wpisano. Żadne znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów ('). Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

Ten parametr został wprowadzony w programie Windows PowerShell 3.0.

Typ:String[]
Aliasy:PSPath
Position:Named
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-PassThru

Zwraca obiekt reprezentujący deskryptor zabezpieczeń, który został zmieniony. Domyślnie to polecenie cmdlet nie generuje żadnych danych wyjściowych.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Path

Zmienia deskryptor zabezpieczeń określonego elementu. Wprowadź ścieżkę do elementu, na przykład ścieżkę do pliku lub klucza rejestru. Dozwolone są symbole wieloznaczne.

Jeśli przekażesz obiekt zabezpieczeń do Set-Acl (albo używając parametrów AclObject lub SecurityDescriptor, albo przekazując obiekt zabezpieczeń z Get-Acl do Set-Acl), a pominiesz parametr Path (nazwa i wartość), Set-Acl używa ścieżki uwzględnionej w obiekcie zabezpieczeń.

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-WhatIf

Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Polecenie cmdlet nie zostało uruchomione.

Typ:SwitchParameter
Aliasy:wi
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

ObjectSecurity

Do tego polecenia cmdlet można przekazać obiekt ACL.

CommonSecurityDescriptor

Do tego polecenia cmdlet można przekazać deskryptor zabezpieczeń.

Dane wyjściowe

None

Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.

FileSecurity

Jeśli używasz parametru PassThru, to polecenie cmdlet zwraca obiekt zabezpieczeń. Typ obiektu zabezpieczeń zależy od typu elementu.

Uwagi

To polecenie cmdlet jest dostępne tylko na platformach Windows.

Polecenie cmdlet Set-Acl jest obsługiwane przez dostawców rejestru i systemu plików programu PowerShell. W związku z tym można go użyć do zmiany deskryptorów zabezpieczeń plików, katalogów i kluczy rejestru.