Dado que las entradas del Registro son propiedades de claves y, como tales, no se pueden examinar directamente, hay que adoptar un enfoque ligeramente distinto para trabajar con ellas.
Mostrar las entradas del Registro
Hay muchas maneras distintas de examinar entradas del Registro. La manera más sencilla es obtener los nombres de propiedades asociados a una clave. Por ejemplo, para ver los nombres de las entradas en la clave del Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, utilice Get-Item. Las claves del Registro tienen una propiedad con el nombre genérico "Property", que muestra una lista de las entradas del Registro que contiene la clave. El comando siguiente selecciona la propiedad Property y expande los elementos para que se muestren en una lista:
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId
Para facilitar la lectura de las entradas del Registro, utilice 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) :
Todas las propiedades de la clave relativas a Windows PowerShell tienen el prefijo "PS", como PSPath, PSParentPath, PSChildName y PSProvider.
Puede usar la notación "." para hacer referencia a la ubicación actual. Puede usar Set-Location para cambiar primero al contenedor del Registro CurrentVersion:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Como alternativa, puede utilizar la unidad HKLM de PowerShell integrada con Set-Location:
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion
Después, puede usar la notación "." para la ubicación actual y crear una lista de las propiedades sin especificar una ruta de acceso completa:
PS> Get-ItemProperty -Path . ... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
Las rutas de acceso se pueden expandir de la misma manera que en el sistema de archivos; por tanto, desde esta ubicación puede obtener la lista de ItemProperty para HKLM:\SOFTWARE\Microsoft\Windows\Help usando Get-ItemProperty -Path ..\Help.
Obtener una sola entrada del Registro
Si desea recuperar una entrada específica de una clave del Registro, puede aplicar uno de varios enfoques posibles. En este ejemplo se busca el valor de DevicePath en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.
Con Get-ItemProperty, utilice el parámetro Path para especificar el nombre de la clave y el parámetro Name para especificar el nombre de la entrada 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
Este comando devuelve las propiedades estándar de Windows PowerShell, así como la propiedad DevicePath.
Nota: | |
Aunque Get-ItemProperty tiene los parámetros Filter, Include y Exclude, no se pueden utilizar para filtrar por nombre de propiedad. Estos parámetros hacen referencia a claves del Registro (que son rutas de acceso a elementos) y no a entradas del Registro (que son propiedades de elementos). |
Otra opción es utilizar la herramienta Reg.exe de la línea de comandos. Para obtener Ayuda acerca de reg.exe, escriba reg.exe /? en el símbolo del sistema. Para buscar la entrada DevicePath, utilice reg.exe como se muestra en el siguiente comando:
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
También puede usar el objeto WshShell COM para buscar algunas entradas del Registro, aunque este método no se puede usar con datos binarios de gran tamaño ni con nombres de entradas del Registro que contengan caracteres como "\". Anexe el nombre de la propiedad a la ruta de acceso al elemento con un separador \:
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath") %SystemRoot%\inf
Crear nuevas entradas del Registro
Para agregar una nueva entrada denominada "PowerShellPath" a la clave CurrentVersion, utilice New-ItemProperty con la ruta de acceso a la clave, el nombre de la entrada y el valor de la entrada. En este ejemplo, vamos a utilizar el valor de la variable $PSHome de Windows PowerShell, que almacena la ruta de acceso al directorio de instalación de Windows PowerShell.
Puede agregar la nueva entrada a la clave con el siguiente comando, que también devuelve información acerca de la nueva entrada:
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
El valor de PropertyType debe ser el nombre de un miembro de enumeración de Microsoft.Win32.RegistryValueKind de los que se muestran en la tabla siguiente:
Valor de PropertyType | Significado |
---|---|
Binary |
Datos binarios |
DWord |
Número de tipo UInt32 válido |
ExpandString |
Cadena que puede contener variables de entorno expandidas dinámicamente |
MultiString |
Cadena de varias líneas |
String |
Cualquier valor de cadena |
QWord |
8 bytes de datos binarios |
Nota: | |
Para agregar una entrada del Registro a varias ubicaciones, debe especificar una matriz de valores para el parámetro Path: |
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
También puede sobrescribir el valor de una entrada del Registro que ya existe agregando el parámetro Force a cualquier comando New-ItemProperty.
Cambiar el nombre de entradas del Registro
Para cambiar el nombre de la entrada PowerShellPath a "PSHome", utilice Rename-ItemProperty:
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome
Para mostrar el valor con el nuevo nombre, agregue el parámetro PassThru al comando.
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru
Eliminar entradas del Registro
Para eliminar las entradas del Registro PSHome y PowerShellPath, utilice Remove-ItemProperty:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath