Como posso saber nos meus scripts se o PowerShell está sendo executado com privilégios de administrador?
Preciso saber porque estou tentando executar um programa que requer a capacidade de abrir portas protegidas.
Como posso saber nos meus scripts se o PowerShell está sendo executado com privilégios de administrador?
Preciso saber porque estou tentando executar um programa que requer a capacidade de abrir portas protegidas.
Respostas:
[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 WindowsIdentity
para o usuário em execução no momento.(...).groups
- Acesse a groups
propriedade da identidade para descobrir em quais grupos de usuários a identidade é membro.-match "S-1-5-32-544"
verifica se groups
contém o SID conhecido do grupo Administradores, a identidade só o conterá se "executar como administrador" for usado.-match
e [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([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).
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.
return
, se o usuário não é admin :)
#Requires -RunAsAdministrator
é útil: impede que o script inteiro seja executado se você não estiver elevado.