
Есть ли способ запустить regedit на нескольких удаленных компьютерах без появления UAC на Windows 10? /s
Командная строка не работает на моем тестовом компьютере с Windows 10 (я был уверен, что она БУДЕТ работать на моих системах Win7, но большинство моих клиентских компьютеров работают на Win10).
В конечном итоге цель состоит в том, чтобы
- импортируйте reg-файл в HKLM, чтобы повысить уровень PowerShell executionPolicy до неограниченного,
- используйте Powershell для включения защиты/восстановления системы,
- используйте PowerShell, создайте точку восстановления и наконец
- импортируйте reg-файл, чтобы вернуть executionPolicy значение Restricted или RemoteSigned. (кстати, все это делается в качестве предварительной задачи по исправлению).
На моем тестовом компьютере все это работает хорошо, за исключением того, что regedit...даже с /s
параметром...не запускается без всплывающего окна UAC в Windows 10. Я видел это на своем тестовом компьютере с Win10.
Я попробовал запустить PowerShell с повышенными привилегиями через bat-файл:
powershell.exe -ExecutionPolicy Bypass -File .\MyScript.ps1
и
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy unrestricted -Force' -Verb RunAs}"
но оба эти действия не выполняются (т. е. доступ запрещен, политика выполнения PowerShell не повышена).
Импорт reg-файла и последующий запуск моего скрипта Powershell — это самое близкое к успеху, чего мне удалось достичь.
Я также пробовал это сделать через Sysinternals psexec, основываясь на других найденных решениях [например, вызов psexec reg.exe для импорта], но у него есть свой набор проблем (psexec требуется импортированный reg для EULA, так что та же проблема, а не решение).
Используя этот пример, я также попробовал выполнить следующую команду:
C:\Windows\System32\REG.exe ADD HKLM\\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Unrestricted /f
...Но это постоянно возвращается с "ОШИБКА: Неверное имя ключа". Я, вероятно, работаю над этим слишком долго (уже 3 дня) и просто нуждаюсь в еще одной паре глаз. Может ли кто-нибудь помочь?
решение1
Поскольку вы предприняли несколько разных попыток, на самом деле есть несколько проблем, на которые вы указали в своем сообщении, которые могут потребовать ответа. Вы не дали ясно понять, как вы запускаете любую из этих команд удаленно. Ни одна из показанных вами команд на самом деле ничего не делает на удаленном компьютере. Все они выполняются на локальном компьютере. Однако вы упомянули попытку PSExec.
Мне также не известны ситуации, когда UAC вмешивается в удаленное выполнение команд. Поэтому я могу только предположить, что вы запускаете команды на локальном компьютере и видите запросы UAC. Но вы делаете это в рамках подготовки к удаленному запуску команд.
Итак, я попытаюсь дать вам некоторую базовую поддержку удаленного выполнения, которая направит вас на правильный путь. Все удаленные выполнения команд требуют открытия определенных портов брандмауэра. Так что имейте это в виду, когда будете двигаться дальше.
Powershell уже имеет механизм удаленного выполнения команд/скриптов.
- Вы можете использовать
-ComputerName
переключатель для выполнения определенных команд на удаленной системе. - Вы можете начать интерактивный удаленный сеанс с помощью
Enter-PSSession <ComputerName>
иExit-PSSession
. - Вы можете использовать эту
Invoke-Command -ComputerName <ComputerName>
команду для удаленного запуска любого скрипта или команды.
Ни один из этих методов не подпадает под ограничение политики выполнения, если только вы не запустите интерактивный сеанс Powershell, а затем не попытаетесь выполнить скрипт.
Эти команды будут выполняться на удаленном компьютере с использованием вашей текущей учетной записи пользователя, вошедшего в систему. Если вы не являетесь администратором на удаленной машине, вам потребуется дополнительно предоставить объект, PSCredential
который является администратором, используя -Credential
переключатель.
В качестве альтернативы вы также можете использовать PSExec для запуска удаленных команд или исполняемых файлов. Предпочтительно запускать их в контексте SYSTEM, чтобы избежать ЛЮБЫХ проблем с разрешениями, но они обычно успешны, если вы просто запускаете их в контексте администратора на удаленной машине.
- Обойти запрос EULA с помощью
-accepteula
переключателя - Запустить в контексте SYSTEM с помощью
-s
переключателя - Иногда использование
-i
(интерактивного) переключателя необходимо для корректного запуска определенных сторонних исполняемых файлов.
Команды, выполняемые через PSExec, не подлежат ограничениям UAC. Однако, если вы попытаетесь запустить Powershell удаленно через PSExec, который, в свою очередь, попытается запустить скрипт, то политика выполнения будет мешать, если вы также не используете переключатель -ExecutionPolicy Bypass
. Однако использование PSExec для удаленного запуска Powershell, который, в свою очередь, запускает скрипт, — это действительно долгий путь к достижению того, что вам нужно сделать.
PSExec снова установит соединение с удаленным компьютером, используя ваш текущий вошедший в систему пользовательский контекст. Если вы не являетесь администратором на удаленном компьютере, вам нужно будет указать имя пользователя и пароль, которые используют -u
и -p
переключатели.
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
И последнее: вы всегда должны помнить, где выполняется команда (локально или удаленно), и понимать, что любой ресурс, к которому вы пытаетесь получить доступ, делается с точки зрения того, где выполняется команда. Например, если я запускаю команду C:\MyBatch.bat
на удаленном компьютере, то C:\MyBatch.bat
должен существовать на удаленном компьютере.