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 $DogACL
pliku .
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 elementu Pets 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 |
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 filtrowania obiektów za pomocą 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ć 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 |
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 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 |
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
Do tego polecenia cmdlet można przekazać obiekt listy ACL.
Możesz przekazać deskryptor zabezpieczeń do tego polecenia cmdlet.
Dane wyjściowe
None
Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.
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 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.