Cambia il descrittore di sicurezza di un elemento specificato, come un file o una chiave di registro.
Sintassi
Set-Acl <String> <Object> >] >]
Set-Acl <PSObject> <Object> >] >]
Set-Acl -LiteralPath <String> <Object> >] >]
Descrizione
La cmdlet Set-Acl
cambia il descrittore di sicurezza di un elemento specificato, come un file o una chiave di registro, per farlo corrispondere ai valori di un descrittore di sicurezza fornito.
Per usare Set-Acl
, usate il parametro Path o InputObject per identificare l’elemento il cui descrittore di sicurezza volete cambiare. Poi, usate i parametri AclObject o SecurityDescriptor per fornire un descrittore di sicurezza che abbia i valori che volete applicare. Set-Acl
applica il descrittore di sicurezza fornito. Usa il valore del parametro AclObject come modello e cambia i valori nel descrittore di sicurezza dell’elemento per corrispondere ai valori nel parametro AclObject.
Esempi
Esempio 1: Copiare un descrittore di sicurezza da un file ad 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 completi, i descrittori di sicurezza dei file Dog.txt e Cat.txt sono identici.
Il primo comando usa il cmdlet Get-Acl
per ottenere il descrittore di sicurezza del file Dog.txt.L’operatore di assegnazione (=
) memorizza il descrittore di sicurezza nel valore della variabile $DogACL.
Il secondo comando usa Set-Acl
per cambiare 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 AclObjectparameter è l’ACL del modello, in questo caso, l’ACL di Dog.txt come salvato nella variabile $DogACL
.
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, tranne che usa l’operatore apipeline (|
) per inviare il descrittore di sicurezza da un comando Get-Acl
a un comando Set-Acl
.
Il primo comando usa il cmdlet Get-Acl
per ottenere il descrittore di sicurezza del file Dog.txt. L’operatorepipeline (|
) passa un oggetto che rappresenta il descrittore di sicurezza di Dog.txt alla cmdletSet-Acl
.
Il secondo comando usa Set-Acl
per applicare il descrittore di sicurezza di Dog.txt a Cat.txt.Quando il comando viene completato, le ACL dei file Dog.txt e Cat.txt sono identiche.
Esempio 3: applicare un descrittore di sicurezza a più file
$NewAcl = Get-Acl File0.txtGet-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl -AclObject $NewAcl
Questi comandi applicano i descrittori di sicurezza del file File0.txt a tutti i file di testo nella C:\Temp
directory e a tutte le sue sottodirectory.
Il primo comando ottiene il descrittore di sicurezza del file File0.txt nella directory corrente e usa l’operatore di assegnazione (=
) per memorizzarlo nella variabile $NewACL
.
Il primo comando nella pipeline usa il cmdlet Get-ChildItem per ottenere tutti i file di testo nellaC:\Temp
directory. Il parametro Recurse estende il comando a tutte le sottodirectory diC:\temp
. Il parametro Include limita i file recuperati a quelli con l’estensione .txt
. Il parametro Force ottiene i file nascosti, che altrimenti sarebbero esclusi. (Non potete usare c:\temp\*.txt
, perché il parametro Recurse funziona sulle directory, non sui file.)
L’operatore della 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, è meglio usare il parametro WhatIf con tutti i comandi Set-Acl
che possono interessare più di un elemento. In questo caso, il secondo comando nella pipeline sarebbeSet-Acl -AclObject $NewAcl -WhatIf
. Questo comando elenca i file che sarebbero influenzati dal comando. Dopo aver esaminato il risultato, puoi eseguire nuovamente il comando senza il parametro WhatIf.
Esempio 4: Disabilita l’ereditarietà e preserva 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 sono disabiliteranno l’ereditarietà dell’accesso dalle cartelle genitori, pur preservando le regole di accesso ereditate esistenti.
Il primo comando usa il cmdlet Get-Acl
per ottenere il descrittore di sicurezza del file Dog.txt.
In seguito, vengono create delle variabili per convertire le regole di accesso ereditate in regole di accesso esplicite. Per proteggere le regole d’accesso associate a questo dall’ereditarietà, impostate la variabile $isProtected
su$true
.Per permettere l’ereditarietà, impostate $isProtected
su $false
. Per maggiori informazioni, vedi protezione delle regole d’accesso. La variabile $preserveInheritance
impostata su $true
per preservare le regole d’accesso ereditate; false per rimuovere le regole d’accesso ereditate. Poi la protezione della regola d’accesso viene aggiornata usando il metodoSetAccessRuleProtection().
L’ultimo comando usa Set-Acl
per applicare il descrittore di sicurezza di a Dog.txt. Quando il comando viene completato, le ACL di Dog.txt che sono state ereditate dalla cartella Pets saranno applicate direttamente a Dog.txt, e le nuove politiche di accesso aggiunte a Pets non cambieranno l’accesso a Dog.txt.
Esempio 5: concedere agli amministratori il pieno controllo 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 il pieno controllo del file Dog.txt.
Il primo comando usa il cmdlet Get-Acl
per ottenere il descrittore di sicurezza del file Dog.txt.
Sono create le variabili successive per garantire al gruppo BUILTIN\Administrators il controllo completo del file Dog.txt. La variabile $identity
impostata sul nome dell’account auser. La variabile $fileSystemRights
impostata su FullControl, e può essere uno qualsiasi dei valori diFileSystemRights che specifica il tipo di operazione associata alla regola di accesso. La variabile $type
impostata su “Allow” specifica se permettere o negare l’operazione. La variabile $fileSystemAccessRuleArgumentList
è un elenco di argomenti da passare quando si crea il nuovo oggetto FileSystemAccessRule. Poi viene creato un nuovo oggetto FileSystemAccessRule, e l’oggetto FileSystemAccessRule viene passato al metodoSetAccessRule(), aggiunge la nuova regola di accesso.
L’ultimo comando usa Set-Acl
per applicare il descrittore di sicurezza di Dog.txt. Quando il comando viene completato, il gruppo BUILTIN\Administrators avrà il pieno controllo di Dog.txt.
Parameters
Specifica un ACL con i valori delle proprietà desiderate. Set-Acl
cambia l’ACL dell’elemento specificato dal parametro Path o InputObject in modo che corrisponda ai valori nell’oggetto di sicurezza specificato.
Puoi salvare l’output di un comando Get-Acl
in una variabile e poi usare il parametro AclObject per passare la variabile, o digitare un comando Get-Acl
.
Tipo: | Oggetto |
Posizione: | 1 |
Valore predefinito: | Nessuno |
Accetta ingresso pipeline: | Vero |
Accetta caratteri jolly: | Falso |
Rimuove la politica di accesso centrale dall’elemento specificato.
A partire da Windows Server 2012, gli amministratori possono usare Active Directory e Group Policy per impostare i criteri di accesso centrali per utenti e gruppi. Per ulteriori informazioni, vedere Controllo dinamico dell’accesso: Panoramica dello scenario.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Tipo: | SwitchParameter |
Posizione: | Nominato |
Valore predefinito: | Falso |
Accetta ingresso pipeline: | Falso |
Accetta caratteri jolly: | Falso |
Vi chiede conferma prima di eseguire il cmdlet.
Type: | SwitchParameter |
Alias: | cf |
Posizione: | Nominato |
Valore predefinito: | Falso |
Accetta input pipeline: | Falso |
Accetta caratteri jolly: | Falso |
Omette gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Inserisci un elemento o uno schema apath, come *.txt
. I caratteri jolly sono permessi.
Type: | String |
Posizione: | Named |
Valore predefinito: | None |
Accetta l’input della pipeline: | False |
Accetta caratteri jolly: | True |
Specifica un filtro nel formato o nella lingua del provider. Il valore di questo parametro qualifica il parametroPath. La sintassi del filtro, compreso l’uso di caratteri jolly, dipende dal fornitore. I filtri sono più efficienti di altri parametri, perché il provider li applica quando recupera gli oggetti, piuttosto che avere PowerShell che filtra gli oggetti dopo che sono stati recuperati.
Type: | Stringa |
Posizione: | Nominato |
Valore predefinito: | Nessuno |
Accetta ingresso pipeline: | False |
Accetta caratteri jolly: | True |
Cambia solo gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Inserisci un elemento o uno schema di percorso, come *.txt
. I caratteri jolly sono permessi.
Tipo: | Stringa |
Posizione: | Nominato |
Valore predefinito: | Nessuno |
Accetta ingresso pipeline: | False |
Accetta caratteri jolly: | True |
Cambia il descrittore di sicurezza dell’oggetto specificato. Inserisci una variabile che contenga l’oggetto o un comando che ottenga l’oggetto.
Non puoi inserire l’oggetto da cambiare in Set-Acl
. Invece, usa il parametro InputObject esplicitamente nel comando.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Tipo: | PSObject |
Posizione: | 0 |
Valore predefinito: | Nessuno |
Accetta input pipeline: | True |
Accetta caratteri jolly: | False |
Cambia il descrittore di sicurezza dell’elemento specificato. A differenza di Path, il valore del parametroLiteralPath è usato esattamente come viene digitato. Nessun carattere viene interpretato come un carattere jolly. Se il percorso include caratteri di escape, racchiudilo tra virgolette singole ('
).Le virgolette singole dicono a PowerShell di non interpretare alcun carattere come sequenze di escape.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Type: | String |
Alias: | PSPath |
Posizione: | Nominato |
Valore predefinito: | Nessuno |
Accetta ingresso pipeline: | Vero |
Accetta caratteri jolly: | Falso |
Ritorna un oggetto che rappresenta il descrittore di sicurezza modificato. Per impostazione predefinita, questo cmdlet non genera alcun output.
Tipo: | SwitchParameter |
Posizione: | Nominato |
Valore predefinito: | Nessuno |
Accetta ingresso pipeline: | Falso |
Accetta caratteri jolly: | Falso |
Cambia il descrittore di sicurezza dell’elemento specificato. Inserisci il percorso di un elemento, come il percorso di un file o di una chiave di registro. I caratteri jolly sono permessi.
Se passi un oggetto di sicurezza a Set-Acl
(usando i parametri AclObject o SecurityDescriptor o passando un oggetto di sicurezza da Get-Acl a Set-Acl
), e ometti il parametro Path (nome e valore), Set-Acl
usa il percorso che è incluso nell’oggetto di sicurezza.
Type: | String |
Position: | 0 |
Valore predefinito: | None |
Accetta ingresso pipeline: | Vero |
Accetta caratteri jolly: | Vero |
Mostra cosa accadrebbe se il cmdlet fosse eseguito. Il cmdlet non viene eseguito.
Type: | SwitchParameter |
Alias: | wi |
Posizione: | Nominato |
Valore predefinito: | False |
Accetta input pipeline: | False |
Accetta caratteri jolly: | False |
Inputs
System.Security.AccessControl.ObjectSecurity, System.Security.AccessControl.CommonSecurityDescriptor
Puoi inviare un oggetto ACL o un descrittore di sicurezza a Set-Acl
.
Outputs
FileSecurity
Di default, Set-Acl
non genera alcun output. Tuttavia, se usi il parametro Passthru, genera un oggetto di sicurezza. Il tipo di oggetto di sicurezza dipende dal tipo di oggetto.
Note
Questo cmdlet è disponibile solo su piattaforme Windows.
Il cmdlet Set-Acl
è supportato dal file system PowerShell e dai provider del registro. Come tale, puoi usarlo per cambiare i descrittori di sicurezza di file, directory e chiavi di registro.
- Get-Acl
- FileSystemAccessRule
- ObjectSecurity.SetAccessRuleProtection
- FileSystemRights