Есть ли способ запустить regedit на нескольких удаленных компьютерах без UAC, появляющегося в Windows10? /s в командной строке не работает на моем тестовом компьютере с Windows 10 (я был уверен, что он будет работать на моих системах Win7, но большинство моих клиентских компьютеров - Win10).

В конечном итоге цель состоит в том, чтобы

  1. импортировать reg-файл в HKLM, чтобы повысить уровень выполнения PowerShellPolicy до неограниченного,
  2. использовать Powershell для включения защиты / восстановления системы,
  3. использовать PowerShell создать точку восстановления и, наконец,
  4. импортируйте reg-файл, чтобы установить для executePolicy значение 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 ответ1

1

Поскольку вы пробовали несколько разных попыток, на самом деле в вашем сообщении есть несколько проблем, на которые может потребоваться ответ. Вы не дали понять, как вы выполняете эти команды удаленно. Ни одна из команд, которые вы показали, на самом деле ничего не делает на удаленном компьютере. Все они выполняются на локальном компьютере. Тем не менее, вы упомянули о попытке PSExec.

Я также не знаю ни о какой ситуации, когда UAC мешает удаленному выполнению команды. Таким образом, я могу только предположить, что вы выполняете команды на локальном компьютере и получаете запросы UAC. Но вы делаете это в процессе подготовки к удаленному запуску команд.

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

В Powershell уже есть механизм удаленного выполнения команд / скриптов.

  • Вы можете использовать ключ -ComputerName для определенных команд, чтобы выполнить их в удаленной системе.
  • Вы можете начать интерактивный удаленный сеанс с помощью Enter-PSSession <ComputerName> и Exit-PSSession .
  • Вы можете использовать команду Invoke-Command -ComputerName <ComputerName> для удаленного запуска любого сценария или команды.

Ни один из этих методов не подпадает под ограничение политики выполнения, если вы не запустите интерактивный сеанс Powershell, а затем продолжите попытки выполнить сценарий.

Эти команды будут выполняться на удаленном компьютере с использованием вашей текущей учетной записи пользователя. Если вы не являетесь администратором на удаленной машине, вам потребуется дополнительно предоставить объект PSCredential который является администратором, с помощью -Credential .

https://docs.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands?view=powershell-6

Кроме того, вы также можете использовать PSExec для запуска удаленных команд или исполняемых файлов. Желательно запускать их в контексте SYSTEM, чтобы избежать ЛЮБЫХ проблем с разрешениями, но они обычно бывают успешными, если вы просто запускаете их в контексте администратора на удаленной машине.

  • Обойти запрос EULA с -accepteula
  • Запустите в контексте SYSTEM с ключом -s
  • Иногда использование -i (интерактивного) ключа необходимо для правильного запуска некоторых сторонних EXEcutables.

Команды, выполняемые через 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 .

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