it-swarm.com.de

Wie kann ich in einem PowerShell-Skript überprüfen, ob ich mit Administratorrechten ausgeführt werde?

Wie kann ich in einem PowerShell-Skript überprüfen, ob ich mit Administratorrechten ausgeführt werde?

54
Michael Kelley
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

(von Befehlszeilensicherheitstricks )

45
davey

In Powershell 4.0 können Sie erfordert oben in Ihrem Skript verwenden:

#Requires -RunAsAdministrator

Ausgänge:

Das Skript 'MyScript.ps1' kann nicht ausgeführt werden, da es eine "#requires" -Anweisung zum Ausführen als Administrator enthält. Die aktuelle Windows PowerShell-Sitzung wird nicht als Administrator ausgeführt. Starten Sie Windows PowerShell mit der Option Als Administrator ausführen und versuchen Sie dann erneut, das Skript auszuführen.

67
eddiegroves
function Test-Administrator  
{  
    $user = [Security.Principal.WindowsIdentity]::GetCurrent();
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  
}

Führen Sie die obige Funktion aus. Wenn das Ergebnis a True ist, verfügt der Benutzer über Administratorrechte.

33
Shay Levy

als Kombination der obigen Antworten können Sie am Anfang Ihres Skripts Folgendes verwenden:

# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator  
{  
    [OutputType([bool])]
    param()
    process {
        [Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
        return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
    }
}

if(-not (Test-Administrator))
{
    # TODO: define proper exit codes for the given errors 
    Write-Error "This script must be executed as Administrator.";
    exit 1;
}

$ErrorActionPreference = "Stop";

# do something

Eine andere Methode besteht darin, Ihr Skript mit dieser Zeile zu starten, wodurch die Ausführung verhindert wird, wenn es nicht mit Administratorrechten gestartet wird.

#Requires -RunAsAdministrator
0
MovGP0

Dadurch wird überprüft, ob Sie Administrator sind. Wenn dies nicht der Fall ist, wird es in PowerShell ISE als Administrator erneut geöffnet.

Hoffe das hilft!

    $ver = $Host | select version
    if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}

    # Verify that user running script is an administrator
    $IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
    If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
    {
      "`nERROR: You are NOT a local administrator.  Run this script after logging on with a local administrator account."
        # We are not running "as Administrator" - so relaunch as administrator

        # Create a new process object that starts PowerShell
        $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";

        # Specify the current script path and name as a parameter
        $newProcess.Arguments = $myInvocation.MyCommand.Definition;

        # Indicate that the process should be elevated
        $newProcess.Verb = "runas";

        # Start the new process
        [System.Diagnostics.Process]::Start($newProcess);

        # Exit from the current, unelevated, process
        exit
    }
0
blayderunner123