Set-Acl

Modifica il descrittore di sicurezza di un elemento specificato, ad esempio un file o una chiave del Registro di sistema.

Sintassi

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>]

Descrizione

Questo cmdlet è disponibile solo nella piattaforma Windows.

Il Set-Acl cmdlet modifica il descrittore di sicurezza di un elemento specificato, ad esempio un file o una chiave del Registro di sistema, in modo che corrisponda ai valori in un descrittore di sicurezza fornito.

Per usare Set-Acl, usare il parametro Path o InputObject per identificare l'elemento il cui descrittore di sicurezza si desidera modificare. Usare quindi i parametri AclObject o SecurityDescriptor per fornire un descrittore di sicurezza con i valori da applicare. Set-Acl applica il descrittore di sicurezza fornito. Usa il valore del parametro AclObject come modello e modifica i valori nel descrittore di sicurezza dell'elemento in modo che corrispondano ai valori nel parametro AclObject .

Esempio

Esempio 1: Copiare un descrittore di sicurezza da un file a un altro

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

Questi comandi copiano i valori dal descrittore di sicurezza del file Dog.txt al descrittore di sicurezza del file Cat.txt. Quando i comandi sono stati eseguiti, i descrittori di sicurezza dei file Dog.txt e Cat.txt sono identici.

Il primo comando usa il Get-Acl cmdlet per ottenere il descrittore di sicurezza del file Dog.txt. L'operatore di assegnazione (=) archivia il descrittore di sicurezza nel valore della variabile $DogACL.

Il secondo comando usa Set-Acl per modificare i valori nell'ACL di Cat.txt ai valori in $DogACL.

Il valore del parametro Path è il percorso del file Cat.txt. Il valore del parametro AclObject è l'ACL del modello, in questo caso l'ACL di Dog.txt come salvato nella $DogACL variabile.

Esempio 2: Usare l'operatore pipeline per passare un descrittore

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

Questo comando è quasi uguale al comando dell'esempio precedente, ad eccezione del fatto che usa un operatore pipeline (|) per inviare il descrittore di sicurezza da un Get-Acl comando a un Set-Acl comando.

Il primo comando usa il Get-Acl cmdlet per ottenere il descrittore di sicurezza del file Dog.txt. L'operatore pipeline (|) passa un oggetto che rappresenta il descrittore di sicurezza Dog.txt al Set-Acl cmdlet .

Il secondo comando usa Set-Acl per applicare il descrittore di sicurezza di Dog.txt a Cat.txt. Dopo il completamento del comando, i descrittori di sicurezza dei file Dog.txt e Cat.txt saranno identici.

Esempio 3: Applicare un descrittore di sicurezza a più file

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

Questi comandi applicano i descrittori di sicurezza nel file File0.txt a tutti i file di testo nella C:\Temp directory e a tutte le relative sottodirectory.

Il primo comando ottiene il descrittore di sicurezza del file File0.txt nella directory corrente e usa l'operatore di assegnazione (=) per archiviarlo nella $NewACL variabile.

Il primo comando nella pipeline usa il cmdlet Get-ChildItem per ottenere tutti i file di testo nella C:\Temp directory. Il parametro Recurse estende il comando a tutte le sottodirectory di C:\temp. Il parametro Include limita i file recuperati a quelli con l'estensione del .txt nome file. Il parametro Force ottiene i file nascosti, che altrimenti verrebbero esclusi. Non è possibile usare c:\temp\*.txt, perché il parametro Recurse funziona nelle directory e non nei file.

L'operatore pipeline (|) invia gli oggetti che rappresentano i file recuperati al Set-Acl cmdlet , che applica il descrittore di sicurezza nel parametro AclObject a tutti i file nella pipeline.

In pratica, è consigliabile usare il parametro WhatIf con tutti i Set-Acl comandi che possono influire su più di un elemento. In questo caso, il secondo comando nella pipeline sarà Set-Acl -AclObject $NewAcl -WhatIf. Questo comando elenca i file che saranno interessati dal comando. Dopo aver esaminato il risultato, è possibile eseguire di nuovo il comando senza il parametro WhatIf .

Esempio 4: Disabilitare l'ereditarietà e mantenere le regole di accesso ereditate

$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

Questi comandi disabilitano l'ereditarietà dell'accesso dalle cartelle padre, mantenendo al tempo stesso le regole di accesso ereditate esistenti.

Il primo comando usa il Get-Acl cmdlet per ottenere il descrittore di sicurezza del file Dog.txt.

Vengono quindi create variabili per convertire le regole di accesso ereditate in regole di accesso esplicite. Per proteggere le regole di accesso associate a questa operazione dall'ereditarietà, impostare la $isProtected variabile su $true. Per consentire l'ereditarietà, impostare su $isProtected $false. Per altre informazioni, vedere Impostare la protezione delle regole di accesso.

Impostare la $preserveInheritance variabile su $true per mantenere le regole di accesso ereditate o $false rimuovere le regole di accesso ereditate. La protezione delle regole di accesso viene quindi aggiornata usando il metodo SetAccessRuleProtection().

L'ultimo comando usa Set-Acl per applicare il descrittore di sicurezza di a Dog.txt. Al termine del comando, gli ACL del Dog.txt ereditati dalla cartella Pets verranno applicati direttamente a Dog.txt e i nuovi criteri di accesso aggiunti a Pets non modificheranno l'accesso a Dog.txt.

Esempio 5: Concedere agli amministratori il controllo completo del file

$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

Questo comando concederà al gruppo BUILTIN\Administrators controllo completo del file Dog.txt.

Il primo comando usa il Get-Acl cmdlet per ottenere il descrittore di sicurezza del file Dog.txt.

Le variabili successive vengono create per concedere al gruppo BUILTIN\Administrators il controllo completo del file Dog.txt. Variabile $identity impostata sul nome di un account utente. La $fileSystemRights variabile impostata su FullControl e può essere uno qualsiasi dei valori FileSystemRights che specifica il tipo di operazione associata alla regola di accesso. La $type variabile impostata su "Consenti" per specificare se consentire o negare l'operazione. La $fileSystemAccessRuleArgumentList variabile è un elenco di argomenti da passare quando si crea il nuovo oggetto FileSystemAccessRule . Viene quindi creato un nuovo oggetto FileSystemAccessRule e l'oggetto FileSystemAccessRule viene passato al metodo SetAccessRule(), aggiunge la nuova regola di accesso.

L'ultimo comando usa Set-Acl per applicare il descrittore di sicurezza di a Dog.txt. Al termine del comando, il gruppo BUILTIN\Administrators avrà il controllo completo del Dog.txt.

Parametri

-AclObject

Specifica un elenco di controllo di accesso (ACL, Access Control List) con i valori di proprietà desiderati. Set-Acl modifica l'ACL dell'elemento specificato dal parametro Path o InputObject in modo che corrisponda ai valori nell'oggetto di sicurezza specificato.

È possibile salvare l'output di un Get-Acl comando in una variabile e quindi usare il parametro AclObject per passare la variabile o digitare un Get-Acl comando.

Tipo:Object
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-ClearCentralAccessPolicy

Rimuove i criteri di accesso centrale dall'elemento specificato.

A partire da Windows Server 2012, gli amministratori possono usare Active Directory e Criteri di gruppo per impostare criteri di accesso centrale per utenti e gruppi. Per altre informazioni, vedere Dynamic Controllo di accesso: Scenario Overview.For more information, see Dynamic Controllo di accesso: Scenario Overview.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Confirm

Richiede conferma prima di eseguire il cmdlet.

Tipo:SwitchParameter
Alias:cf
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Exclude

Omette gli elementi specificati. Il valore di questo parametro qualifica il parametro Path . Immettere un elemento o un modello di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

Tipo:String[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-Filter

Specifica un filtro nel formato o nel linguaggio del provider. Il valore di questo parametro qualifica il parametro Path . La sintassi del filtro, incluso l'uso dei caratteri jolly, dipende dal provider. I filtri sono più efficienti rispetto ad altri parametri, perché il provider li applica durante il recupero degli oggetti, invece di filtrare gli oggetti dopo il recupero.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-Include

Modifica solo gli elementi specificati. Il valore di questo parametro qualifica il parametro Path . Immettere un elemento o un modello di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

Tipo:String[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-InputObject

Modifica il descrittore di sicurezza dell'oggetto specificato. Immettere una variabile che contiene l'oggetto o un comando che lo ottiene.

Non è possibile inviare tramite pipe l'oggetto da modificare in Set-Acl. Usare invece il parametro InputObject in modo esplicito nel comando .

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Tipo:PSObject
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-LiteralPath

Modifica il descrittore di sicurezza dell'elemento specificato. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole ('). Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Tipo:String[]
Alias:PSPath
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-PassThru

Restituisce un oggetto che rappresenta il descrittore di sicurezza che è stato modificato. Per impostazione predefinita, il cmdlet non genera alcun output.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Path

Modifica il descrittore di sicurezza dell'elemento specificato. Immettere il percorso di un elemento, ad esempio un percorso di un file o di una chiave del Registro di sistema. I caratteri jolly sono consentiti.

Se si passa un oggetto di sicurezza a (usando i parametri AclObject o SecurityDescriptor o passando un oggetto di sicurezza da Get-Acl a Set-AclSet-Acl ) e si omette il parametro Path (nome e valore), Set-Acl usa il percorso incluso nell'oggetto di sicurezza.

Tipo:String[]
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:True

-WhatIf

Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.

Tipo:SwitchParameter
Alias:wi
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

ObjectSecurity

È possibile inviare tramite pipe un oggetto ACL a questo cmdlet.

CommonSecurityDescriptor

È possibile inviare tramite pipe un descrittore di sicurezza a questo cmdlet.

Output

None

Per impostazione predefinita, questo cmdlet non restituisce alcun output.

FileSecurity

Quando si usa il parametro PassThru , questo cmdlet restituisce un oggetto di sicurezza. Il tipo di oggetto di sicurezza dipende dal tipo di elemento.

Note

Questo cmdlet è disponibile solo nelle piattaforme Windows.

Il Set-Acl cmdlet è supportato dal file system di PowerShell e dai provider del Registro di sistema. È perciò possibile usarlo per modificare i descrittori di sicurezza di file, directory e chiavi del Registro di sistema.