In quanto elementi presenti nelle unità Windows PowerShell, le chiavi del Registro di sistema sono caratterizzate da una gestione simile a quella di file e cartelle. Una delle differenze principali è costituita dal fatto che ogni elemento in un'unità Windows PowerShell basata sul Registro di sistema è un contenitore, proprio come una cartella in un'unità del file system. Le voci del Registro di sistema e i valori ad esse associati sono tuttavia proprietà degli elementi e non elementi distinti.

Visualizzazione dell'elenco di tutte le sottochiavi di una chiave del Registro di sistema

Per visualizzare direttamente tutti gli elementi presenti in una chiave del Registro di sistema, utilizzare Get-ChildItem. Aggiungere il parametro facoltativo Force per visualizzare elementi nascosti o di sistema. Questo comando consente ad esempio di visualizzare gli elementi direttamente nell'unità di HKCU: di Windows PowerShell, che corrisponde all'hive del Registro di sistema HKEY_CURRENT_USER:

PS> Get-ChildItem -Path hkcu:\


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 AppEvents                      {}
  7  33 Console                        {ColorTable00, ColorTable01, ColorTab...
 25   1 Control Panel                  {Opened}
  0   5 Environment                    {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
  1   7 Identities                     {Last Username, Last User ...
  4   0 Keyboard Layout                {}
...

Si tratta delle chiavi di primo livello visibili in HKEY_CURRENT_USER nell'Editor del Registro di sistema (Regedit.exe).

È inoltre possibile specificare il percorso del Registro di sistema indicando il nome del provider Registry seguito da "::". Il nome completo del provider è Microsoft.PowerShell.Core\Registry, ma può essere abbreviato in Registry. Uno qualsiasi dei comandi seguenti consentiranno di visualizzare il contenuto direttamente in HKCU:

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

Questi comandi consentono di visualizzare l'elenco dei soli elementi contenuti in modo diretto, come il comando DIR di Cmd.exe o ls in una shell UNIX. Per visualizzare gli elementi contenuti, è necessario specificare il parametro Recurse. Per visualizzare tutte le chiavi del Registro di sistema incluse in HKCU, utilizzare il comando seguente. L'operazione può richiedere moltissimo tempo.

Get-ChildItem -Path hkcu:\ -Recurse

Get-ChildItem consente di eseguire operazioni di filtro complesse tramite i parametri Path, Filter, Include ed Exclude, ma tali parametri si basano in genere solo sul nome. Per eseguire operazioni di filtro complesse basate su altre proprietà degli elementi, è possibile utilizzare il cmdlet Where-Object. Il comando seguente consente di trovare tutte le chiavi incluse in HKCU:\Software per le quali sono disponibili non più di una sottochiave ed esattamente quattro valori:

Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Copia di chiavi

Per la copia viene utilizzato Copy-Item. Il comando seguente consente di copiare la chiave HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion e tutte le relative proprietà in HKCU:\, creando una nuova chiave denominata "CurrentVersion":

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

Se si esamina questa nuova chiave nell'editor del Registro di sistema oppure utilizzando Get-ChildItem, si noterà che nel nuovo percorso non sono presenti copie delle sottochiavi contenute. Per poter copiare tutto il contenuto di un contenitore, è necessario specificare il parametro Recurse. Per rendere ricorsivo il comando di copia precedente, utilizzare il comando seguente:

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse

Per eseguire copie del file system, è comunque possibile utilizzare altri strumenti già disponibili. In Windows PowerShell è possibile utilizzare qualsiasi utilità di modifica del Registro di sistema, inclusi reg.exe, regini.exe e regedit.exe, nonché oggetti COM che supportano la modifica del Registro di sistema, ad esempio WScript.Shell e la classe StdRegProv di WMI.

Creazione di chiavi

La procedura di creazione di nuove chiavi del Registro di sistema è più semplice rispetto a quella di creazione di un nuovo elemento in un file system. Poiché tutte le chiavi del Registro di sistema sono contenitori, non è necessario specificare il tipo dell'elemento, ma è sufficiente indicare un percorso esplicito, ad esempio:

New-Item -Path hkcu:\software\_DeleteMe

Per specificare una chiave, è inoltre possibile utilizzare un percorso basato su provider:

New-Item -Path Registry::HKCU\_DeleteMe

Eliminazione di chiavi

Il processo di eliminazione degli elementi è essenzialmente identico per tutti i provider. I comandi seguenti consentiranno di rimuovere elementi senza visualizzare nessun avviso:

Remove-Item -Path hkcu:\Software\_DeleteMe
Remove-Item -Path 'hkcu:\key with spaces in the name'

Rimozione di tutte le chiavi in una chiave specifica

Per rimuovere elementi contenuti, è possibile utilizzare Remove-Item, tuttavia verrà richiesto di confermare la rimozione se l'elemento contiene altri elementi. Se ad esempio si tenta di eliminare la sottochiave HKCU:\CurrentVersion creata, verrà visualizzato quanto segue:

Remove-Item -Path hkcu:\CurrentVersion

Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not 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 visualizzare alcun avviso, specificare il parametro -Recurse:

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Se si desidera rimuovere tutti gli elementi inclusi in HKCU:\CurrentVersion ma non tale chiave, è possibile utilizzare:

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse




Argomenti della Guida