¿Cómo puedo saber en mis scripts si PowerShell se ejecuta con privilegios de administrador?
Necesito saber porque estoy tratando de ejecutar un programa que requiere la capacidad de abrir puertos protegidos.
¿Cómo puedo saber en mis scripts si PowerShell se ejecuta con privilegios de administrador?
Necesito saber porque estoy tratando de ejecutar un programa que requiere la capacidad de abrir puertos protegidos.
Respuestas:
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
Desglosando lo que esto hace:
[bool]
- Lanzar el resultado final a a bool
.[System.Security.Principal.WindowsIdentity]::GetCurrent()
- Recupera el WindowsIdentity
para el usuario actualmente en ejecución.(...).groups
- Acceda a la groups
propiedad de la identidad para averiguar de qué grupos de usuarios es miembro la identidad.-match "S-1-5-32-544"
comprueba si groups
contiene el SID conocido del grupo Administradores, la identidad solo lo contendrá si se utilizó "ejecutar como administrador".-match
y encasillar:[Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Esto recupera la identidad actual de Windows y devuelve True si la identidad actual tiene el rol de Administrador (es decir, se ejecuta elevado).
En Powershell 4.0 puede usar require en la parte superior de su script:
#Requires -RunAsAdministrator
Salidas:
El script 'MyScript.ps1' no se puede ejecutar porque contiene una instrucción "#requires" para ejecutarse como Administrador. La sesión actual de Windows PowerShell no se ejecuta como Administrador. Inicie Windows PowerShell utilizando la opción Ejecutar como administrador e intente ejecutar el script nuevamente.
return
si el usuario no es administrador :)
#Requires -RunAsAdministrator
es útil: evita que se ejecute todo el script si no está elevado.