Вы знаете, как, если вы являетесь администратором системы и можете просто щелкнуть правой кнопкой мыши, скажем, пакетный скрипт и запустить его от имени администратора, не вводя пароль администратора?
Мне интересно, как это сделать с помощью скрипта PowerShell. Я не хочу вводить свой пароль; Я просто хочу имитировать метод запуска от имени администратора .
Все, что я прочитал, требует от вас ввода пароля администратора.
powershell
administrator
chrips
источник
источник
gsudo
. Бесплатный sudo с открытым исходным кодом для Windows, который позволяет запускать от имени администратора из командной строки. Появится всплывающее окно UAC.Ответы:
Если текущая консоль не имеет повышенных прав и для операции, которую вы пытаетесь выполнить, требуются повышенные привилегии, вы можете запустить powershell с Run as administratorпараметром:
источник
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>"
;)Win
+X
Как обсуждено здесьВот дополнение к предложению Шей Леви (просто добавьте эти строки в начале сценария):
Это приводит к тому, что текущий сценарий передается новому процессу powershell в режиме администратора (если текущий пользователь имеет доступ к режиму администратора и сценарий не запускается от имени администратора).
источник
if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
if
утверждение и вставьтеthrow
внутрь блока then.if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
[Security.Principal.WindowsBuiltInRole]::Administrator)
) должно быть предпочтительнее строкового аргумента"Administrator"
- я столкнулся сСамоподъемный скрипт PowerShell
Windows 8.1 / PowerShell 4.0 +
Одна линия :)
источник
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
Бенджамин Армстронг опубликовал отличную статью о самоподъемных скриптах PowerShell . Там несколько мелких проблем с его кодом; модифицированная версия, основанная на исправлениях, предложенных в комментарии, приведена ниже.
По сути, он получает удостоверение, связанное с текущим процессом, проверяет, является ли он администратором, а если нет, создает новый процесс PowerShell с правами администратора и завершает старый процесс.
источник
$newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
Вы можете создать командный файл (
*.bat
), который запускает ваш скрипт powershell с правами администратора при двойном щелчке. Таким образом, вам не нужно ничего менять в вашем скрипте powershell. Для этого создайте командный файл с тем же именем и расположением вашего скрипта powershell, а затем поместите в него следующее содержимое:Это оно!
Вот объяснение:
Предполагая, что ваш скрипт powershell находится в пути
C:\Temp\ScriptTest.ps1
, ваш командный файл должен иметь путьC:\Temp\ScriptTest.bat
. Когда кто-нибудь выполнит этот командный файл, произойдут следующие шаги:Cmd выполнит команду
Откроется новый сеанс powershell, и будет выполнена следующая команда:
В
system32
папке откроется еще один новый сеанс PowerShell с правами администратора, и ему будут переданы следующие аргументы:Следующая команда будет выполнена с правами администратора:
Когда аргументы пути и имени сценария заключены в двойные кавычки, они могут содержать символы пробела или одинарные кавычки (
'
).Текущая папка изменится с
system32
наC:\Temp
и скриптScriptTest.ps1
будет выполнен. Как только параметр-NoExit
был передан, окно не будет закрыто, даже если ваш скрипт powershell выдает какое-то исключение.источник
sudo
команды и настройки пользователя , используемый для автоматизированного процесса сNOPASSWD: ALL
вsudoers
файле .Вот самоподъемный фрагмент сценариев Powershell, который сохраняет рабочий каталог :
Сохранение рабочего каталога важно для сценариев, которые выполняют операции, связанные с путем. Почти все другие ответы не сохраняют этот путь, что может привести к непредвиденным ошибкам в остальной части сценария.
Если вы не хотите использовать самоподъемный сценарий / фрагмент и вместо этого просто хотите легко запустить сценарий в качестве администратора (например, из контекстного меню Проводника), см. Мой другой ответ здесь: https: // stackoverflow .com / а / 57033941/2441655
источник
С помощью
#Requires -RunAsAdministrator
пока не заявлено. Вроде бы там только начиная с PowerShell 4.0.
http://technet.microsoft.com/en-us/library/hh847765.aspx
Мне кажется, это хороший способ сделать это, но я пока не уверен в полевом опыте. Среда выполнения PowerShell 3.0, вероятно, игнорирует это или, что еще хуже, выдает ошибку.
Когда скрипт запускается как не администратор, выдается следующая ошибка:
источник
Parameter RunAsAdministrator requires an argument
. @akauppi Я не уверен, что они всегда думают.Вы можете легко добавить некоторые записи реестра, чтобы получить контекстное меню «Запуск от имени администратора» для
.ps1
файлов:(обновлен до более простого скрипта от @Shay)
В основном в
HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
значение по умолчанию для вызова сценария с помощью Powershell.источник
(default)
части?"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
Код, размещенный Джонатаном и Шей Леви, не работает для меня.
Пожалуйста, найдите рабочий код ниже:
источник
Вам необходимо повторно запустить скрипт с правами администратора и проверить, был ли скрипт запущен в этом режиме. Ниже я написал скрипт, который имеет две функции: DoElevatedOperations и DoStandardOperations . Вы должны поместить свой код, который требует прав администратора, в первый, а стандартные операции - во второй. IsRunAsAdmin переменная используется для определения режима администратора.
Мой код представляет собой упрощенный фрагмент сценария Microsoft, который автоматически создается при создании пакета приложения для приложений Магазина Windows.
источник
Добавляя мои 2 цента. Моя простая версия, основанная на сетевой сессии, которая до сих пор работает в Windows 7 / Windows 10. Почему это усложняет?
просто добавьте в начало сценария, и он будет работать от имени администратора.
источник
if (!(net session 2>&1 | Out-Null)) { ...
@ycomp... } else { echo "your message" }
.cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
, вы можете установить его,bypass
ноbypass
может быть опасно. Установите его наAllSigned
Такое поведение является особенностью. Существует несколько уровней безопасности, поскольку Microsoft действительно не хотела, чтобы файлы .ps1 были последним почтовым вирусом. Некоторые люди считают, что это противоречит самому понятию автоматизации задач, что справедливо. Модель безопасности Vista + состоит в том, чтобы «деавтоматизировать» вещи, тем самым заставляя пользователя их устраивать.
Однако я подозреваю, что если вы запустите сам PowerShell с повышенными правами, он сможет запускать пакетные файлы без повторного запроса пароля, пока вы не закроете PowerShell.
источник
Вы также можете заставить приложение открываться от имени администратора, если, конечно, у вас есть учетная запись администратора.
Найдите файл, щелкните правой кнопкой мыши> свойства> Ярлык> Дополнительно и выберите Запуск от имени администратора.
Затем нажмите ОК.
источник
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
где находится ярлык PowerShell. Он также все еще идет в другое место для вызова фактического exe (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
).Поскольку PowerShell управляется профилем пользователя, когда речь идет о разрешениях; если ваше имя пользователя / профиль имеет полномочия на выполнение каких-либо действий, то в этом профиле в PowerShell вы, как правило, сможете это сделать. При этом будет иметь смысл изменить ярлык, расположенный под вашим профилем пользователя, например
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
,.Щелкните правой кнопкой мыши и выберите свойства. Нажмите кнопку «Дополнительно» на вкладке «Ярлык», расположенной прямо под текстовым полем «Комментарии», справа от двух других кнопок, «Открыть расположение файла» и «Изменить значок», соответственно.
Установите флажок «Запуск от имени администратора». Нажмите OK, затем Applyи OK. Еще раз щелкните правой кнопкой мыши значок «Windows PowerShell», расположенный в
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
и выберите «Закрепить в меню« Пуск »/ на панели задач».Теперь всякий раз, когда вы нажимаете этот значок, он вызывает UAC для эскалации. После выбора «ДА» вы увидите, что консоль PowerShell открыта, и она будет помечена как «Администратор» в верхней части экрана.
Чтобы пойти дальше ... вы можете щелкнуть правой кнопкой мыши по этому же ярлыку в вашем профиле Windows PowerShell и назначить сочетание клавиш, которое будет действовать точно так же, как если бы вы щелкнули по недавно добавленному значку. Поэтому там, где написано «Сочетание клавиш», введите комбинацию клавиш / клавиш, например: Ctrl+Alt + P P(для PowerShell) . Нажмите Applyи OK.
Теперь все, что вам нужно сделать, это нажать на ту комбинацию кнопок, которую вы назначили, и вы увидите, что UAC будет вызван, и после выбора «ДА» вы увидите консоль PowerShell, а в строке заголовка отобразится «Администратор».
источник
Я нашел способ сделать это ...
Создайте командный файл, чтобы открыть ваш скрипт:
Затем создайте ярлык, на рабочем столе произнесите (щелкните правой кнопкой мыши New -> Shortcut ).
Затем вставьте это в место:
При первом открытии вам нужно будет один раз ввести пароль. Затем он сохранится в диспетчере учетных данных Windows.
После этого вы сможете работать от имени администратора без необходимости ввода имени пользователя или пароля администратора.
источник
Проблема с @pgk и @ Андрей Odri ответов «s, когда у вас есть параметры сценария, особенно когда они являются обязательными. Вы можете решить эту проблему, используя следующий подход:
Вот как будет выглядеть код, если сценарий имеет обязательные параметры ComputerName и Port :
источник
Ряд ответов здесь близок, но немного больше работы, чем нужно.
Создайте ярлык для вашего скрипта и настройте его «Запуск от имени администратора»:
Properties...
Target
от<script-path>
доpowershell <script-path>
Run as administrator
источник
Другое простое решение заключается в том, что вы также можете щелкнуть правой кнопкой мыши «C: \ Windows \ System32 \ cmd.exe» и выбрать «Запуск от имени администратора», после чего вы можете запускать любое приложение от имени администратора без ввода пароля.
источник
Я использую решение ниже. Он обрабатывает stdout / stderr с помощью функции транскрипции и правильно передает код завершения родительскому процессу. Вам нужно настроить путь расшифровки / имя файла.
источник
Ниже описано, как выполнить команду повышенного уровня powershell и собрать ее выходную форму в пакетном файле Windows в одну команду (т.е. без написания сценария ps1 powershell).
Выше вы видите, что я сначала запускаю PowerShell с повышенными привилегиями, а затем запрашиваю, чтобы запустить еще один PowerShell (субоболочка) для запуска команды.
источник
Поверх ответа Шей Леви, следуйте приведенным ниже настройкам (только один раз)
PATH
папок, например. Папка Windows \ System32После настройки:
powershell Start-Process powershell -Verb runAs <ps1_file>
Теперь вы можете запустить все в одной командной строке. Вышеуказанное работает на Windows 8 Basic 64-bit.
источник
Самый надежный способ, который я нашел, - это обернуть его в самоподъемный файл .bat:
.Bat проверяет, являетесь ли вы администратором, и при необходимости перезапускает скрипт как Администратор. Это также предотвращает открытие посторонних окон "cmd" с 4-м параметром,
ShellExecute()
установленным в0
.источник
EXIT
на aGOTO :EOF
и удалил второе. Кроме того,cd %~dp0
должна бытьcd /d %~dp0
И помещена первая команда после@echo off
. Таким образом, вам не нужен абсолютный путь.ps1
, просто поместите его в ту же папку, что и.bat
. Если вам нужно увидеть результат, измените 4-й параметр на1
.mshta
команда?cmd
процесса вызова, так что это не «исправляет» его, но я рад, что вы смогли изменить его в соответствии со своими потребностями.cmd
(я не сделал). Но что касается других изменений, я думаю, что это исправления, потому что моя версия будет работать для нас обоих, а ваша - не для меня, то есть моя более общая (обращайтесь к сценарию различных дисков). Во всяком случае, очень умный подход.Я не видел свой собственный способ сделать это раньше, поэтому попробуйте это. Проще следовать и имеет гораздо меньшую площадь:
Очень просто, если текущий сеанс Powershell был вызван с правами администратора, известный SID группы администраторов будет отображаться в группах при получении текущего идентификатора. Даже если учетная запись является членом этой группы, идентификатор безопасности не будет отображаться, если процесс не был вызван с повышенными учетными данными.
Почти все эти ответы представляют собой вариацию чрезвычайно популярного метода Microsoft Бена Армстронга, заключающегося в том, как этого добиться, не понимая, что он на самом деле делает, и как еще подражать той же рутине.
источник
Чтобы добавить вывод команды в текстовое имя файла, которое включает текущую дату, вы можете сделать что-то вроде этого:
источник
Это уточнение ...
Учетные данные PowerShill RUNAS / SAVECRED «небезопасны», пробовали, и они добавляют идентификационные данные администратора и пароль в кэш учетных данных и могут использоваться в других местах OOPS !. Если вы сделали это, я предлагаю вам проверить и удалить запись.
Просмотрите вашу программу или код, поскольку в соответствии с политикой Microsoft вы не можете смешивать код пользователя и администратора в одном и том же двоичном объекте без UAC (точки входа) для выполнения программы от имени администратора. Это будет sudo (то же самое) в Linux.
UAC имеет 3 типа, dont'see, приглашение или точку входа, сгенерированные в манифесте программы. Это не повышает уровень программы, поэтому, если UAC отсутствует и требуется администратор, произойдет сбой. Хотя UAC является хорошим требованием администратора, он предотвращает выполнение кода без аутентификации и предотвращает выполнение сценария смешанного кода на уровне пользователя.
источник
Оказывается, это было слишком легко. Все, что вам нужно сделать, это запустить cmd от имени администратора. Затем введите
explorer.exe
и нажмите Enter. Это открывает Windows Explorer . Теперь щелкните правой кнопкой мыши на сценарии PowerShell, который вы хотите запустить, выберите «запускать с PowerShell», который запустит его в PowerShell в режиме администратора.Может потребоваться включить политику, введите Y и нажмите ввод. Теперь скрипт будет запускаться в PowerShell от имени администратора. Если он работает красным, это означает, что ваша политика еще не вступила в силу. Затем попробуйте еще раз, и он должен работать нормально.
источник