在 PowerShell 中使用 REG ADD 添加带双引号的注册表项

在 PowerShell 中使用 REG ADD 添加带双引号的注册表项

我正在尝试使用 PowerShell 脚本将注册表项添加到 Windows 10。注册表中的键必须在数据字段中包含双引号,因此我理解必须使用反斜杠转义双引号。

以下示例命令在 Powershell 中执行时会引发语法错误,但在命令提示符窗口中执行正常:

REG ADD \\COMPUTER1\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dcpm-notify /v ImagePath /t REG_EXPAND_SZ /d "\"C:\Program Files\Dell\CommandPowerManager\NotifyService.exe\"" /f

我尝试将转义字符更改为 ` 并使用 """ 等,但无法在 PowerShell 中使用任何组合。

非常感谢您的任何建议。

答案1

您可以使用[Microsoft.Win32.RegistryKey]来添加密钥。

例如:

$RemoteReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$TargetComp)
$NewKey = $RemoteReg.OpenSubKey("SYSTEM\CurrentControlSet\Services\")
$NewKey.CreateSubKey('dcpm-notify`)
$NewValue = $RemoteReg.OpenSubKey("SYSTEM\CurrentControlSet\Services\dcpm-notify")
$NewValue.SetValue('ImagePath', 'C:\Program Files\Dell\CommandPowerManager\NotifyService.exe')

$TargetComp您要编辑注册表的计算机在哪里。

请注意,我还没有测试过确切的代码,但我以前使用过非常类似的代码,没有任何问题。因此,如果有问题,请先在测试系统上运行它。

答案2

由于您使用的是 PowerShell,我建议使用New-ItemNew-ItemPropertycmdlet 而不是 Reg.exe,因为它们允许您包含转义的引号。

例如:

$registryPath = "HKLM:\SYSTEM\CurrentControlSet\Services\dcpm-notify"
$name = "ImagePath"
$value = "`"C:\Program Files\Dell\CommandPowerManager\NotifyService.exe`""

# If registry path doesn't exist, create it.
If (-NOT (Test-Path $registryPath)) {
    New-Item $registryPath | Out-Null
}

New-ItemProperty -Path $registryPath `
    -Name $name `
    -Value $value `
    -PropertyType ExpandString `
    -Force | Out-Null

注意:此示例针对本地计算机。要针对远程计算机运行此示例,请查看使用调用命令PowerShell cmdlet 在远程计算机上调用上述命令。

答案3

最简单的答案就是使用单引号将文本括起来,这样双引号本身就变成了文本。

你的命令将会变成:

REG ADD \\COMPUTER1\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dcpm-notify /v ImagePath /t REG_EXPAND_SZ /d '"C:\Program Files\Dell\CommandPowerManager\NotifyService.exe"' /f

进一步解释一下:

Powershell 知道两种处理文本的方法。

$test = "This is a test"
$test2 = 'This is also a test'

因为上述方法有效,所以您可以这样做:

$test3 = 'This is "double quoted" text'
$test4 = "This is 'single quoted' text"

如果您需要一个同时包含这两种内容的字符串,则可以按如下方式完成:

$test5 = 'This is "double quoted" and ' + "'single quoted' text in one"

答案4

[已测试] 对于仍想在 powershell 中使用 reg add 的人,只需在反斜杠后添加 `。reg 命令需要 \",当你需要在条目的值中添加双引号时,powershell 会使用 ` 转义双引号

在 powershell 中运行时:

REG ADD \COMPUTER1\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dcpm-notify /v ImagePath /t REG_EXPAND_SZ /d "\`"C:\Program Files\Dell\CommandPowerManager\NotifyService.exe\`"" /f

该命令将被呈现为原始命令。

相关内容