我正在尝试使用 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-Item
和New-ItemProperty
cmdlet 而不是 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
该命令将被呈现为原始命令。