about_Registry_Provider
Nome provider
Registro
Unità
HKLM:
, HKCU:
Funzionalità
ShouldProcess, UseTransactions
Descrizione breve
Fornisce l'accesso alle chiavi, alle voci e ai valori del Registro di sistema in PowerShell.
Descrizione dettagliata
Il provider del Registro di sistema di PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare chiavi, voci e valori del Registro di sistema in PowerShell.
Le unità del Registro di sistema sono uno spazio dei nomi gerarchico contenente le chiavi e le sottochiavi del Registro di sistema nel computer. Le voci e i valori del Registro di sistema non sono componenti di tale gerarchia. Sono invece proprietà di ognuna delle chiavi.
Il provider del Registro di sistema supporta i cmdlet seguenti:
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Clear-ItemProperty
- Get-ItemProperty
- New-ItemProperty
- Remove-ItemProperty
- Set-ItemProperty
- Get-Acl
- Set-Acl
Tipi esposti da questo provider
Il provider del Registro di sistema restituisce i dati del Registro di sistema in uno dei due tipi seguenti:
- Microsoft.Win32.RegistryKey per le chiavi del Registro di sistema
- PSCustomObject per i valori del Registro di sistema
Esplorazione delle unità del Registro di sistema
Il provider del Registro di sistema espone l'archivio dati come due unità predefinite.
HKLM:
esegue il mapping all'hive delHKEY_LOCAL_MACHINE
Registro di sistemaHKCU:
esegue il mapping all'hive delHKEY_CURRENT_USER
Registro di sistema
Per usare il Registro di sistema, è possibile modificare il percorso dell'unità HKLM:
usando il comando seguente.
Set-Location HKLM:
Per tornare in un'unità di file system, digitare il relativo nome. Ad esempio, digitare il comando seguente:
Set-Location C:
È anche possibile usare il provider del Registro di sistema da qualsiasi altra unità di PowerShell. Per fare riferimento a una chiave del Registro di sistema da un'altra posizione, usare il nome dell'unità (HKLM:
, HKCU:
) nel percorso. Utilizzare una barra rovesciata () o una barra (\
/
) per indicare un livello dell'unità del Registro di sistema.
PS C:\> cd HKLM:\Software
Nota
PowerShell usa gli alias per consentire un modo familiare per usare i percorsi del provider. I comandi come dir
e sono alias per Get-ChildItem, cd
è un alias per Set-Location ed pwd
è un alias per Get-Location.ls
Questo ultimo esempio mostra un'altra sintassi di percorso che è possibile usare per spostarsi nel provider del Registro di sistema . Questa sintassi usa il nome del provider, seguito da due punti ::
. Questa sintassi consente di usare il nome HIVE completo, anziché il nome HKLM
dell'unità mappata.
cd "Registry::HKEY_LOCAL_MACHINE\Software"
Visualizzazione del contenuto delle chiavi del Registro di sistema
Il Registro di sistema è suddiviso in chiavi, sottochiavi e voci. Per altre informazioni sulla struttura del Registro di sistema, vedere Struttura del Registro di sistema.
In un'unità del Registro di sistema ogni chiave è un contenitore. Una chiave può contenere un numero qualsiasi di chiavi. Una chiave del Registro di sistema con una chiave padre è denominata sottochiave. È possibile usare Get-ChildItem
per visualizzare le chiavi del Registro di sistema e Set-Location
passare a un percorso di chiave.
I valori del Registro di sistema sono attributi di una chiave del Registro di sistema. Nell'unità del Registro di sistema vengono denominate Proprietà elemento. Una chiave del Registro di sistema può avere entrambe le chiavi figlio e le proprietà dell'elemento.
In questo esempio viene visualizzata la differenza tra Get-Item
e Get-ChildItem
. Quando si usa Get-Item
nella chiave del Registro di sistema "Spooler", è possibile visualizzarne le proprietà.
Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Name Property
---- --------
Spooler DependOnService : {RPCSS, http}
Description : @%systemroot%\system32\spoolsv.exe,-2
DisplayName : @%systemroot%\system32\spoolsv.exe,-1
ErrorControl : 1
FailureActions : {16, 14, 0, 0...}
Group : SpoolerGroup
ImagePath : C:\WINDOWS\System32\spoolsv.exe
ObjectName : LocalSystem
RequiredPrivileges : {SeTcbPrivilege, SeImpersonatePrivilege, ...
ServiceSidType : 1
Start : 2
Type : 27
Ogni chiave del Registro di sistema può avere anche sottochiavi. Quando si usa Get-Item
in una chiave del Registro di sistema, le sottochiavi non vengono visualizzate. Il Get-ChildItem
cmdlet mostra le sottochiavi della chiave "Spooler", incluse le proprietà di ogni sottochiave. Le proprietà delle chiavi padre non vengono visualizzate quando si usa Get-ChildItem
.
Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler
Name Property
---- --------
Performance Close : PerfClose
Collect : PerfCollect
Collect Timeout : 2000
Library : C:\Windows\System32\winspool.drv
Object List : 1450
Open : PerfOpen
Open Timeout : 4000
Security Security : {1, 0, 20, 128...}
Il Get-Item
cmdlet può essere usato anche nel percorso corrente. Nell'esempio seguente viene visualizzata la chiave del Registro di sistema "Spooler" e vengono recuperate le proprietà dell'elemento.
Il punto .
viene usato per indicare la posizione corrente.
cd HKLM:\System\CurrentControlSet\Services\Spooler
Get-Item .
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Name Property
---- --------
Spooler DependOnService : {RPCSS, http}
Description : @%systemroot%\system32\spoolsv.exe,-2
...
Per altre informazioni sui cmdlet illustrati in questa sezione, vedere gli articoli seguenti.
Visualizzazione dei valori delle chiavi del Registro di sistema
I valori delle chiavi del Registro di sistema vengono archiviati come proprietà di ogni chiave del Registro di sistema. Il Get-ItemProperty
cmdlet visualizza le proprietà della chiave del Registro di sistema usando il nome specificato. Il risultato è un PSCustomObject contenente le proprietà specificate.
Nell'esempio seguente viene utilizzato il Get-ItemProperty
cmdlet per visualizzare tutte le proprietà. L'archiviazione dell'oggetto risultante in una variabile consente di accedere al valore della proprietà desiderato.
$p = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
$p.DependOnService
RPCSS
http
Se si specifica un valore per il -Name
parametro, vengono selezionate le proprietà specificate e viene restituito PSCustomObject. Nell'esempio seguente viene illustrata la differenza nell'output quando si usa il -Name
parametro .
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem
BUILD : 17134.1
Installation Directory : C:\WINDOWS\system32\WBEM
MOF Self-Install Directory : C:\WINDOWS\system32\WBEM\MOF
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : Wbem
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
BUILD : 17134.1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : Wbem
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
A partire da PowerShell 5.0, il Get-ItemPropertyValue
cmdlet restituisce solo il valore della proprietà specificata.
Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
17134.1
Per altre informazioni sui cmdlet usati in questa sezione, vedere gli articoli seguenti.
Modifica dei valori delle chiavi del Registro di sistema
Il Set-ItemProperty
cmdlet imposta i valori del Registro di sistema associati a una chiave del Registro di sistema. Nell'esempio seguente viene Set-ItemProperty
usato per modificare il tipo di avvio del servizio spooler in manuale. Nell'esempio viene modificato di nuovo Automatic
StartType usando il Set-Service
cmdlet .
Get-Service spooler | Select-Object Name, StartMode
Name StartType
---- ---------
spooler Automatic
$path = "HKLM:\SYSTEM\CurrentControlSet\Services\Spooler\"
Set-ItemProperty -Path $path -Name Start -Value 3
Get-Service spooler | Select-Object Name, StartMode
Name StartType
---- ---------
spooler Manual
Set-Service -Name Spooler -StartupType Automatic
Ogni chiave del Registro di sistema ha un valore predefinito . È possibile modificare il default
valore di una chiave del Registro di sistema con Set-Item
o Set-ItemProperty
.
Set-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name "(default)" -Value "one"
Set-Item -Path HKLM:\SOFTWARE\Contoso -Value "two"
Per altre informazioni sui cmdlet usati in questa sezione, vedere gli articoli seguenti.
Creazione di chiavi e valori del Registro di sistema
Il New-Item
cmdlet crea nuove chiavi del Registro di sistema con un nome specificato.
È anche possibile usare la mkdir
funzione , che chiama internamente il New-Item
cmdlet .
mkdir ContosoCompany
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
ContosoCompany
È possibile usare il New-ItemProperty
cmdlet per creare valori in una chiave del Registro di sistema specificata. Nell'esempio seguente viene creato un nuovo valore DWORD nella chiave del Registro di sistema ContosoCompany.
$path = "HKLM:\SOFTWARE\ContosoCompany"
New-ItemProperty -Path $path -Name Test -Type DWORD -Value 1
Nota
Esaminare la sezione parametri dinamici in questo articolo per altri valori di tipo consentiti.
Per informazioni dettagliate sull'utilizzo dei cmdlet, vedere New-ItemProperty.
Copia di chiavi e valori del Registro di sistema
Nel provider del Registro di sistema usare il Copy-Item
cmdlet copia le chiavi e i valori del Registro di sistema. Usare il Copy-ItemProperty
cmdlet per copiare solo i valori del Registro di sistema.
Il comando seguente copia la chiave del Registro di sistema "Contoso" e le relative proprietà nel percorso HKLM:\Software\Fabrikam
specificato.
Copy-Item
crea la chiave di destinazione se non esiste. Se la chiave di destinazione esiste, Copy-Item
crea un duplicato della chiave di origine come elemento figlio (sottochiave) della chiave di destinazione.
Copy-Item -Path HKLM:\Software\Contoso -Destination HKLM:\Software\Fabrikam
Il comando seguente usa il Copy-ItemProperty
cmdlet per copiare il valore "Server" dalla chiave "Contoso" alla chiave "Fabrikam".
$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Copy-ItemProperty -Path $source -Destination $dest -Name Server
Per altre informazioni sui cmdlet usati in questa sezione, vedere gli articoli seguenti.
Spostamento di chiavi e valori del Registro di sistema
I Move-Item
cmdlet e Move-ItemProperty
si comportano come le controparti "Copy". Se la destinazione esiste, Move-Item
sposta la chiave di origine sotto la chiave di destinazione. Se la chiave di destinazione non esiste, la chiave di origine viene spostata nel percorso di destinazione.
Il comando seguente sposta la chiave "Contoso" nel percorso HKLM:\SOFTWARE\Fabrikam
.
Move-Item -Path HKLM:\SOFTWARE\Contoso -Destination HKLM:\SOFTWARE\Fabrikam
Questo comando sposta tutte le proprietà da HKLM:\SOFTWARE\ContosoCompany
a HKLM:\SOFTWARE\Fabrikam
.
$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Move-ItemProperty -Path $source -Destination $dest -Name *
Per altre informazioni sui cmdlet usati in questa sezione, vedere gli articoli seguenti.
Ridenominazione di chiavi e valori del Registro di sistema
È possibile rinominare chiavi e valori del Registro di sistema esattamente come file e cartelle.
Rename-Item
rinomina le chiavi del Registro di sistema, mentre Rename-ItemProperty
rinomina i valori del Registro di sistema.
$path = "HKLM:\SOFTWARE\Contoso"
Rename-ItemProperty -Path $path -Name ContosoTest -NewName FabrikamTest
Rename-Item -Path $path -NewName Fabrikam
Modifica dei descrittori di sicurezza
È possibile limitare l'accesso alle chiavi del Registro di sistema usando i Get-Acl
cmdlet e Set-Acl
. Nell'esempio seguente viene aggiunto un nuovo utente con controllo completo alla chiave del HKLM:\SOFTWARE\Contoso
Registro di sistema.
$acl = Get-Acl -Path HKLM:\SOFTWARE\Contoso
$rule = New-Object System.Security.AccessControl.RegistryAccessRule `
("CONTOSO\jsmith", "FullControl", "Allow")
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path HKLM:\SOFTWARE\Contoso
Per altri esempi e dettagli sull'utilizzo dei cmdlet, vedere gli articoli seguenti.
Rimozione e cancellazione di chiavi e valori del Registro di sistema
È possibile rimuovere gli elementi contenuti usando Remove-Item
. Viene richiesto di confermare la rimozione se l'elemento contiene altri elementi. Nell'esempio seguente viene eseguito un tentativo di eliminazione di una chiave HKLM:\SOFTWARE\Contoso
.
dir HKLM:\SOFTWARE\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Contoso
Name Property
---- --------
ChildKey
Remove-Item -Path HKLM:\SOFTWARE\Contoso
Confirm
The item at HKLM:\SOFTWARE\Contoso has children and the -Recurse
parameter wasn't specified. If you continue, all children will be removed
with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
Per eliminare gli elementi contenuti senza richiedere conferma, specificare il -Recurse
parametro .
Remove-Item -Path HKLM:\SOFTWARE\Contoso -Recurse
Se si desidera rimuovere tutti gli elementi all'interno HKLM:\SOFTWARE\Contoso
ma non HKLM:\SOFTWARE\Contoso
in sé, utilizzare una barra \
rovesciata finale seguita da un carattere jolly.
Remove-Item -Path HKLM:\SOFTWARE\Contoso\* -Recurse
Questo comando elimina il valore del Registro di sistema "ContosoTest" dalla chiave del HKLM:\SOFTWARE\Contoso
Registro di sistema.
Remove-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name ContosoTest
Clear-Item
cancella tutti i valori del Registro di sistema per una chiave. Nell'esempio seguente vengono cancellati tutti i valori dalla chiave del HKLM:\SOFTWARE\Contoso
Registro di sistema. Per cancellare solo una proprietà specifica, utilizzare Clear-ItemProperty
.
Get-Item .\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
Contoso Server : {a, b, c}
HereString : {This is text which contains
newlines. It also contains "quoted" strings}
(default) : 1
Clear-Item .\Contoso\
Get-Item .\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
Contoso
Per altri esempi e dettagli sull'utilizzo dei cmdlet, vedere gli articoli seguenti.
Parametri dinamici
I parametri dinamici sono parametri cmdlet aggiunti da un provider di PowerShell e sono disponibili solo quando il cmdlet viene usato nell'unità abilitata per il provider.
Digitare <Microsoft.Win32.RegistryValueKind>
Stabilisce o cambia il tipo di dati di un valore del Registro di sistema. Il valore predefinito è String
(REG_SZ).
Questo parametro funziona come progettato nel cmdlet Set-ItemProperty . È disponibile anche nel cmdlet Set-Item nelle unità del Registro di sistema, ma non ha alcun effetto.
String
- Usato per i valori REG_SZ. Passare un[System.String]
oggetto al parametro Value .ExpandString
- Usato per i valori REG_EXPAND_SZ. Passare un[System.String]
oggetto al parametro Value . La stringa deve contenere riferimenti non espansi alle variabili di ambiente espanse quando viene recuperato il valore.Binary
- Usato per i valori REG_BINARY. Passare un[System.Byte[]]
oggetto al parametro Value .DWord
- Usato per i valori REG_DWORD. Passare un[System.Int32]
oggetto al parametro Value .MultiString
- Usato per REG_MULTI_SZ valori. Passare un[System.String[]]
oggetto al parametro Value .QWord
- Usato per i valori REG_QWORD. Passare un[System.Int64]
oggetto al parametro Value .Unknown
- Indica un tipo di dati del Registro di sistema non supportato, ad esempio REG_RESOURCE_LIST valori.
Uso della pipeline
I cmdlet del provider accettano l'input della pipeline. È possibile usare la pipeline per semplificare l'attività inviando i dati del provider da un cmdlet a un altro cmdlet del provider. Per altre informazioni su come usare la pipeline con i cmdlet del provider, vedere i riferimenti ai cmdlet forniti in questo articolo.
Visualizzazione delle informazioni della Guida
A partire da Windows PowerShell 3.0, è possibile ottenere argomenti della Guida personalizzati per i cmdlet del provider che ne illustrano il comportamento in un'unità di file system.
Per ottenere gli argomenti della Guida personalizzati per l'unità del file system, eseguire un Get-Help
comando in un'unità del file system o usare il parametro Path per specificare un'unità del file system.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM: