Определить, работает ли PowerShell от имени администратора


36

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

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


1
Вы можете рассмотреть возможность повышения разрешений, как описано в
разделе «

Ответы:


42
[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 группы «Администраторы», удостоверение будет содержать его, только если использовался «запуск от имени администратора».

2
Вместо того, чтобы просто разместить строку кода, не могли бы вы объяснить, что он делает? Это помогает будущим посетителям понять и адаптировать его, если это необходимо.
slhck

Booo. Дайте этому человеку больше голосов
Каньон Колоб

4
Я предпочитаю ответ @Bill_Stewart ниже, так как в нем нет волшебных строк.
8

Вместо того, чтобы использовать -matchи [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
Typecasting

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

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


13
Хотя принятый ответ является правильным, этот ответ гораздо яснее, особенно для тех, кто может прочитать ваш сценарий через шесть месяцев.
Патрик Сеймур

46

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

#Requires -RunAsAdministrator

Выходы:

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


Что делать, если вы хотите выйти из функции, если она не запущена администратором?
Каньон Колоб

1
@KolobCanyon - нет такой вещи, как запуск только функции PowerShell с повышенными правами ; весь процесс PowerShell либо повышен, либо нет.
Bill_Stewart

@Bill_Stewart да, но вы можете, returnесли пользователь не является администратором :)
Каньон Колоб

1
@KolobCanyon - вы можете поднять только процесс PowerShell ; Вы не можете повысить одну функцию . Вот почему #Requires -RunAsAdministratorэто полезно: он предотвращает запуск всего скрипта, если вы не повышены.
Bill_Stewart

@Bill_Stewart Да, мне придется использовать это в какой-то момент.
Каньон Колоб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.