Set-Acl

Modul: Microsoft.PowerShell.Security

Änder säkerhetsbeskrivningen för ett angivet objekt, t.ex. en fil eller en registernyckel.

Syntax

Set-Acl <String> <Object> >] >] 
Set-Acl <PSObject> <Object> >] >] 
Set-Acl -LiteralPath <String> <Object> >] >] 

Description

Cmdletten Set-Acl ändrar säkerhetsdeskriptorn för ett specificerat objekt, t.ex. en fil eller en registernyckel, så att den matchar värdena i en säkerhetsdeskriptor som du anger.

För att använda Set-Acl använder du parametern Path eller InputObject för att identifiera det objekt vars säkerhetsdeskriptor du vill ändra. Använd sedan parametrarna AclObject eller SecurityDescriptor för att tillhandahålla en säkerhetsdeskriptor som har de värden du vill tillämpa. Set-Acl tillämpar den säkerhetsbeskrivning som tillhandahålls. Den använder värdet i parametern AclObject som modell och ändrar värdena i objektets säkerhetsdeskriptor för att matcha värdena i parametern AclObject.

Exempel

Exempel 1: Kopiera en säkerhetsdeskriptor från en fil till en annan

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

Dessa kommandon kopierar värdena från säkerhetsdeskriptorn i filen Dog.txt till säkerhetsdeskriptorn i filen Cat.txt. När kommandona är färdiga är säkerhetsdeskriptorerna för filerna Dog.txt och Cat.txt identiska.

I det första kommandot används cmdlet Get-Acl för att hämta säkerhetsdeskriptorn för filen Dog.txt.Tilldelningsoperatorn (=) lagrar säkerhetsdeskriptorn i värdet på variabeln $DogACL.

Det andra kommandot använder Set-Acl för att ändra värdena i ACL för Cat.txt till värdena i$DogACL.

Värdet på Path-parametern är sökvägen till Cat.txt-filen. Värdet på parametern AclObjectparameter är modellens ACL, i det här fallet ACL för Dog.txt som sparats i variabeln $DogACL.

Exempel 2: Använd pipelineoperatorn för att skicka en deskriptor

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

Det här kommandot är nästan detsamma som kommandot i det föregående exemplet, förutom att det använder apipelineoperatorn (|) för att skicka säkerhetsdeskriptorn från ett Get-Acl-kommando till ett Set-Acl-kommando.

Det första kommandot använder Get-Acl-cmdletten för att hämta säkerhetsdeskriptorn för filen Dog.txt. Operatörenpipeline (|) skickar ett objekt som representerar säkerhetsdeskriptorn Dog.txt till cmdletSet-Acl.

Det andra kommandot använder Set-Acl för att tillämpa säkerhetsdeskriptorn för Dog.txt på Cat.txt.När kommandot avslutas är ACL:erna för filerna Dog.txt och Cat.txt identiska.

Exempel 3: Tillämpa en säkerhetsdeskriptor på flera filer

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

Dessa kommandon tillämpar säkerhetsdeskriptorerna i File0.txt-filen på alla textfiler i katalogen C:\Temp och alla dess underkataloger.

Det första kommandot hämtar säkerhetsbeskrivningen för filen File0.txt i den aktuella katalogen och använder tilldelningsoperatorn (=) för att lagra den i variabeln $NewACL.

Det första kommandot i pipeline använder cmdlet Get-ChildItem för att hämta alla textfiler i katalogen C:\Temp. Parametern Recurse utökar kommandot till alla underkataloger iC:\temp. Parametern Include begränsar de hämtade filerna till de filer som har filnamnstillägget .txt. Parametern Force hämtar dolda filer som annars skulle uteslutas. (Du kan inte använda c:\temp\*.txt eftersom parametern Recurse fungerar på kataloger, inte på filer.)

Pipelineoperatören (|) skickar objekten som representerar de hämtade filerna till Set-Aclcmdlet, som tillämpar säkerhetsdeskriptorn i parametern AclObject på alla filer i pipelinen.

I praktiken är det bäst att använda WhatIf-parametern med alla Set-Acl-kommandon som kan påverka mer än ett objekt. I det här fallet skulle det andra kommandot i pipeline varaSet-Acl -AclObject $NewAcl -WhatIf. Detta kommando listar de filer som skulle påverkas avkommandot. När du har granskat resultatet kan du köra kommandot igen utan WhatIf-parametern.

Exempel 4: Inaktivera arv och bevara nedärvda åtkomstregler

$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

De här kommandona inaktiverar åtkomstarv från överordnade mappar, samtidigt som de befintliga nedärvda åtkomstreglerna bevaras.

I det första kommandot används cmdlet Get-Acl för att hämta säkerhetsbeskrivningen för filen Dog.txt.

Nästan skapas variabler för att konvertera de nedärvda åtkomstreglerna till explicita åtkomstregler. För att skydda de åtkomstregler som är kopplade till detta från arv ställer du in variabeln $isProtected till$true. för att tillåta arv ställer du in $isProtected till $false. Mer information finns i avsnittetSätt skydd för åtkomstregler.Variabeln $preserveInheritance är satt till $true för att bevara nedärvda åtkomstregler; false för att ta bort nedärvda åtkomstregler. Därefter uppdateras åtkomstregelskyddet med hjälp av metodenSetAccessRuleProtection().

Det sista kommandot använder Set-Acl för att tillämpa säkerhetsbeskrivningen av till Dog.txt. När kommandot avslutas kommer ACL:erna för Dog.txt som ärvdes från mappen Pets att tillämpas direkt på Dog.txt, och nya åtkomstregler som läggs till i Pets kommer inte att ändra åtkomsten till Dog.txt.

Exempel 5: Ge administratörer full kontroll över filen

$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

Detta kommando kommer att ge gruppen BUILTIN\Administrators full kontroll över Dog.txt-filen.

Det första kommandot använder cmdlet Get-Acl för att hämta säkerhetsbeskrivningen för filen Dog.txt.

Nästa variabler skapas för att ge gruppen BUILTIN\Administrators full kontroll över filen Dog.txt. Variabeln $identity sätts till namnet på auser-kontot. Variabeln $fileSystemRights är inställd på FullControl och kan vara något av värdena förFileSystemRights som anger den typ av åtgärd som är kopplad till åtkomstregeln. Variabeln $type är satt till ”Allow” för att ange om åtgärden ska tillåtas eller nekas. Variabeln $fileSystemAccessRuleArgumentList är en argumentlista som ska skickas när det nya FileSystemAccessRule-objektet skapas. Sedan skapas ett nyttFileSystemAccessRule-objekt och FileSystemAccessRule-objektet skickas till metodenSetAccessRule(), som lägger till den nya åtkomstregeln.

Det sista kommandot använder Set-Acl för att tillämpa säkerhetsbeskrivningen av till Dog.txt. När kommandot avslutas har gruppen BUILTIN\Administratörer full kontroll över Dog.txt.

Parameters

-AclObject

Anger en ACL med de önskade egenskapsvärdena. Set-Acl ändrar ACL för objektet som anges med parametern Path eller InputObject för att matcha värdena i det angivna säkerhetsobjektet.

Du kan spara utdata från ett Get-Acl-kommando i en variabel och sedan använda AclObjectparametern för att skicka över variabeln eller skriva ett Get-Acl-kommando.

Typ: Objekt
Position: 1
Standardvärde: Inget
Acceptera inmatning från pipeline: True
Acceptera jokertecken: False
-ClearCentralAccessPolicy

Remsätter den centrala åtkomstpolicyn från det angivna objektet.

Med början i Windows Server 2012 kan administratörer använda Active Directory och Grupprincip för att ställa in centrala åtkomstprinciper för användare och grupper. Mer information finns iDynamisk åtkomstkontroll:

Den här parametern infördes i Windows PowerShell 3.0.

Typ: SwitchParameter
Position: Named
Standardvärde: False
Acceptera inmatning från pipeline: False
Acceptera jokertecken: False

-Confirm

Förfrågar om du vill ha en bekräftelse innan du kör cmdlet.

Typ: SwitchParameter
Alias: cf
Position: Named
Standardvärde: False
Accept pipeline input: False
Accept wildcard characters: Falskt
-Exkludera

Omfattar de angivna objekten. Värdet för den här parametern är ett villkor för parametern Path. Ange ett path-element eller ett mönster, till exempel *.txt. Jokertecken är tillåtna.

Typ: Sträng
Position: Namn
Standardvärde: Ingen
Accepterar inmatning från pipeline: False
Accept wildcard characters: True
-Filter

Anger ett filter i leverantörens format eller språk. Värdet för den här parametern kvalificerar parameternPath. Syntaxen för filtret, inklusive användningen av jokertecken, beror på leverantören. Filter är effektivare än andra parametrar, eftersom leverantören tillämpar dem när den hämtar objekten i stället för att PowerShell ska filtrera objekten efter att de har hämtats.

Type: String
Position: Named
Standardvärde: None
Acceptera ingångsvärden för pipeline: False
Accept wildcard characters: True
-Include

Ändrar endast de angivna objekten. Värdet för den här parametern är ett villkor för parametern Path.Ange ett sökvägselement eller ett mönster, t.ex. *.txt. Jokertecken är tillåtna.

Typ: Sträng
Position: Namn
Standardvärde: Ingen
Accepterar inmatning från pipeline: False
Acceptera jokertecken: True
-InputObject

Ändar säkerhetsbeskrivningen för det angivna objektet. Ange en variabel som innehåller objektet ett kommando som hämtar objektet.

Du kan inte lägga objektet som ska ändras i röret till Set-Acl. Använd istället parametern InputObjectexplicit i kommandot.

Den här parametern infördes i Windows PowerShell 3.0.

Typ: PSObject
Position: 0
Standardvärde: Ingen
Acceptera inmatning i pipeline: True
Acceptera jokertecken: False
-LiteralPath

Ändar säkerhetsbeskrivningen för det angivna objektet. Till skillnad från Path används värdet av parameternLiteralPath exakt så som det är skrivet. Inga tecken tolkas somwildcards. Om sökvägen innehåller escape-tecken ska du omsluta den med enkla citattecken (').Enkla citattecken talar om för PowerShell att inga tecken ska tolkas som escape-sekvenser.

Den här parametern infördes i Windows PowerShell 3.0.

Type: String
Aliases: PSPath
Position: Named
Standardvärde: None
Acceptera inmatning från pipeline: True
Acceptera jokertecken: False
-Passthru

Returnerar ett objekt som representerar den säkerhetsdeskriptor som ändrades. Som standard genererar det här cmdletet inget utdata.

Typ: SwitchParameter
Position: Namngiven
Standardvärde: Ingen
Acceptera inmatning från pipeline: False
Accept wildcard characters: False
-Path

Ändar säkerhetsbeskrivningen för det angivna objektet. Ange sökvägen till ett objekt, t.ex. en sökväg till en fil eller registernyckel. Jokertecken är tillåtna.

Om du skickar ett säkerhetsobjekt till Set-Acl (antingen genom att använda parametrarna AclObject ellerSecurityDescriptor eller genom att skicka ett säkerhetsobjekt från Get-Acl till Set-Acl) och du utelämnar Path-parametern (namn och värde), använder Set-Acl den sökväg som ingår i dessa säkerhetsobjekt.

Typ: Sträng
Position: 0
Standardvärde: Ingen
Acceptera inmatning från pipeline: True
Accept wildcard characters: True
-WhatIf

Visar vad som skulle hända om cmdlet körs. Cmdletten körs inte.

Typ: SwitchParameter
Alias: wi
Position: Named
Standardvärde: False
Accept pipeline input: False
Accept wildcard characters: False

Inputs

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

Du kan leda ett ACL-objekt eller en säkerhetsbeskrivare till Set-Acl.

Outputs

FileSecurity

Som standard genererar Set-Acl ingen utdata. Om du använder parametern Passthru genererar den dock ett säkerhetsobjekt. Säkerhetsobjektets typ beror på objektets typ.

Notiser

Denna cmdlet är endast tillgänglig på Windows-plattformar.

Cmdletten Set-Acl stöds av PowerShell-filsystemet och registerleverantörerna. Därför kan du använda den för att ändra säkerhetsbeskrivningarna för filer, kataloger och registernycklar.

  • Get-Acl
  • FileSystemAccessRule
  • ObjectSecurity.SetAccessRuleProtection
  • FileSystemRights

Lämna ett svar

Din e-postadress kommer inte publiceras.