команда запуска ядра Windows с повышенными привилегиями - PullRequest
1 голос
/ 18 мая 2019

Существует несколько вариантов запуска обычного пользователя с правами администратора (или любого другого пользователя), однако даже при входе в систему с правами администратора некоторые функции должны запускаться с повышенными правами.

В графическом интерфейсе Windows просто щелкните правой кнопкой мыши .exe и выберите run as Administrator или даже увеличьте значение 'cmd' или 'powershell'.

Как получить повышенные привилегии в ядре Windows?

1 Ответ

1 голос
/ 18 мая 2019

Как правило, для программного запуска исполняемого файла с повышением прав (Запуск от имени администратора) в Windows используйте командлет Start-Process с -Verb RunAs.

Это в равной степени относится к pwsh.exeисполняемый файл PowerShell Core , поэтому в простейшем случае вы можете написать:

# Open a new console window with PowerShell Core running with admin privileges.
Start-Process -Verb RunAs pwsh

Если вы хотите обернуть это в вспомогательную функцию это также более надежно и кросс-издание в Windows (также работает в Windows PowerShell):

function Enter-AdminPSSession {
  Start-Process -Verb RunAs (Get-Process -Id $PID).Path
}

# Optionally also define a short alias name:
# Note: 'psadmin' is a nonstandard alias name; a more conformant name would be
#       the somewhat clunky 'etasn' 
#       ('et' for 'Enter', 'a' for admin, and 'sn'` for session)
Set-Alias psadmin Enter-AdminPSSession

Если вы хотите, чтобы функция также была кроссплатформенный (также для работы на Unix-подобных платформах):

function Enter-AdminPSSession {
  if ($env:OS -eq 'Windows_NT') {
    Start-Process -Verb RunAs (Get-Process -Id $PID).Path
  } else {
    sudo (Get-Process -Id $PID).Path
  }
}

Важно : из-за задействованных командлетов / утилит

  • в Windows , новый сеанс неизменно открывается в новом окне консоли.

    • Тот факт, что новый сеанс является сеансом администратораотображается в заголовке окна (префикс Administrator:)
  • в Unix (Linux, macOS)новый сеанс неизменно открывается в том же окне консоли (терминала).

    • В Unix нет очевидного индикатора того, что сеанс администратора был введен;запуск whoami - быстрый способ проверить это (возвращает root в сеансе администратора);Лучшим решением было бы изменить функцию prompt, чтобы она отражала сеанс администратора в строке приглашения.

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

Если вы скачаете скрипт Enter-AdminPSSession.ps1 (Gist с лицензией MIT), выможет запускать такие команды, как:

# Example: Synchronously run an MSI installer with elevation
#          and exit on completion.
Enter-AdminPSSession -Exit { Start-Process msiexec -Args '/qn /i package.msi' }

# Check for success via $LASTEXITCODE
if ($LASTEXITCODE -ne 0) { Throw "Installation failed." }

Кроме того, сценарий:

  • префикс строки приглашения в интерактивных сеансах с повышенными привилегиями с [admin]

  • гарантирует, что текущее местоположение вызывающего сеанса (рабочий каталог) также является текущим местоположением повышенного сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...