2012-04-03 22 views

risposta

20

Questa è la piccola funzione che ho in un modulo di protezione:

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 più o meno è la stessa funzione Io uso :-) –

+0

Mi piace. Semplice e funziona. Grazie – resolver101

4

FYI, per quelle persone che hanno la PowerShell Community Extensions installati:

PS> Test-UserGroupMembership -GroupName Administrators 
True 

Questo cmdlet è un po 'più generico in quanto puoi verificare l'appartenenza al gruppo in qualsiasi gruppo.

+0

Solo curioso, basta controllare se l'utente nel gruppo o controlla anche se sono in esecuzione con tutti i token privilegiati (elevati)? –

+0

@AndyArismendi se non si è elevati, questo restituirà false anche se l'utente si trova nel gruppo Administrators su un sistema abilitato UAC. Questo perché il processo ha solo un token utente "standard". Se il processo è elevato, restituisce true. –

+1

Grazie. sappiate che il ** groupname è localizzato ** –

3

Qui è direttamente:

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

Nice one-liner. – CJBS

15

in PowerShell 4.0 è possibile utilizzare requires nella parte superiore dello script:

#Requires -RunAsAdministrator 

Uscite:

Lo script 'MyScript. ps1 'non può essere eseguito perché contiene un'istruzione "#requires" per eseguita come amministratore. La sessione corrente di Windows PowerShell non è in esecuzione come amministratore. Avviare Windows PowerShell utilizzando l'opzione Esegui come amministratore, quindi provare di nuovo a eseguire lo script.

+0

Quando si incolla '#Requires -RunAsAdministrator' nella parte superiore di uno script nel PowerShell ISE non succede nulla ... – DarkLite1

+0

Funziona in PowerShell ISE per me – DeepSpace101

+0

Questo è ottimo, ma usando il tasto destro del mouse> Esegui con PowerShell si chiude semplicemente il script subito. 'Read-Host' come la riga successiva non aiuta. Come gestirlo quando provi a eseguire direttamente uno script? –