Detectar se o PowerShell está sendo executado como administrador

23

Como posso saber em meus scripts se o PowerShell está sendo executado com privilégios de administrador?

Eu preciso saber porque estou tentando executar um programa que requer a capacidade de abrir portas protegidas.

    
por Boomerang 03.05.2014 / 10:44

3 respostas

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

Desmembrando o que isso faz:

  • [bool] - Transmita o resultado final para bool .
  • [System.Security.Principal.WindowsIdentity]::GetCurrent() - Recupera o WindowsIdentity para o usuário atualmente em execução.
  • (...).groups - Acesse a propriedade groups da identidade para descobrir de que grupos de usuários a identidade é membro.
  • -match "S-1-5-32-544" verifica se groups contém o Well Known SID do grupo Administradores, a identidade só irá contê-lo se "executar como administrador" for usado.
por 03.05.2014 / 12:19
38
([Security.Principal.WindowsPrincipal] '
  [Security.Principal.WindowsIdentity]::GetCurrent() '
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Recupera a identidade atual do Windows e retorna True, se a identidade atual tiver a função de Administrador (ou seja, estiver em execução).

    
por 20.05.2014 / 21:22
34

No Powershell 4.0, você pode usar requer no topo do seu script:

#Requires -RunAsAdministrator

Saídas:

The script 'MyScript.ps1' cannot be run because it contains a "#requires" statement for running as Administrator. The current Windows PowerShell session is not running as Administrator. Start Windows PowerShell by using the Run as Administrator option, and then try running the script again.

    
por 18.03.2015 / 23:53

Tags