Detectar se o PowerShell está sendo executado como administrador


Respostas:


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

Desmembrando o que isso faz:

  • [bool]- Lance o resultado final para a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- Recupera WindowsIdentitypara o usuário em execução no momento.
  • (...).groups- Acesse a groupspropriedade da identidade para descobrir em quais grupos de usuários a identidade é membro.
  • -match "S-1-5-32-544"verifica se groupscontém o SID conhecido do grupo Administradores, a identidade só o conterá se "executar como administrador" for usado.

1
Em vez de apenas postar uma linha de código, você pode explicar o que faz? Isso ajuda os futuros visitantes a entender e adaptar, se necessário.
slhck

BOOO. Dê a este homem mais votos positivos
Kolob Canyon 24/10

4
Prefiro a resposta de @ Bill_Stewart abaixo, pois é livre de seqüências de caracteres mágicas.
8DH

Em vez de usar -matche [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
escrever

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

Isso recupera a identidade atual do Windows e retorna True se a identidade atual tiver a função Administrador (ou seja, estiver executando elevada).


13
Embora a resposta aceita esteja correta, essa resposta é muito mais clara, especialmente para alguém que pode ler seu script daqui a seis meses.
Patrick Seymour

46

No Powershell 4.0, você pode usar os requisitos na parte superior do seu script:

#Requires -RunAsAdministrator

Saídas:

O script 'MyScript.ps1' não pode ser executado porque contém uma instrução "#requires" para ser executada como Administrador. A sessão atual do Windows PowerShell não está sendo executada como administrador. Inicie o Windows PowerShell usando a opção Executar como administrador e tente executar o script novamente.


e se você quiser uma função que saia se não for executada pelo admin?
Kolob Canyon

1
@KolobCanyon - Não é possível executar apenas uma função do PowerShell elevada; todo o processo do PowerShell é elevado ou não.
Bill_Stewart

@Bill_Stewart sim, mas você pode return, se o usuário não é admin :)
Kolob Canyon

1
@KolobCanyon - você só pode elevar o processo do PowerShell ; você não pode elevar uma única função . É por isso que #Requires -RunAsAdministratoré útil: impede que o script inteiro seja executado se você não estiver elevado.
Bill_Stewart

@ Bill_Stewart Sim, vou ter que usar isso em algum momento.
Kolob Canyon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.