首页 > 解决方案 > 如何使用 PowerShell CIM 在远程计算机上获取和/或设置注册表值?

问题描述

如何使用 PowerShell CIM 命令获取和/或设置远程计算机上的注册表值?我已验证 New-CimSession 连接正确,但找不到获取或设置注册表值的命令。

标签: powershellregistryremote-access

解决方案


您需要为此调用WMI 类Invoke-CimMethod的正确方法,例如StdRegProv

$computer = 'remotehost'
$hive     = [uint32]'0x80000002'  # HKLM
$subkey   = 'SOFTWARE\Foo'
$value    = 'bar'
$data     = 'baz'

Invoke-CimMethod -Computer $computer -Namespace 'root/cimv2' -Class 'StdRegProv' -MethodName 'SetStringValue' -Arguments @{
    'hDefKey'     = $hive
    'sSubKeyName' = $subkey
    'sValueName'  = $value
    'sValue'      = $data
}

但是,我建议不要使用 CIM 或 WMI,而是使用正确的.Net API

$computer = 'remotehost'
$hive     = 'LocalMachine'  # HKLM
$subkey   = 'SOFTWARE\Foo'
$value    = 'bar'
$data     = 'baz'

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($hive, $computer)
$key = $reg.OpenSubKey($subkey, $true)
$key.SetValue($value, $data, 'String')

推荐阅读