Verificar permisos de admin en PowerShell

Algunas tareas necesitan ciertos privilegios de administrador para poder ejecutarse, por lo que conocer si nuestra sesión dispone, o no, de esta capacidad es una información relevante a la hora de trabajar desde PowerShell. Hoy vamos a ver como verificar permisos de admin en PowerShell para poder tener mayor control de nuestros scripts y, de paso, seguir aprendiendo.

Existe dentro de la documentación de Microsoft un artículo en la base de conocimiento que define el SID (Security Identifier) que presentan los administradores dentro de nuestro Sistema Operativo. El artículo que hace referencia a esta información es KB243330 y el SID que presentan los administradores es S-1-5-32-544.

Veamos el extracto que habla sobre el mismo:

SID: S-1-5-32-544 Name: Administrators Description: A built-in group. After the initial installation of the operating system, the only member of the group is the Administrator account. When a computer joins a domain, the Domain Admins group is added to the Administrators group. When a server becomes a domain controller, the Enterprise Admins group also is added to the Administrators group.

Ahora que tenemos este dato, necesitamos saber si el usuario de nuestra sesión actual, tiene estos privilegios o no. Para poder obtener esta información vamos a utilizar la clase System.Security.Principal.WindowsIdentity. Esta clase cuenta con un método llamado GetCurrent(), que su función principal es generar una lista con los permisos referentes a el usuario que se encuentra ejecutando la sesión.

  [System.Security.Principal.WindowsIdentity]::GetCurrent()

Verificar permisos de administrador en PowerShell

Dentro de esta clase, existe la propiedad Groups que se encarga de enlistar la… :

  ([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups

Verificar permisos de admin en PowerShell

Si a la información anterior le sumamos el SID que nos proporciona el KB que refiere a los grupos de Windows, podemos hacer una condicional simple para comprobar el estado de nuestro usuario:

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

Que nos va a devolver un True o False, dependiendo de los privilegios en la sesión en cuestión.

Happy scripting!

Comments