Как изменить значение ключа реестра с командной строки?
Не получаеться изменить значение реестра (нужно именно CMD или Powershell).
CMD не принимает значение ключа powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'" , выдает ошибку синтаксиса: ERROR: Invalid syntax.
А Powershell выдает ошибку агрумента.
Пример команды в CMD:
REG ADD HKCR\Microsoft.PowerShellScript.1\Shell\runas\command /v (Default) /t REG_SZ /d powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Ошибка:
New-ItemProperty : A positional parameter cannot be found that accepts argument '-Command if'.
At line:1 char:1
+ New-ItemProperty -Path HKCR:\Microsoft.PowerShellScript.1\Shell\runas ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-ItemProperty], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewItemPropertyCommand
& : The term '%1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:233
+ ... 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'""
+ ~~~~
+ CategoryInfo : ObjectNotFound: (%1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Что я делаю не так?
По вопросу - с кавычками разберитесь.
По жизни - не делайте так!
Цель у вас какая-то мутная.
Вместо того чтобы установить политики один раз как вам надо, вы городите какую-то дичь
Цель в том, что бы сделать возможным, запуск скрипта от имени админа, правой кнопкой мыши. Делаю для того что бы человек который далек от комп. грамоты без проблем запускал скрипт.
На счет кавычек, это вы про: powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'", то там все норм. Именно такое значение надо добавить, добавлял вручную - все работает.
Rampage1410, чтобы человек мог запускать скрипт от админа, надо просто под той учёткой, под которой он собирается что-то там запускать, один раз выполнить Set-ExecutionPolicy с необходимыми параметрами
Погуглить "как изменить ключ реестра из cmd" или "как изменить ключ реестра из powershell"
У вас не примеры - а какой-то бред.
В примере для cmd почему то вызывается powershell, которому передается командная строка как параметр, в примере с powershell - в общем тоже самое - но еще и командлет для создания ключей - New-ItemProperty, вместо командлета для изменения ключей реестра Set-ItemProperty.
Rampage1410, невнимательно первый раз посмотрел строку - нет не вызывается.
Показалось, что формируете reg add и передаете его на выполнение powershell через доп. параметр.
человек который далек от комп. грамоты без проблем запускал скрипт
а зачем такой человек вообще должен запускать скрипт, который вносит правки в реестр? Цель какая?
Запихните скрипт в GPO, автозапуск, планировщик...можно еще самому запускать удаленно через Invoke-Command или PSSession
Прикол в том что скрипт блочит установку всех устройств, кроме тех что в белом списке. Его надо запускать только по необходимости добавть новое устройство. Компов очень много по этому нужно сделать максимально автоматизировано.
Не, по задумке в реестр вносится правка, позволяющая этому челу запускать скрипты, но сделано это совершенно нечеловеческим образом. тот кто такое придумал, долго курил перед публикацией запрещённые вещества.
а автор почему-то решил что это хороший способ решить его проблему. и упорствует :)
MaxKozlov, ну да, правка реестра делается для того что бы запускать скрипт который будет блочить... Я просто больше не нашел способа как это сделать автоматом, а конектится к 100+ компам для правки реестра вручную чет нет желания)
Rampage1410, Если у вас 100+ компов, то наверное есть AD?
Set-ExecutionPolicy делается через GPO, там же настраивается Remoting
после этого можно запускать удалённо любые необходимые скрипты
Если AD нет, ремотинг можно настроить через psexec
просто запустить везде где надо C:\Windows\System32\winrm.cmd quickconfig /q
потом подключаться с -Authentication Nеgotiate и логинами-паролями из таблички, если они различные или одинаковым, если нет
Потом можно везде раскидать задачу, которая будет запускаться когда нужно с нужными правами и делать что нужно. Это если задача ваша не единоразовая.
MaxKozlov, в винде нет асоциации powersell с ps1, по этому не получится. Значение ключа powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'" делает асоциацию
Rampage1410, при наличии AD я бы пошел по пути GPO - все коды разрешенных устройств вносятся в политику (и туда же добавляются), политика привязывается к конкретному OU, в котором живут нужные компы, и ограничивается группой безопасности с разрешенными пользователями...
Rampage1410, так а зачем нужна ассоциация? Для того чтобы кто-то один раз выполнил ваш скрипт? вот для одного запуска скрипта просить юзера выполнить другой скрипт? Так он все равно выполнит его даблкликом и вынесет вам мозг :) потому что ваша ассоциация на sudo, а не на open.
Да и все эти -command if из дремучего леса, потому что у powershell есть отдельный параметр установки -executionpolicy и -file вместо -command
Так что самый правильный вариант не мучать себя и юзеров и настроит ремотинг.
Более странный, но вполне действенный - cmd запускающий powershell