Dans un script PowerShell, comment puis-je vérifier si je m'exécute avec des privilèges d'administrateur ?
Réponses
Trop de publicités?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.
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.
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
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
}