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
Do tego polecenia cmdlet można przekazać obiekt ACL.
Do tego polecenia cmdlet można przekazać deskryptor zabezpieczeń.
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 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.