использование REG ADD в PowerShell для добавления раздела реестра с двойными кавычками

Я пытаюсь добавить разделы реестра Windows 10 с помощью сценария PowerShell. Ключ в реестре должен иметь двойные кавычки, включенные в поле данных, поэтому я понимаю, что должен избежать двойной кавычки с обратной косой чертой.

в следующем примере команда выдает синтаксическую ошибку при выполнении в Powershell, но отлично работает в окне командной строки:

REG ADD COMPUTER1HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesdcpm-notify /v ImagePath /t REG_EXPAND_SZ /d ""C:Program FilesDellCommandPowerManagerNotifyService.exe"" /f

Я попытался изменить escape-символы на ` и использовать """ и т. д., Но я не могу получить любую комбинацию для работы в PowerShell.

любые предложения с благодарностью.

17
задан GOB
27.03.2023 3:11 Количество просмотров материала 2666
Распечатать страницу

3 ответа

можно использовать [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 - это компьютер, для которого требуется изменить реестр.

обратите внимание, что я не проверял точный код, но я использовал нечто похожее на это в прошлом и работает без каких-либо проблем. Так что сначала запустите это на тестовой системе.

1
отвечен shinjijai 2023-03-28 10:59

Так как вы используете PowerShell, я бы предложил использовать New-Item и New-ItemProperty командлеты вместо 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

Примечание: этот пример предназначен для локальной машины. Чтобы запустить его с удаленного компьютера(ов), посмотрите в использовании Invoke-Command командлет PowerShell для вызова указанных выше команд на удаленных компьютерах.

2
отвечен Ƭᴇcʜιᴇ007 2023-03-28 13:16

самый простой ответ - использовать одинарные кавычки вокруг текста, чтобы двойные кавычки стали текстом сами по себе.

ваша команда станет:

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"
0
отвечен LPChip 2023-03-28 15:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх