3

Я пытаюсь добавить ключи реестра в Windows 10, используя скрипт 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

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

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

3 ответа3

2

Поскольку вы используете 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 для вызова вышеуказанных команд на удаленных компьютерах.

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 - это компьютер, для которого вы хотите редактировать реестр.

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

0

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

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

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .