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.

Saludos,

Comments