Назад | Перейти на главную страницу

Получение прав администратора в PowerShell

У меня только одна учетная запись на моем компьютере с Windows Vista, и этот пользователь имеет права администратора. Однако, когда я пытаюсь выполнить команду в PowerShell, чтобы убить определенный процесс, меня встречает сообщение «Доступ запрещен». Как мне стать администратором?

Способ Powershell v2, согласно Microsoft, это щелкнуть правой кнопкой мыши ярлык и выбрать Запустить от имени администратора.

И чтобы поднять в окне Powershell:

start-process powershell –verb runAs

Что из командного файла cmd.exe, ярлыка или строки запуска будет выглядеть примерно так (многократно):

powershell "start-process powershell -verb runas"

Самый простой способ сделать это - запустить Powershell с токенами администрирования. Для этого щелкните правой кнопкой мыши Powershell (или ярлык к нему) и выберите «Запуск от имени администратора». В качестве альтернативы вы можете использовать elevate.cmd.

Это открывает новый экземпляр PowerShell:

function Run-Elevated ($scriptblock)
{
  # TODO: make -NoExit a parameter
  # TODO: just open PS (no -Command parameter) if $scriptblock -eq ''
  $sh = new-object -com 'Shell.Application'
  $sh.ShellExecute('powershell', "-NoExit -Command $scriptblock", '', 'runas')
}

Я ожидаю, что с этим есть проблемы - в частности, вы не получите результат своего блока сценария обратно в вызывающем сценарии. С другой стороны, он будет в новом экземпляре PS, так что вы можете взломать его там.

Если хочешь всегда запустите PowerShell с правами администратора, вы можете щелкнуть правой кнопкой мыши ярлык PowerShell, затем нажать кнопку «Дополнительно ...» на вкладке «Ярлык», затем выбрать «Запуск от имени администратора».

Легкий способ ...

Вот как настроить легкая команда для получения прав администратора в любое время из любого сеанса PowerShell!

Шаг 1. Откройте свой профиль PowerShell. (Разрешите блокноте создать файл, если он отсутствует.)

notepad "$profile"

Шаг 2. Вставьте одну из следующих строк кода в любом месте этого файла. Выберите команду ниже на основе версии PowerShell, которую вы хотите запустить, и обратите внимание, что профиль зависит от версии, поэтому вам придется сделать это для каждого из ваших различных профилей версии PowerShell, если вы запускаете их параллельно.

# PowerShell 5 (old version built into windows)
function GoAdmin { Start-Process powershell –Verb RunAs }

# PowerShell Core (the latest PowerShell version from GitHub)
function GoAdmin { Start-Process pwsh –Verb RunAs }

Шаг 3: перезапустите PowerShell. Команда теперь доступна постоянно.

Шаг 4. В любое время, когда вы захотите стать администратором, просто введите GoAdmin (и не беспокойтесь о вводе правильного регистра; функции PS фактически нечувствительны к регистру). Вы, конечно, можете назвать функцию как-нибудь иначе, например Elevate или что-то в этом роде, но я не хотел риска конфликтов, поэтому назвал его фразой из двух слов без дефисов, чтобы гарантировать, что она никогда не будет конфликтовать с собственными функциями PowerShell.

Обратите внимание, что окно администратора открывается в отдельной оболочке. Вы можете закрыть исходную оболочку или оставить ее открытой. Если ваша администраторская работа делает что-то «большое», например, добавление / изменение переменных среды, тогда ваша пользовательская оболочка (не админка) может просто ввести refreshenv чтобы перезагрузить среду и получить изменения. (Изменить: обнаружил, что refreshenv обеспечивается великим Шоколадный менеджер пакетов. Тип Update-SessionEnvironment вместо этого, если у вас нет Шоколадки.)

В общем, просто GoAdmin, выполните административные действия, такие как установка пакетов (с https://chocolatey.org/ конечно!), а затем закройте окно администратора и запустите refreshenv в вашей пользовательской оболочке! Вуаля.