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

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

Polecenie Set-Acl cmdlet zmienia deskryptor zabezpieczeń określonego elementu, takiego jak plik lub klucz rejestru, aby dopasować wartości podanego deskryptora zabezpieczeń.

Aby użyć parametru Set-Acl, użyj parametru Path lub InputObject , aby zidentyfikować 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 on wartości parametru AclObject jako modelu i zmienia wartości w deskryptorze zabezpieczeń elementu, aby dopasować 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 Get-Acl polecenia cmdlet do pobrania deskryptora zabezpieczeń pliku Dog.txt. Operator przypisania (=) przechowuje deskryptor zabezpieczeń w wartości zmiennej $DogACL.

Drugie polecenie używa Set-Acl polecenia , aby zmienić wartości na liście ACL Cat.txt na wartości w $DogACLpliku .

Wartość parametru Path jest ścieżką do pliku Cat.txt. Wartość parametru AclObject to lista ACL modelu, w tym przypadku lista ACL Dog.txt zapisana w zmiennej $DogACL .

Przykład 2. Używanie 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 Get-Acl polecenia do Set-Acl polecenia.

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

Drugie polecenie używa Set-Acl polecenia do zastosowania deskryptora zabezpieczeń Dog.txt do Cat.txt. Po zakończeniu wykonywania 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 C:\Temp katalogu 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 używa polecenia cmdlet Get-ChildItem, aby pobrać wszystkie pliki tekstowe w C:\Temp katalogu. Parametr Recurse rozszerza polecenie do wszystkich podkatalogów .C:\temp Parametr Include ogranicza pliki pobrane do plików z .txt rozszerzeniem nazwy pliku. Parametr Force pobiera ukryte pliki, które w przeciwnym razie byłyby wykluczone. (Nie można użyć parametru c:\temp\*.txt, ponieważ parametr Recurse działa w katalogach, a nie w plikach).

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

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

Przykład 4: Wyłączanie dziedziczenia i zachowywanie dziedziczynych reguł 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 Get-Acl polecenia cmdlet do pobrania deskryptora zabezpieczeń pliku Dog.txt.

Następnie są tworzone 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 wartość $isProtected$false. Aby uzyskać więcej informacji, zobacz Ustawianie ochrony reguł dostępu.

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

Ostatnie polecenie używa Set-Acl polecenia do zastosowania deskryptora zabezpieczeń do Dog.txt. Po zakończeniu wykonywania polecenia listy ACL Dog.txt, które zostały odziedziczone z folderu Zwierzęta domowe, zostaną zastosowane bezpośrednio do Dog.txt, a nowe zasady dostępu dodane do strony Zwierzęta domowe nie zmienią dostępu 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
$fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
# Apply new rule
$NewAcl.SetAccessRule($fileSystemAccessRule)
Set-Acl -Path "C:\Pets\Dog.txt" -AclObject $NewAcl

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

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

Następne zmienne są tworzone w celu udzielenia grupie BUILTIN\Administrators pełnej kontroli nad plikiem Dog.txt. Zmienna $identity ustawiona na nazwę konta użytkownika. Zmienna ustawiona $fileSystemRights na FullControl i może być dowolną z wartości FileSystemRights , która określa typ operacji skojarzonej z regułą dostępu. Zmienna ustawiona $type na wartość "Zezwalaj" określa, 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.

Ostatnie polecenie używa Set-Acl polecenia do zastosowania deskryptora zabezpieczeń do Dog.txt. Po zakończeniu wykonywania polecenia grupa BUILTIN\Administrators będzie mieć pełną kontrolę nad Dog.txt.

Parametry

-AclObject

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

Możesz zapisać dane wyjściowe Get-Acl polecenia w zmiennej, a następnie użyć parametru AclObject do przekazania zmiennej lub wpisać Get-Acl polecenie.

Type:Object
Position:1
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-ClearCentralAccessPolicy

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

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

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 filtrowania obiektów za pomocą programu PowerShell po ich pobraniu.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

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

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

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:PSObject
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

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

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

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

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 przekazujesz obiekt zabezpieczeń do Set-Acl (przy użyciu parametrów AclObject lub SecurityDescriptor lub przekazując obiekt zabezpieczeń z Get-Acl do Set-Acl), a pominiesz parametr Path (nazwa i wartość), Set-Acl użyje ścieżki uwzględnionej w obiekcie zabezpieczeń.

Type:String[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:True

-WhatIf

Pokazuje, co się stanie po uruchomieniu polecenia cmdlet. Polecenie cmdlet nie zostało uruchomione.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor

Do obiektu listy ACL lub deskryptora zabezpieczeń można przekazać potok .Set-Acl

Dane wyjściowe

FileSecurity

Domyślnie Set-Acl nie generuje żadnych danych wyjściowych. Jeśli jednak używasz parametru Passthru , generuje on obiekt zabezpieczeń. Typ obiektu zabezpieczeń zależy od typu elementu.

Uwagi

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

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