Búsqueda de sitios web

PowerShell: obtenga, modifique, cree y elimine claves o parámetros del registro


El Editor del Registro (

regedit.exe

) y el

reg.exe

La utilidad de línea de comandos no son las únicas herramientas para acceder y administrar el registro en Windows. PowerShell proporciona una gran cantidad de herramientas para que el administrador interactúe con el registro. Con PowerShell, puede crear, modificar o eliminar una clave/parámetros de registro, buscar el valor y conectarse al registro en una computadora remota.

Navegue por el registro de Windows como un sistema de archivos con PowerShell

Trabajar con el registro en PowerShell es similar a trabajar con archivos comunes en un disco local. La principal diferencia es que, en este concepto, las claves de registro son análogas a los archivos y los parámetros de registro son las propiedades de estos archivos.

Muestre la lista de unidades disponibles en su computadora:

get-psdrive

Tenga en cuenta que entre las unidades (con letras de unidad asignadas) hay dispositivos especiales disponibles a través del Proveedor de registro: HKCU (HKEY_CURRENT_USER) y HKLM (HKEY_LOCAL_MACHINE). Puede navegar por el árbol de registro de la misma manera que navega por sus unidades. HKLM:\ y HKCU:\ se utilizan para acceder a una sección de registro específica.

cd HKLM:\
Dir -ErrorAction SilentlyContinue

Esos, puede acceder a la clave de registro y sus parámetros usando los mismos cmdlets de PowerShell que usa para administrar archivos y carpetas.

Para hacer referencia a las claves de registro, use cmdlets con xxx-Item:

  • Get-Item

    - obtener una clave de registro

  • New-Item

    — crear una nueva clave de registro

  • Remove-Item

    - eliminar una clave de registro

Los parámetros de registro se deben considerar como propiedades de la clave de registro (similar a las propiedades de archivo/carpeta). Los cmdlets xxx-ItemProperty se utilizan para administrar los parámetros del registro:

  • Get-ItemProperty

    - obtener el valor de un parámetro de registro

  • Set-ItemProperty

    - cambiar el valor de un parámetro de registro

  • New-ItemProperty

    - crear parámetro de registro

  • Rename-ItemProperty

    - cambiar el nombre del parámetro

  • Remove-ItemProperty

    - eliminar el parámetro de registro

Puede navegar a la clave de registro específica (por ejemplo, al responsable de la configuración de las actualizaciones automáticas del controlador) usando uno de los dos comandos:

cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

o

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

Obtenga un valor de parámetro de registro a través de PowerShell

Tenga en cuenta que los parámetros almacenados en la clave de registro no son objetos anidados, sino una propiedad de una clave de registro específica. Cualquier clave de registro puede tener cualquier número de parámetros.

Enumere el contenido de la clave de registro actual usando el comando:

dir

O

Get-ChildItem

El comando ha mostrado información sobre las claves de registro anidadas y sus propiedades. Pero no mostró información sobre el parámetro SearchOrderConfig, que es una propiedad de la clave actual.

Utilice el cmdlet Get-Item para obtener los parámetros de la clave de registro:

Get-Item .

O

Get-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Como puede ver, la clave DriverSearching tiene solo un parámetro: SearchOrderConfig con un valor de 1.

Para obtener el valor de un parámetro de clave de registro, use el cmdlet Get-ItemProperty.

$DriverUpdate = Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching’
$DriverUpdate.SearchOrderConfig

Obtuvimos que el valor del parámetro SearchOrderConfig es 1.

Cambiar el valor del registro con PowerShell

Para cambiar el valor del parámetro de registro SearchOrderConfig, use el cmdlet Set-ItemProperty:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0

Asegúrese de que el valor del parámetro haya cambiado:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig

¿Cómo crear una nueva clave o parámetro de registro con PowerShell?

Para crear una nueva clave de registro, use el comando New-Item. Vamos a crear una nueva clave con el nombre NewKey:

$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
New-Item -Path $HKCU_Desktop -Name NewKey

Ahora vamos a crear un nuevo parámetro en una nueva clave de registro. Supongamos que necesitamos crear un nuevo parámetro de cadena de tipo REG_SZ llamado SuperParamString y valor filetmp1.txt:

New-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString" -Value ”filetmp1.txt”  -PropertyType "String"

Puede utilizar los siguientes tipos de datos para los parámetros de registro:

  • String (REG_SZ)
  • ExpandString (REG_EXPAND_SZ)
  • MultiString (REG_MULTI_SZ)
  • Binary (REG_BINARY)
  • DWord (REG_DWORD)
  • Qword (REG_QWORD)
  • Unknown (unsupported registry data type)

Asegúrese de que la nueva clave y el nuevo parámetro hayan aparecido en el registro.

¿Cómo comprobar si existe una clave de registro?

Si necesita verificar si existe una clave de registro específica, use el cmdlet Test-Path:

Test-Path 'HKCU:\Control Panel\Desktop\NewKey'

El siguiente script de PowerShell verificará si existe un valor de registro específico y, de no ser así, lo creará.

regkey='HKCU:\Control Panel\Desktop\NewKey'
$regparam='testparameter'
if (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)
{ write-host 'The registry entry already exist' }
else
{ New-ItemProperty -Path $regkey -Name $regparam -Value ”a-d_test”  -PropertyType "String"  }

Con el cmdlet Copy-Item, puede copiar entradas de una clave de registro a otra:

$source='HKLM:\SOFTWARE\7-zip\'
$dest = 'HKLM:\SOFTWARE\backup'
Copy-Item -Path $source -Destination $dest -Recurse

Si desea copiar todo, incluidas las subclaves, agregue el interruptor -Recurse.

Eliminación de una clave o parámetro de registro

El comando Remove-ItemProperty se usa para eliminar un parámetro en la clave de registro. Eliminemos el parámetro SuperParamString creado anteriormente:

$HKCU_Desktop= "HKCU:\Control Panel\Desktop"
Remove-ItemProperty -Path $HKCU_Desktop\NewKey -Name "SuperParamString"

Puede eliminar la clave de registro completa con todo su contenido:

Remove-Item -Path $HKCU_Desktop\NewKey -Recurse

Nota.: el interruptor Recurse indica que todas las subclaves deben eliminarse recursivamente.

Para eliminar todos los elementos de la clave de registro (pero no la clave en sí):

Remove-Item -Path $HKCU_Desktop\NewKey\* -Recurse

¿Cómo cambiar el nombre de una clave de registro o un parámetro?

Puede cambiar el nombre del parámetro de registro con el comando:

Rename-ItemProperty -path ‘HKCU:\Control Panel\Desktop\NewKey’ -name "SuperParamString" -newname “OldParamString”

De la misma manera, puede cambiar el nombre de la clave de registro:

Rename-Item -path 'HKCU:\Control Panel\Desktop\NewKey' OldKey

Registro de búsqueda de palabras clave mediante PowerShell

PowerShell le permite buscar en el registro. Lo siguiente busca parámetros en HKCU:\Control Panel\Desktop, cuyos nombres contienen la tecla *dpi*.

$Path = (Get-ItemProperty ‘HKCU:\Control Panel\Desktop’)
$Path.PSObject.Properties | ForEach-Object {
If($_.Name -like '*dpi*'){
Write-Host $_.Name ' = ' $_.Value
}
}

Para encontrar una clave de registro con un nombre específico:

Get-ChildItem -path HKLM:\ -recurse -ErrorAction SilentlyContinue | Where-Object {$_.Name -like "*a-d*"}

Configuración de permisos de clave de registro con PowerShell

Puede obtener los permisos de la clave de registro actual mediante el cmdlet Get-ACL (el cmdlet Get-ACL también le permite administrar los permisos NTFS en archivos y carpetas).

$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'
$rights.Access.IdentityReference

En el siguiente ejemplo, modificaremos la ACL en esta clave de registro para otorgar acceso de escritura al grupo de Usuarios integrado.

Obtener permisos actuales:

$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Especifique el usuario o grupo al que desea conceder acceso:

$idRef = [System.Security.Principal.NTAccount]"BuiltIn\Users"

Seleccione el nivel de acceso:

$regRights = [System.Security.AccessControl.RegistryRights]::WriteKey

Establecer la configuración de herencia de permisos:

$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None

Tipo de acceso (Permitir/Denegar):

$acType = [System.Security.AccessControl.AccessControlType]::Allow

Crear una regla de acceso:

$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType)

Agregue una nueva regla a la ACL actual:

$rights.AddAccessRule($rule)

Aplicar nuevos permisos a la clave de registro:

$rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Asegúrese de que el nuevo grupo aparezca en la ACL de la clave de registro.

Obtener un valor de registro desde una computadora remota a través de PowerShell

PowerShell le permite acceder al registro de una computadora remota. Puede conectarse a una computadora remota usando WinRM (Invoke-Command o Enter-PSSession). Para obtener el valor de un parámetro de registro desde una computadora remota:

Invoke-Command -ComputerName srv-fs1 -ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}

O usando una conexión de registro remoto (el servicio RemoteRegistry debe estar habilitado)

$Server = "lon-fs1"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)
$RegKey= $Reg.OpenSubKey("System\Setup")
$RegValue = $RegKey.GetValue("WorkingDirectory")

Consejo. Si tiene que crear/modificar un determinado parámetro de registro en varias computadoras de dominio, es más fácil usar las funciones de GPO.

Así que hemos cubierto ejemplos típicos del uso de PowerShell para acceder y administrar las entradas del registro de Windows. Puede usarlos en sus scripts de automatización.

Artículos relacionados