Как я могу определить в своих сценариях, работает ли PowerShell с правами администратора?
Мне нужно знать, потому что я пытаюсь запустить программу, которая требует возможности открывать защищенные порты.
Как я могу определить в своих сценариях, работает ли PowerShell с правами администратора?
Мне нужно знать, потому что я пытаюсь запустить программу, которая требует возможности открывать защищенные порты.
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Это извлекает текущую идентификацию Windows и возвращает True, если текущая идентификация имеет роль администратора (т. Е. Выполняется с повышенными правами).
В Powershell 4.0 вы можете использовать требования в верхней части вашего скрипта:
#Requires -RunAsAdministrator
Выходы:
Сценарий «MyScript.ps1» не может быть запущен, поскольку он содержит оператор «#requires» для запуска в качестве администратора. Текущий сеанс Windows PowerShell не работает от имени администратора. Запустите Windows PowerShell с помощью параметра «Запуск от имени администратора» и попробуйте снова запустить сценарий.
[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 группы "Администраторы", удостоверение будет содержать его, только если было использовано "запуск от имени администратора".