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

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, w celu dopasowania wartości w deskryptorze zabezpieczeń, który podajesz.

Aby użyć Set-Aclpolecenia , 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 wartości parametru AclObject jako modelu i zmienia wartości deskryptora 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 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 metody , aby zmienić wartości w liście ACL Cat.txt na wartości w pliku $DogACL.

Wartość parametru Path to ścieżka 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żyj operatora potoku, aby przekazać deskryptor

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 wyjątkiem tego, ż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 metody , aby zastosować deskryptor 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 w celu pobrania wszystkich plików tekstowych w C:\Temp katalogu. Parametr Recurse rozszerza polecenie na wszystkie podkatalogi .C:\temp Parametr Include ogranicza pliki pobrane do tych z .txt rozszerzeniem nazwy pliku. Parametr Force pobiera ukryte pliki, które w przeciwnym razie byłyby wykluczone. (Nie można użyć c:\temp\*.txtparametru , 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 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 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 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 metody , aby zastosować deskryptor zabezpieczeń do Dog.txt. Po zakończeniu wykonywania polecenia listy ACL Dog.txt dziedziczone z folderu Zwierzęta zostaną zastosowane bezpośrednio do Dog.txt, a nowe zasady dostępu dodane do aplikacji Zwierzęta 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\Administratorzy 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\Administratorzy 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 to lista 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 metody , aby zastosować deskryptor zabezpieczeń do Dog.txt. Po zakończeniu wykonywania polecenia grupa BUILTIN\Administratorzy 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 listę ACL elementu określonego przez parametr Path lub InputObject , aby pasować do wartości w określonym obiekcie zabezpieczeń.

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

Type:Object
Position:1
Default value:None
Required:True
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
Required: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
Required: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
Required:False
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 filtrować obiekty programu PowerShell po ich pobraniu.

Type:String
Position:Named
Default value:None
Required:False
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
Required:False
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ć potoku obiektu do zmiany 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
Required:True
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 je ująć w pojedynczy cudzysłów ('). 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
Required:True
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
Required:False
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
Required:True
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
Required: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 obiekt zabezpieczeń. Typ obiektu zabezpieczeń zależy od typu elementu.

Uwagi

To polecenie cmdlet jest dostępne tylko na platformach systemu 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.