Как я могу определить в своих сценариях, работает ли PowerShell с правами администратора?
Мне нужно знать, потому что я пытаюсь запустить программу, которая требует возможности открывать защищенные порты.
Как я могу определить в своих сценариях, работает ли 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 группы «Администраторы», удостоверение будет содержать его, только если использовался «запуск от имени администратора».-match
и [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([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 с помощью параметра «Запуск от имени администратора» и попробуйте снова запустить сценарий.
return
если пользователь не является администратором :)
#Requires -RunAsAdministrator
это полезно: он предотвращает запуск всего скрипта, если вы не повышены.