152 votes

Dans un script PowerShell, comment puis-je vérifier si je m'exécute avec des privilèges d'administrateur ?

Dans un script PowerShell, comment puis-je vérifier si je m'exécute avec des privilèges d'administrateur ?

142voto

Jack M. Points 3353

Dans Powershell 4.0, vous pouvez utiliser nécessite en haut de votre script :

#Requires -RunAsAdministrator

Sorties :

Le script 'MyScript.ps1' ne peut pas être exécuté parce qu'il contient une déclaration "#requires" pour l'exécution en tant qu'administrateur. La session Windows PowerShell actuelle n'est pas exécutée en tant qu'administrateur. Démarrez Windows PowerShell en utilisant l'option Exécuter en tant qu'administrateur, puis essayez à nouveau d'exécuter le script.

134voto

Carling Points 229
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

(de Conseils de sécurité en ligne de commande )

51voto

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

Exécutez la fonction ci-dessus. SI le résultat est True, l'utilisateur a des privilèges d'administrateur.

4voto

MovGP0 Points 121

Comme une combinaison des réponses ci-dessus, vous pouvez utiliser quelque chose comme ce qui suit au début de votre script :

# 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

Une autre méthode consiste à lancer votre script avec cette ligne, ce qui empêchera son exécution s'il n'est pas lancé avec des droits d'administrateur.

#Requires -RunAsAdministrator

2voto

Todd Sharp Points 2382

Cela vérifiera si vous êtes un administrateur, si ce n'est pas le cas, il s'ouvrira à nouveau dans PowerShell ISE en tant qu'administrateur.

J'espère que cela vous aidera !

    $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
    }

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X