Poiché le voci del Registro di sistema sono proprietà delle chiavi e non possono pertanto essere visualizzate direttamente, è necessario adottare un approccio leggermente diverso per poterle utilizzare.
Visualizzazione dell'elenco delle voci del Registro di sistema
Sono disponibili molti modi diversi per esaminare le voci del Registro di sistema. Quello più semplice consiste nell'ottenere i nomi delle proprietà associate a una chiave. Ad esempio, per visualizzare i nomi delle voci della chiave del Registro di sistema HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, utilizzare Get-Item. Le chiavi del Registro di sistema includono una proprietà caratterizzata dal nome generico "Property" che corrisponde a un elenco delle voci presenti nella chiave. Il comando seguente consente di selezionare la proprietà Property e di espandere gli elementi in modo che vengano visualizzati in un elenco:
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId
Per visualizzare le voci del Registro di sistema in un formato più leggibile, utilizzare Get-ItemProperty:
PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files CommonFilesDir : C:\Program Files\Common Files ProductId : 76487-338-1167776-22465 WallPaperDir : C:\WINDOWS\Web\Wallpaper MediaPath : C:\WINDOWS\Media ProgramFilesPath : C:\Program Files PF_AccessoriesName : Accessories (default) :
Le proprietà della chiave correlate a Windows PowerShell sono tutte precedute dal prefisso "PS", ad esempio PSPath, PSParentPath, PSChildName e PSProvider.
È possibile utilizzare la notazione "." per fare riferimento al percorso corrente. È possibile utilizzare Set-Location per passare dapprima al contenitore del Registro di sistema CurrentVersion:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
In alternativa, è possibile utilizzare la chiave HKLM PSDrive predefinita con Set-Location:
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion
È quindi possibile utilizzare la notazione "." per il percorso corrente per visualizzare le proprietà senza specificare un percorso completo:
PS> Get-ItemProperty -Path . ... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
Il processo di espansione del percorso è analogo a quello previsto nel file system, pertanto da questo percorso è possibile ottenere l'elenco di ItemProperty per HKLM:\SOFTWARE\Microsoft\Windows\Help utilizzando Get-ItemProperty -Path ..\Help.
Recupero di una singola voce del Registro di sistema
Se si desidera recuperare una voce specifica di una chiave del Registro di sistema, è possibile utilizzare uno dei diversi approcci possibili. In questo esempio il valore di DevicePath viene trovato in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.
Utilizzare Get-ItemProperty con il parametro Path per specificare il nome della chiave e con il parametro Name per specificare il nome della voce DevicePath.
PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf
Questo comando restituisce le proprietà standard di Windows PowerShell nonché la proprietà DevicePath.
Nota | |
Non è possibile utilizzare i parametri Filter, Include e Exclude di Get-ItemProperty per filtrare i risultati in base al nome della proprietà. Tali parametri fanno riferimento alle chiave del Registro di sistema, che sono percorsi degli elementi, non alle voci del Registro di sistema, che sono proprietà degli elementi. |
Un altro modo consiste nell'utilizzare l'utilità della riga di comando Reg.exe. Per la Guida di Reg.exe, digitare reg.exe /? al prompt dei comandi. Per individuare la voce DevicePath, utilizzare Reg.exe come illustrato nel comando seguente:
PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion DevicePath REG_EXPAND_SZ %SystemRoot%\inf
È inoltre possibile utilizzare l'oggetto WshShell COM per individuare alcune voci del Registro di sistema, sebbene questa soluzione non sia applicabile con grandi quantità di dati binari o con nomi di voci che includono caratteri quali "\". In tal caso accodare il nome della proprietà al percorso dell'elemento con un separatore \:
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath") %SystemRoot%\inf
Creazione di nuove voci del Registro di sistema
Per aggiungere una nuova voce denominata "PowerShellPath" alla chiave CurrentVersion, utilizzare New-ItemProperty con il percorso della chiave, il nome e il valore della voce. Per questo esempio verrà considerato il valore della variabile $PSHome di Windows PowerShell, in cui è archiviato il percorso della directory di installazione di Windows PowerShell.
Per aggiungere la nuova voce alla chiave, è possibile utilizzare il comando riportato di seguito che restituirà anche informazioni sulla nuova voce:
PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PowerShellPath : C:\Program Files\Windows PowerShell\v1.0
PropertyType deve corrispondere al nome di un membro dell'enumerazione Microsoft.Win32.RegistryValueKind incluso nella tabella seguente:
Valore di PropertyType | Significato |
---|---|
Binary |
Dati binari |
DWord |
Numero che corrisponde a un UInt32 valido |
ExpandString |
Stringa che contiene variabili di ambiente espanse in modo dinamico |
MultiString |
Stringa multirighe |
String |
Qualsiasi valore di stringa |
QWord |
8 byte di dati binari |
Nota | |
È possibile aggiungere una voce del Registro di sistema per più percorsi specificando una matrice di valori per il parametro Path: |
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
È inoltre possibile sovrascrivere il valore di una voce del Registro di sistema preesistente aggiungendo il parametro Force a qualsiasi comando New-ItemProperty.
Ridenominazione di voci del Registro di sistema
Per rinominare la voce PowerShellPath in "PSHome", utilizzare Rename-ItemProperty:
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome
Per visualizzare il valore rinominato, aggiungere il parametro PassThru al comando.
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru
Eliminazione di voci del Registro di sistema
Per eliminare le voci del Registro di sistema PSHome e PowerShellPath, utilizzare Remove-ItemProperty:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath