2012-04-03 33 views

Odpowiedz

20

To jest trochę funkcja mam w module zabezpieczeń:

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 więcej lub mniej to ta sama funkcja, której używam :-) –

+0

Podoba mi się. Prosty i działa. Dzięki – resolver101

4

FYI, dla tych ludzi, którzy mają PowerShell Community Extensions zainstalowane:

PS> Test-UserGroupMembership -GroupName Administrators 
True 

ten cmdlet jest nieco bardziej ogólny, że możesz przetestować członkostwo w grupie w dowolnej grupie.

+0

Ciekawe, czy to wystarczy sprawdzić, czy użytkownik w grupie, czy też sprawdza, czy działają z wszystkimi tokenami przywilejów (podniesionymi)? –

+0

@AndyArismendi, jeśli nie jesteś podniesiony, zwróci false, nawet jeśli użytkownik jest w grupie Administratorzy w systemie z włączoną funkcją UAC. Dzieje się tak dlatego, że proces ma tylko "standardowy" token użytkownika. Jeśli proces jest podwyższony, to zwraca wartość true. –

+1

Dzięki. należy pamiętać, że nazwa grupy ** jest zlokalizowana ** –

3

Oto ona bezpośrednio:

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

Przyjemna jedna linijka. – CJBS

15

PowerShell 4.0 można użyć requires na górze skryptu:

#Requires -RunAsAdministrator 

Wyjścia:

Skrypt „MyScript. ps1 'nie może być uruchomiony, ponieważ zawiera instrukcję "#requires" dla działającą jako Administrator. Bieżąca sesja Windows PowerShell nie działa jako administrator. Uruchom Windows PowerShell za pomocą opcji Uruchom jako administrator, a następnie spróbuj ponownie uruchomić skrypt.

+0

Po wklejeniu '#Requires -RunAsAdministrator' na początku skryptu w PowerShell ISE nic się nie dzieje ... – DarkLite1

+0

Działa w PowerShell ISE dla mnie – DeepSpace101

+0

To jest świetne, ale za pomocą prawego przycisku myszy> Uruchom z PowerShell zamyka się tylko skrypt od razu. 'Read-Host', ponieważ następna linia nie pomaga. Jak sobie z tym poradzić, próbując bezpośrednio uruchomić skrypt? –