Búsqueda de sitios web

Compruebe si PowerShell se está ejecutando como administrador [3 formas]


Uso de las clases WindowsPrincipal y WindowsIdentity

Utilice las clases WindowsPrincipal y WindowsIdentity para comprobar si PowerShell se ejecuta como administrador.

Utilice las clases WindowsPrincipal y WindowsIdentity:

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal(
                    [Security.Principal.WindowsIdentity]::GetCurrent()
                    )
$isAdmin = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($isAdmin) {
    Write-Host "PowerShell is running as admin."
} else {
    Write-Host "PowerShell is not running as admin."
}

PRODUCCIÓN :

PowerShell is running as admin.

El código anterior devolvió PowerShell se está ejecutando como administrador si PowerShell se está ejecutando como administrador; de lo contrario, devolvió PowerShell no se está ejecutando como administrador.

Analicemos el código para entenderlo.

Primero, utilizamos el cmdlet New-Object para crear un nuevo objeto WindowsPrincipal basado en la identidad actual de Windows, que representa al usuario que ejecuta la sesión de PowerShell; almacenamos la referencia de este objeto en la variable $currentPrincipal.

Luego, invocamos el método IsInRole() en el objeto $currentPrincipal (creado en el paso anterior) y pasamos el valor de enumeración WindowsBuiltInRole.Administrator. como argumento para determinar si el usuario actual pertenece al grupo de administradores.

Si el método IsInRole() devolvió True, el usuario actual ejecutó PowerShell como administrador. Por otro lado, si devolvía False, el usuario actual no estaba ejecutando PowerShell como administrador.

Usamos las clases WindowsPrincipal y WindowsIdentity del espacio de nombres System.Security.Principal para el fragmento de código anterior para verificar si el usuario actual tiene privilegios de administrador. basado en la pertenencia al grupo de la identidad de Windows de un usuario.

También podemos usar la clase WindowsIdentity del espacio de nombres System.Security con el operador -match para comprobar si PowerShell se ejecuta con privilegios de administrador (también conocido como " derechos elevados").

Utilice la clase WindowsIdentity:

$isAdmin = [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
if ($isAdmin) {
    Write-Host "PowerShell is running as admin."
} else {
    Write-Host "PowerShell is not running as admin."
}

PRODUCCIÓN :

PowerShell is running as admin.

En el ejemplo de código anterior, [bool] convierte el resultado en un valor bool. Luego, el método GetCurrent() de la clase WindowsIdentity recuperó la identidad de Windows para el usuario que se estaba ejecutando actualmente.

A continuación, se utilizó .groups para acceder a la propiedad group de la identidad para determinar a qué grupos de usuarios pertenece la identidad. Finalmente, el -match "S-1-5-32-544" evalúa si los grupos tienen el SID conocido del grupo de administradores, la identidad solo lo contendrá si Se utilizó la opción "ejecutar como administrador".

Usando el comando net user

Utilice el comando net user para comprobar si PowerShell se está ejecutando como administrador.

Utilice el comando de usuario neto:

net user mehvish

PRODUCCIÓN :

User name                    Mehvish
Full Name
Comment
User's comment
Country/region code          000 (System Default)
...                          ...
...                          ...
...                          ...
Local Group Memberships      *Administrators
Global Group memberships     *None
The command was completed successfully.

Usamos el comando net user para verificar si el usuario actual está en el grupo administrativo. No olvide reemplazar mehvish con su nombre de usuario mientras usa el comando net user en PowerShell. Usando este comando, obtendremos muchos detalles de los cuales necesitamos ubicar la sección Membresías de grupos locales. Por ejemplo, si incluye "Administradores", significa que el usuario actual es miembro del grupo Administradores y PowerShell se ejecuta con privilegios de administrador.

También puede verificar los privilegios de administrador usando el comando Get-ExecutionPolicy. Si la política de ejecución no es "Restringida", entonces PowerShell se ejecuta como administrador. Tenga en cuenta que la política de ejecución "Restringida" denota un contexto no administrativo.

Usando la declaración Requires

Si está utilizando PowerShell versión 4.0 o superior, puede usar la instrucción Requires en la parte superior de su secuencia de comandos para evitar que la secuencia de comandos se ejecute como un usuario normal. Vea el siguiente ejemplo.

El uso requiere declaración:

#Requires -RunAsAdministrator

Ahora, ejecute dos procesos de PowerShell, primero, con privilegios de administrador (elevados) y segundo, sin privilegios de administrador (no elevados). En ambos procesos, vaya al directorio donde está su archivo de script y ejecútelo.

En nuestro caso, tenemos el archivo testPS.ps1 que contiene solo la declaración #Requires -RunAsAdministrator y está en E:\Test\Script Files directorio . Entonces, ejecutaremos nuestro archivo de script como ./testPS.ps1 donde el punto significa directorio actual porque navegamos al directorio E:\Test\Script Files.

No obtendremos ningún error al ejecutar el archivo testPS.ps1 desde el proceso elevado de PowerShell, pero obtuvimos el siguiente error al ejecutar el archivo testPS.ps1 desde un proceso que no sea proceso elevado de PowerShell.

Error al ejecutar el archivo testPS.ps1 desde un proceso de PowerShell no elevado:

./testPS.ps1 : The script 'testPS.ps1' cannot be run because it contains a "#requires" statement for running as
Administrator. The current Windows PowerShell session is not running as Administrator. Start Windows PowerShell 
using the Run as Administrator option, then try rerunning the script.
At line:1 char:1
+ ./testPS.ps1
+ ~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (testPS.ps1:String) [], ScriptRequiresException
    + FullyQualifiedErrorId : ScriptRequiresElevation

Se trata de cómo comprobar si PowerShell se está ejecutando como administrador.

Artículos relacionados