В Windows почему-то файлы powershell скриптов (.ps1) не имеют пункта «Запустить от имени администратора». Что странно, т.к. это тоже скрипты, только выполняются они не CMD, а Windows Powershell. Исправить ситуацию можно небольшими изменениями реестра.
1. В ветке HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1shell создаем подраздел с именем runas и пустой строковый параметр с именем HasLUAShield.
2. В ветке HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1shellrunas создаем подраздел с именем command.
3.1 Если хотим чтобы окно powershell закрывалось после выполнения скрипта в ветке HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1shellrunascommand меняем параметр (По умолчанию) на powershell.exe «-Command» «if((Get-ExecutionPolicy ) -ne ‘AllSigned’) < Set-ExecutionPolicy -Scope Process Bypass >;
3.2 Если хотим чтобы окно powershell не закрывалось после выполнения скрипта и был виден результат в ветке HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1shellrunascommand меняем параметр (По умолчанию) на powershell.exe –NoExit «-Command» «if((Get-ExecutionPolicy ) -ne ‘AllSigned’) < Set-ExecutionPolicy -Scope Process Bypass >;
Powershell запустить от имени администратора
После всех этих манипуляций в контекстном меню файлов .ps1 появится пункт «Запуск от имени администратора»
Для ленивых: скачать готовые reg-файлы для импорта можно отсюда.
Источник: tmie.ru
Запускаете команду от имени администратора с помощью PowerShell?
Вы знаете, как это сделать, если вы являетесь администратором системы и можете просто щелкнуть правой кнопкой мыши, скажем, пакетный сценарий и запустить его от имени администратора, не вводя пароль администратора? Мне интересно, как это сделать с помощью сценария PowerShell. Я не хочу вводить свой пароль; Я просто хочу имитировать щелчок правой кнопкой мыши Запустить От Имени Администратора метод. Все, что я прочитал до сих пор, требует, чтобы вы указали пароль администратора.
задан 07 окт.
Попытка gsudo . Бесплатная версия sudo с открытым исходным кодом для Windows, которая позволяет выполнять функции администратора из командной строки. Появится всплывающее окно UAC. — Gerardo Grignoli
27 ответы
Если текущая консоль не имеет повышенных прав и операция, которую вы пытаетесь выполнить, требует повышенных прав, вы можете начать powershell с Запуск от имени администратора вариант :
PS> Start-Process powershell -Verb runAs
Создан 10 июля ’21, 22:07
Это хороший простой способ запустить его от имени администратора. — Сейфер Аббас
Вот дополнение к предложению Шая Леви (просто добавьте эти строки в начало скрипта):
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] «Administrator»))
Как запустить программу от администратора или открыть административную консоль в конкретной папке
Это приводит к тому, что текущий сценарий передается новому процессу PowerShell в режиме администратора (если текущий пользователь имеет доступ к режиму администратора и сценарий не запускается как администратор).
ответ дан 08 авг.
Легко модифицируется, чтобы просто выдавать ошибку, когда вы не запускаете его от имени администратора. Просто возьми if заявление и поставить throw внутри блока then. — jpmc26
Единственный синтаксис, который сработал для меня, находится в исходном посте, а не в том, что написано Дж. Ломбардом или Андждреасом — Николас Моммартс
Есть ли способ подавить окна, если вы хотите запустить PowerShell от имени администратора? Для приложений, в которых вам нужно запускать это в автоматическом режиме, запрос пользователя может беспокоить. — Пеликер
Этот ответ не сохраняет рабочий каталог. См. Здесь для того, что делает: stackoverflow.com/a/57035712/2441655 — Венрикс
Это не удается, когда он находится внутри определения функции. Должен быть снаружи, иначе открывается новое окно администратора и сразу закрывается. — Джим
Самоподъемный скрипт 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`»» -Verb RunAs; exit ># Your script here
ответ дан 09 мар ’16, в 17:03
ну, технически говоря, все будет «одной строкой», если отформатировано таким образом, но это не означает, что это действительно «одна строка» — нелегальный иммигрант
Недостаток: если вы введете в подсказку пользователя, не являющегося администратором, вы закончите бесконечный цикл fork-exit. — Мануэль Фо
но это не передает аргументы — KYB
Чтобы передать аргументы, я изменил его на: 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 >- с.
Этот ответ не сохраняет рабочий каталог. См. Здесь для того, что делает: stackoverflow.com/a/57035712/2441655 — Венрикс
Бенджамин Армстронг опубликовал отличная статья о самоподъемных скриптах PowerShell. Есть несколько мелких проблем с его кодом; модифицированная версия, основанная на исправлениях, предложенных в комментарии, приведена ниже. По сути, он получает идентификатор, связанный с текущим процессом, проверяет, является ли он администратором, а если нет, создает новый процесс PowerShell с правами администратора и завершает старый процесс.
# Get the ID and security principal of the current user account $myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent(); $myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID); # Get the security principal for the administrator role $adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator; # Check to see if we are currently running as an administrator if ($myWindowsPrincipal.IsInRole($adminRole)) < # We are running as an administrator, so change the title and background colour to indicate this $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + «(Elevated)»; $Host.UI.RawUI.BackgroundColor = «DarkBlue»; Clear-Host; >else < # We are not running as an administrator, so relaunch as administrator # Create a new process object that starts PowerShell $newProcess = New-Object System.Diagnostics.ProcessStartInfo «PowerShell»; # Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it’s path $newProcess.Arguments = » + $script:MyInvocation.MyCommand.Path + «‘» # Indicate that the process should be elevated $newProcess.Verb = «runas»; # Start the new process [System.Diagnostics.Process]::Start($newProcess); # Exit from the current, unelevated, process Exit; ># Run your code that needs to be elevated here. Write-Host -NoNewLine «Press any key to continue. «; $null = $Host.UI.RawUI.ReadKey(«NoEcho,IncludeKeyDown»);
ответ дан 09 мар ’16, в 18:03
Мне не удалось правильно разрешить имя скрипта и параметры, поэтому я заключил выполнение в cmd.exe / c $newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory — xverges
Есть ли какие-то преимущества в том, чтобы делать это так, вместо Start-Process? Мне интересно узнать о различиях между этим методом и другими, опубликованными выше и в других темах. Они оба полагаются на .NET, но этот метод в большей степени . — ZaxLoffful
Я обнаружил, что различные комментарии, связанные с прямой ссылкой на сообщение Армстронга (начальное предложение этого сообщения), также очень полезны. — БентЦепьКольцо
Этот ответ не сохраняет рабочий каталог. См. Здесь для того, что делает: stackoverflow.com/a/57035712/2441655 — Венрикс
Вот самоподнимающийся фрагмент скриптов Powershell. который сохраняет рабочий каталог:
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) < Start-Process PowerShell -Verb RunAs «-NoProfile -ExecutionPolicy Bypass -Command `»cd ‘$pwd’; `»»; exit; ># Your script here
Сохранение рабочего каталога важно для сценариев, выполняющих операции с указанием пути. Почти все другие ответы не сохраняют этот путь, что может вызвать непредвиденные ошибки в остальной части скрипта. Если вы не хотите использовать самоподъемный скрипт / фрагмент, а вместо этого просто хотите простой способ запустить скрипт в качестве администратора (например, из контекстного меню проводника), см. Другой мой ответ здесь: https://stackoverflow.com/a/57033941/2441655
Создан 15 июля ’19, 09:07
Вы можете создать командный файл (* .bat), который запускает ваш сценарий PowerShell с правами администратора при двойном щелчке. Таким образом, вы не нужно ничего менять в вашем сценарии PowerShellДля этого создайте командный файл с тем же именем и расположением, что и ваш сценарий PowerShell, а затем поместите в него следующее содержимое:
-
Cmd выполнит команду
powershell -Command «Start-Process powershell «-ExecutionPolicy Bypass -NoProfile -NoExit -Command `»cd `»C:Temp`»; .ScriptTest.ps1`»`»» -Verb RunAs»
Start-Process powershell «-ExecutionPolicy Bypass -NoProfile -NoExit -Command `»cd `»C:Temp`»; .ScriptTest.ps1`»`»» -Verb RunAs
-ExecutionPolicy Bypass -NoProfile -NoExit -Command «cd «C:Temp»; .ScriptTest.ps1″»
cd «C:Temp»; .ScriptTest.ps1″
Создан 21 июля ’21, 00:07
Если я сделаю это, у меня появится всплывающее окно с вопросом, разрешаю ли PowerShell вносить изменения в мою систему. Это делает его непригодным для автоматизации. — Джон Слегерс
Это лучший ответ, чем другие, потому что он сохраняет рабочий каталог. Я собрал здесь несколько однострочных вариантов этого подхода (один для cmd / batch, один для записей контекстного меню Explorer и один для powershell): stackoverflow.com/a/57033941/2441655 — Венрикс
еще не было заявлено. Кажется, это только с PowerShell 4.0.
Когда этот параметр переключателя добавляется к вашему оператору requires, он указывает, что сеанс Windows PowerShell, в котором вы запускаете сценарий, должен запускаться с повышенными правами пользователя (Запуск от имени администратора).
Мне кажется, что это хороший способ сделать это, но я еще не уверен в полевом опыте. Среда выполнения PowerShell 3.0, вероятно, игнорирует это или, что еще хуже, выдает ошибку.
Когда сценарий запускается от имени неадминистратора, выдается следующая ошибка:
Сценарий «StackOverflow.ps1» не может быть запущен, поскольку он содержит инструкцию «#requires» для запуска от имени администратора. Текущий сеанс Windows PowerShell не запущен с правами администратора. Запустите Windows PowerShell, используя параметр «Запуск от имени администратора», а затем попробуйте запустить сценарий еще раз.
+ CategoryInfo : PermissionDenied: (StackOverflow.ps1:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : ScriptRequiresElevation
ответ дан 16 авг.
К сожалению, все, что он делает, это приводит к сбою сценария с ошибкой, если оболочка не имеет прав администратора. Сама по себе она не поднимается. — Яцек Горгонь
Вы можете легко добавить несколько записей в реестр, чтобы получить контекстное меню «Запуск от имени администратора» для .ps1 файлов:
New-Item -Path «Registry::HKEY_CLASSES_ROOTMicrosoft.PowershellScript.1Shellrunascommand» ` -Force -Name » -Value ‘»c:windowssystem32windowspowershellv1.0powershell.exe» -noexit «%1″‘
В основном на HKCR:Microsoft.PowershellScript.1Shellrunascommand установите значение по умолчанию для вызова сценария с помощью Powershell.
ответ дан 08 окт ’11, 19:10
Это не работает, вы создаете ключ «(по умолчанию)», а не обновляете значение ключа «(по умолчанию)». Мне удалось сжать код до однострочника, который мне подходит. Вы можете это проверить? New-Item -Path «Registry :: HKEY_CLASSES_ROOT Microsoft.PowershellScript.1 Shell runas command» -Force -Name » -Value ‘»c: windows system32 windowspowershell v1.0 powershell.exe» -noexit «% 1» ‘- Шей Леви
Я попробовал. Он создал ключ «(по умолчанию)» под командным ключом. — Шей Леви
Это сработало для меня после некоторых незначительных изменений значения реестра: «c: windows system32 windowspowershell v1.0 powershell.exe» -ExecutionPolicy RemoteSigned -NoExit » — МайкБаз — MSFT
Значение реестра в ответе имеет всевозможные проблемы. На самом деле он не запускает команду и неправильно цитирует имя сценария (то есть разбивается на пути с пробелами). Я успешно использую следующее: «c:windowssystem32windowspowershellv1.0powershell.exe» -noexit -command » — Кал Зекдор
Код, опубликованный Джонатаном и Шей Леви, у меня не работал.
Пожалуйста, найдите рабочий код ниже:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] «Administrator»)) < #»No Administrative rights, it will display a popup window asking user for Admin rights» $arguments = » + $myinvocation.mycommand.definition + «‘» Start-Process «$psHomepowershell.exe» -Verb runAs -ArgumentList $arguments break >#»After user clicked Yes on the popup, your file will be reopened with Admin rights» #»Put your code here»
Создан 26 июля ’13, 19:07
Очень полезное и практичное решение: просто подключил его к моему сценарию, и он работает. — CDuv
Вам нужно перезапустить скрипт с правами администратора и проверить, был ли скрипт запущен в этом режиме. Ниже я написал сценарий, который выполняет две функции: DoElevatedOperations и Делать стандартные операции. Вы должны поместить свой код, требующий прав администратора, в первую, а стандартные операции — во вторую. В Исрунасадмин переменная используется для идентификации режима администратора.
Мой код — это упрощенный отрывок из сценария Microsoft, который автоматически создается при создании пакета приложения для приложений Магазина Windows.
param( [switch]$IsRunAsAdmin = $false ) # Get our script path $ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path # # Launches an elevated process running the current script to perform tasks # that require administrative privileges. This function waits until the # elevated process terminates. # function LaunchElevated < # Set up command line arguments to the elevated process $RelaunchArgs = ‘-ExecutionPolicy Unrestricted -file «‘ + $ScriptPath + ‘» -IsRunAsAdmin’ # Launch the process and wait for it to finish try < $AdminProcess = Start-Process «$PsHomePowerShell.exe» -Verb RunAs -ArgumentList $RelaunchArgs -PassThru >catch < $Error[0] # Dump details about the last error exit 1 ># Wait until the elevated process terminates while (!($AdminProcess.HasExited)) < Start-Sleep -Seconds 2 >> function DoElevatedOperations < Write-Host «Do elevated operations» >function DoStandardOperations < Write-Host «Do standard operations» LaunchElevated ># # Main script entry point # if ($IsRunAsAdmin) < DoElevatedOperations >else
Добавляю свои 2 цента. Моя простая версия, основанная на сетевом сеансе, которая пока работает все время в Windows 7 / Windows 10. Зачем это усложнять?
if (!(net session))
просто добавьте в начало скрипта, и он запустится от имени администратора.
ответ дан 27 апр.
есть ли способ отправить сообщение пользователю после отображения «Доступ запрещен»? — комп
. или вообще избежать сообщения — Гюнтер Цохбауэр
получение ошибок для этого, 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. — user2305193
Вы также можете принудительно открыть приложение от имени администратора, если, конечно, у вас есть учетная запись администратора.
Найдите файл, щелкните правой кнопкой мыши> Свойства> Ярлык> Дополнительно и проверить Запуск от имени администратора
Затем нажмите ОК.
Как это написать? — Дитер
Такое поведение является особенностью. Существует несколько уровней безопасности, поскольку Microsoft действительно не хотела, чтобы файлы .ps1 были последним вирусом электронной почты. Некоторые люди считают, что это противоречит самому понятию автоматизации задач, что справедливо. Модель безопасности Vista + предназначена для «деавтоматизации» вещей, таким образом заставляя пользователя их разрешать.
Однако я подозреваю, что если вы запустите сам PowerShell с повышенными правами, он сможет запускать командные файлы без повторного запроса пароля, пока вы не закроете powershell.
ответ дан 07 окт ’11, 19:10
Некоторые ответы здесь близки, но работы немного больше, чем нужно.
Создайте ярлык для своего сценария и настройте его на «Запуск от имени администратора»:
- Создайте ярлык.
- Щелкните ярлык правой кнопкой мыши и откройте Properties.
- Редактировать Target от в powershell
- Нажмите Дополнительно . и включить Run as administrator
Вот как запустить команду powershell с повышенными привилегиями и собрать ее выходную форму в пакетном файле Windows с помощью одной команды (т. Е. Без написания сценария ps1 powershell).
powershell -Command ‘Start-Process powershell -ArgumentList «-Command (Get-Process postgres | Select-Object Path | Select-Object -Index 0).Path | Out-File -encoding ASCII $env:TEMPcamp-postgres.tmp» -Verb RunAs’
Выше вы видите, что я сначала запускаю PowerShell с повышенным запросом, а затем прошу запустить другую оболочку PowerShell (вспомогательную оболочку) для выполнения команды.
C:Users»username»AppDataRoamingMicrosoftWindowsStart MenuProgramsWindows PowerShell где кратчайший путь PowerShell находится. Он тоже по-прежнему переходит в другое место, чтобы вызвать фактический exe ( %SystemRoot%system32WindowsPowerShellv1.0powershell.exe ).
Поскольку PowerShell управляется профилем пользователя, когда речь идет о разрешениях; если у вашего имени пользователя / профиля есть разрешения на выполнение каких-либо действий, то в PowerShell вы, как правило, также сможете это сделать в этом профиле. При этом имеет смысл изменить ярлык, расположенный под вашим профилем пользователя, например, C:Users»username»AppDataRoamingMicrosoftWindowsStart MenuProgramsWindows PowerShell .
Щелкните правой кнопкой мыши и выберите «Свойства». Нажмите кнопку «Дополнительно» на вкладке «Ярлык», расположенной прямо под текстовым полем «Комментарии», рядом с двумя другими кнопками, «Открыть расположение файла» и «Изменить значок», соответственно.
Установите флажок «Запуск от имени администратора». Нажмите OK , то Применить и OK . Еще раз щелкните правой кнопкой мыши значок с надписью «Windows PowerShell», расположенный в C:Users»username»AppDataRoamingMicrosoftWindowsStart MenuProgramsWindows PowerShell и выберите «Закрепить в меню« Пуск »/ на панели задач».
Теперь всякий раз, когда вы щелкаете этот значок, он вызывает UAC для эскалации. После выбора «ДА» вы заметите, что консоль PowerShell открыта, и она будет помечена как «Администратор» в верхней части экрана.
Чтобы пойти дальше . вы можете щелкнуть правой кнопкой мыши тот же самый ярлык значка в расположении вашего профиля Windows PowerShell и назначить сочетание клавиш, которое будет делать то же самое, как если бы вы щелкнули недавно добавленный значок. Итак, где написано «Сочетание клавиш», введите комбинацию клавиш / кнопок клавиатуры, например: Ctrl + другой + Р P (для PowerShell). Нажмите Применить и OK .
Теперь все, что вам нужно сделать, это нажать эту комбинацию кнопок, которую вы назначили, и вы увидите, что UAC вызывается, а после того, как вы выберете «ДА», вы увидите, что появляется консоль PowerShell и «Администратор» отображается в строке заголовка.
ответ дан 09 мар ’16, в 18:03
Источник: stackovergo.com
6 способов запустить PowerShell от имени администратора в Windows 10
Как и командная строка, Windows PowerShell — это окно командной строки, разработанное в Windows, которое обычно предназначено для расширенного администрирования системы, ИТ-специалистов и разработчиков. На самом деле Windows PowerShell более мощный, но менее известный, чем командная строка. В предыдущем посте мы показали, как открыть командную строку от имени администратора в Windows 10. Теперь в этом посте мы покажем пять способов запустить PowerShell от имени администратора в Windows 10.
Способ 1. Запустите PowerShell от имени администратора из окна поиска меню Пуск
Шаг 1. Откройте меню «Пуск» Windows 10.
Шаг 2: Введите powershell. В результатах поиска щелкните правой кнопкой мыши приложение Windows PowerShell и выберите Запуск от имени администратора.
Способ 2: запустить PowerShell от имени администратора из меню Win + X
В меню Win + X обычно включается командная строка или Windows PowerShell.
Нажмите сочетание клавиш Win + X, чтобы открыть меню Win + X. Затем в меню выберите Windows PowerShell (администратор).
Способ 3: запустить PowerShell от имени администратора из CMD с повышенными привилегиями
Шаг 1. Откройте командную строку Windows 10 от имени администратора.
Шаг 2: Введите powershell и нажмите Enter. Затем командная строка переключится на Windows PowerShell.
Способ 4: Запустите PowerShell от имени администратора из проводника
Шаг 1. Откройте проводник в Windows 10.
Шаг 2: перейдите в папку C: Windows system32 WindowsPowerShell v1.0 powershell.exe. Затем щелкните правой кнопкой мыши файл powershell.exe и выберите Запуск от имени администратора.
Способ 5: запустить PowerShell от имени администратора из диспетчера задач
Шаг 1. Откройте диспетчер задач Windows 10.
Шаг 2: Нажмите «Подробнее» в нижнем левом углу, чтобы отобразить полный экран диспетчера задач.
Шаг 3: Щелкните Файл> Запустить новую задачу.
Шаг 4. В диалоговом окне «Создание новой задачи» введите powershell, установите флажок «Создать эту задачу с правами администратора» и нажмите «ОК».
Способ 6. Запустите PowerShell от имени администратора из окна Выполнить
Шаг 1. Откройте диалоговое окно «Выполнить», нажав клавиши Win + R.
Шаг 2: Введите в поле powershell и нажмите ОК.
Шаг 3. Обычная оболочка Windows PowerShell откроется от имени вашего текущего пользователя. Введите start –process powershell –verb runAs и нажмите клавишу «Enter». Это приведет к появлению PowerShell с повышенными привилегиями в качестве администратора.
Источник: awme.ru