27

Как я могу определить в своих сценариях, работает ли PowerShell с правами администратора?

Мне нужно знать, потому что я пытаюсь запустить программу, которая требует возможности открывать защищенные порты.

3 ответа3

44
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Это извлекает текущую идентификацию Windows и возвращает True, если текущая идентификация имеет роль администратора (т. Е. Выполняется с повышенными правами).

37

В Powershell 4.0 вы можете использовать требования в верхней части вашего скрипта:

#Requires -RunAsAdministrator

Выходы:

Сценарий «MyScript.ps1» не может быть запущен, поскольку он содержит оператор «#requires» для запуска в качестве администратора. Текущий сеанс Windows PowerShell не работает от имени администратора. Запустите Windows PowerShell с помощью параметра «Запуск от имени администратора» и попробуйте снова запустить сценарий.

31
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

Разбивая, что это делает:

  • [bool] - Привести конечный результат к bool .
  • [System.Security.Principal.WindowsIdentity]::GetCurrent() - WindowsIdentity для текущего работающего пользователя.
  • (...).groups - Получите доступ к свойству groups удостоверения, чтобы узнать, к каким группам пользователей принадлежат удостоверения.
  • -match "S-1-5-32-544" проверяет, содержит ли groups общеизвестный SID группы "Администраторы", удостоверение будет содержать его, только если было использовано "запуск от имени администратора".

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