Utilizzo delle voci del Registro di sistema

Questo esempio si applica solo alle piattaforme Windows.

Poiché le voci del Registro di sistema sono proprietà di chiavi e, di conseguenza, non possono essere esplorate direttamente, è necessario adottare un approccio leggermente diverso quando si lavora con essi.

Elenco delle voci del Registro di sistema

Esistono molti modi diversi per esaminare le voci del Registro di sistema. Il modo più semplice consiste nell'ottenere i nomi di proprietà associati a una chiave. Ad esempio, per visualizzare i nomi delle voci nella chiave del Registro di sistema HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, usare Get-Item. Le chiavi del Registro di sistema hanno una proprietà con il nome generico "Property" che rappresenta un elenco di voci del Registro di sistema nella chiave. Il comando seguente seleziona la proprietà Property ed espande gli elementi in modo che vengano visualizzati in un elenco:

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, usare Get-ItemProperty:

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir          : C:\Program Files
CommonFilesDir           : C:\Program Files\Common Files
ProgramFilesDir (x86)    : C:\Program Files (x86)
CommonFilesDir (x86)     : C:\Program Files (x86)\Common Files
CommonW6432Dir           : C:\Program Files\Common Files
DevicePath               : C:\WINDOWS\inf
MediaPathUnexpanded      : C:\WINDOWS\Media
ProgramFilesPath         : C:\Program Files
ProgramW6432Dir          : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName             : Games
PSPath                   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows
PSChildName              : CurrentVersion
PSDrive                  : HKLM
PSProvider               : Microsoft.PowerShell.Core\Registry

Le proprietà correlate a Windows PowerShell per la chiave sono precedute tutte dal prefisso "PS", ad esempio PSPath, PSParentPath, PSChildName e PSProvider.

È possibile usare la notazione *.* per fare riferimento al percorso corrente. È possibile usare Set-Location per passare prima al contenitore del Registro di sistema CurrentVersion:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

In alternativa, è possibile usare psdrive predefinito HKLM: con Set-Location:

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

È quindi possibile usare la notazione . del percorso corrente per elencare le proprietà senza specificare un percorso completo:

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

L'espansione del percorso funziona come nel file system, quindi da questo percorso è possibile ottenere l'elenco ItemProperty per HKLM:\SOFTWARE\Microsoft\Windows\Help l'uso di Get-ItemProperty -Path ..\Help.

Recupero di una singola voce del Registro di sistema

Per recuperare una voce specifica di una chiave del Registro di sistema, è possibile usare uno dei diversi approcci disponibili. In questo esempio viene trovato il valore di DevicePath in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Usare Get-ItemProperty con il parametro Path per specificare il nome della chiave e il parametro Name per specificare il nome della voce DevicePath.

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath   : C:\WINDOWS\inf
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

Questo comando restituisce le proprietà standard di Windows PowerShell oltre alla proprietà DevicePath.

Nota

Anche se Get-ItemProperty dispone di parametri Filter, Include ed Exclude , non possono essere usati per filtrare in base al nome della proprietà. Questi parametri fanno riferimento a chiavi del Registro di sistema, che sono percorsi di elementi, e non a voci del Registro di sistema, che sono invece proprietà di elementi.

Un'altra opzione consiste nell'usare lo strumento da reg.exe riga di comando. Per informazioni su reg.exe, digitare reg.exe /? al prompt dei comandi. Per trovare la voce DevicePath , usare reg.exe come illustrato nel comando seguente:

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

È anche possibile usare l'oggetto COM WshShell per trovare alcune voci del Registro di sistema, anche se questo metodo non funziona con dati binari di grandi dimensioni o con nomi di voce del Registro di sistema che includono caratteri come barra rovesciata (\). Aggiungere il nome di proprietà al percorso dell'elemento con un separatore \:

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Impostazione di una singola voce del Registro di sistema

Per modificare una voce specifica di una chiave del Registro di sistema, è possibile usare uno dei diversi approcci disponibili. Questo esempio modificata voce Path in HKEY_CURRENT_USER\Environment. La voce Path specifica dove trovare i file eseguibili.

  1. Recuperare il valore corrente della voce Path tramite Get-ItemProperty.
  2. Aggiungere il nuovo valore, separandolo con ;.
  3. Usare Set-ItemProperty con la chiave, il nome della voce e il valore specificati per modificare la voce del Registro di sistema.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Nota

Anche se Set-ItemProperty dispone di parametri Filter, Include ed Exclude , non possono essere usati per filtrare in base al nome della proprietà. Questi parametri fanno riferimento a chiavi del Registro di sistema, che sono percorsi di elementi, e non a voci del Registro di sistema, che sono invece proprietà di elementi.

Un'altra opzione consiste nell'usare lo strumento da riga di comando Reg.exe. Per informazioni su reg.exe, digitare reg.exe /? al prompt dei comandi.

Nell'esempio seguente la voce Path viene modificata rimuovendo il percorso aggiunto nell'esempio precedente. Get-ItemProperty viene ancora usato per recuperare il valore corrente per evitare la necessità di analizzare la stringa restituita da reg query. I metodi SubString e LastIndexOf vengono usati per recuperare l'ultimo percorso aggiunto alla voce Path.

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

Creazione di nuove voci del Registro di sistema

Per aggiungere una nuova voce denominata "PowerShellPath" alla chiave CurrentVersion, usare New-ItemProperty con il percorso della chiave e il nome e il valore della voce. Per questo esempio, verrà usato il valore della variabile $PSHome di Windows PowerShell, in cui è archiviato il percorso della directory di installazione di Windows PowerShell.

È possibile aggiungere la nuova voce alla chiave usando il comando seguente e il comando restituisce anche informazioni sulla nuova voce:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
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
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType deve essere il nome di un membro dell'enumerazione Microsoft.Win32.RegistryValueKind della tabella seguente:

Valore di PropertyType Significato
Binario Dati binari
DWord Numero valido di UInt32
ExpandString Stringa che può contenere variabili di ambiente espanse dinamicamente
MultiString Stringa su più righe
String Qualsiasi valore di stringa
QWord 8 byte di dati binari

È possibile aggiungere una voce del Registro di sistema in più posizioni specificando una matrice di valori nel parametro Path:

New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

È anche possibile sovrascrivere un valore preesistente di una voce del Registro di sistema aggiungendo il parametro Force a qualsiasi comando New-ItemProperty.

Ridenominazione delle voci del Registro di sistema

Per rinominare la voce PowerShellPath in "PSHome", usare 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 delle voci del Registro di sistema

Per eliminare le voci del Registro di sistema PSHome e PowerShellPath, usare Remove-ItemProperty:

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath