2012-04-03 31 views

Respuesta

20

Esta es la pequeña función que tengo en un módulo de seguridad:

function Test-IsAdmin { 
    try { 
     $identity = [Security.Principal.WindowsIdentity]::GetCurrent() 
     $principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity 
     return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) 
    } catch { 
     throw "Failed to determine if the current user has elevated privileges. The error was: '{0}'." -f $_ 
    } 

    <# 
     .SYNOPSIS 
      Checks if the current Powershell instance is running with elevated privileges or not. 
     .EXAMPLE 
      PS C:\> Test-IsAdmin 
     .OUTPUTS 
      System.Boolean 
       True if the current Powershell is elevated, false if not. 
    #> 
} 
+0

+1 más o menos es la misma función que uso :-) –

+0

Me gusta. Simple y funciona. Gracias – resolver101

4

FYI, para aquellas personas que tienen el PowerShell Community Extensions instalado:

PS> Test-UserGroupMembership -GroupName Administrators 
True 

Este cmdlet es un poco más genérica en ese puede probar la membresía grupal en cualquier grupo.

+0

Simplemente curioso, ¿esto solo comprueba si el usuario en el grupo o también comprueba si se están ejecutando con todos los tokens de privilegios (elevado)? –

+0

@AndyArismendi si no está elevado, esto dará como resultado falso incluso si el usuario está en el grupo Administradores en un sistema habilitado para UAC. Esto se debe a que el proceso tiene solo un token de usuario "estándar". Si el proceso es elevado, esto devuelve verdadero. –

+1

Gracias. tenga en cuenta que el ** nombre de grupo está localizado ** –

3

aquí está directamente:

$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` 
     [Security.Principal.WindowsBuiltInRole] "Administrator") 
+1

Bonito trazador de líneas. – CJBS

15

En PowerShell 4.0 se puede utilizar requires 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 ejecutándose como administrador. La sesión actual de Windows PowerShell no se está ejecutando como administrador. Inicie Windows PowerShell utilizando la opción Ejecutar como administrador y luego intente ejecutar el script nuevamente.

+0

Cuando pega '#Requires -RunAsAdministrator' en la parte superior de una secuencia de comandos en el ISE de PowerShell no ocurre nada ... – DarkLite1

+0

Funciona en PowerShell ISE para mí – DeepSpace101

+0

Esto es genial, pero al usar el botón derecho del mouse> Ejecutar con PowerShell simplemente cierra la secuencia de comandos de inmediato. 'Read-Host' como la siguiente línea no ayuda. ¿Cómo lidiar con esto cuando intenta ejecutar directamente un script? –

Cuestiones relacionadas