comment exécuter un script PowerShell en tant qu'administrateur

58

Sur mon bureau Windows 7, j'ai script.ps1, qui nécessite des privilèges d'administrateur (il démarre un service). Je veux cliquer sur ce script et l'exécuter avec les privilèges d'administrateur.

Quel est le moyen le plus simple d'y parvenir?

Sajee
la source

Réponses:

49

Voici une façon de le faire, à l’aide d’une icône supplémentaire sur votre bureau. J'imagine que vous pouvez déplacer le script de quelqu'un d'autre si vous ne souhaitez afficher qu'une seule icône sur votre bureau.

  1. Créez un raccourci vers votre script Powershell sur votre bureau.
  2. Cliquez avec le bouton droit sur le raccourci, puis cliquez sur Propriétés.
  3. Cliquez sur l' onglet Raccourci
  4. Cliquez sur Avancé
  5. Sélectionnez Exécuter en tant qu'administrateur

Vous pouvez maintenant exécuter le script élevé en double-cliquant simplement sur le nouveau raccourci sur votre bureau.

Kez
la source
37
Cela a fonctionné pour moi, mais Exécuter en tant qu'administrateur n'est devenu disponible qu'après avoir ajouté powershell -f devant le chemin du script, de manière à "compléter" la commande ...
mousio
2
@mousio - J'avais besoin de ça aussi, merci pour le commentaire
m.edmondson
@mousio pouvez-vous me dire pourquoi cette commande fonctionne?
SShaheen
7
@SShaheen - pour que Exécuter en tant qu'administrateur soit disponible, le raccourci doit pointer sur un type d'exécutable (par exemple, powershell.exe) au lieu du document ou du script que le raccourci a indiqué à l'origine. Un raccourci vers script.ps1fonctionne, de même qu'un raccourci vers powershell.exe -f script.ps1, mais ce dernier peut être configuré pour s'exécuter en tant qu'administrateur (voir powershell.exe /?l'explication de l' option -fou du -Filecommutateur)
mousio
16

Sur les systèmes compatibles UAC, pour vous assurer qu'un script s'exécute avec des privilèges d'administrateur complets, ajoutez ce code au début de votre script:

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

lors de l'exécution de votre script avec le commutateur -elevated, il essaiera d'élever les privilèges avant l'exécution.

MDMoore313
la source
Si le script nécessite des paramètres-paramètres?
Kiquenet
Que se passe-t-il si cela m'indique qu'il fonctionne avec tous les privilèges, mais que mon code indique toujours des privilèges d'administrateur insuffisants?
mike.b93
@Kiquenet ajoutez-le param(...)au-dessus et envoyez-les juste avant -elevated, vous devrez être intelligent sur la façon dont vous construisez le ArgumentList, vous voudrez probablement utiliser le String[]formulaire.
TWiStErRob
plutôt chouette - mieux que de créer un raccourci
Mikey
13

Si vous êtes dans le même environnement, vous pouvez le faire:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
mjsr
la source
Le problème, c'est que cela modifie le répertoire de travail du script appelé C:\Windows\System32. Une alternative qui préserve le répertoire actuel: stackoverflow.com/a/57033941/2441655
Venryx
4

Comme il est assis sur votre bureau, je dirais que le moyen le plus simple de le faire est de le faire glisser sur le gadget d'altitude .

Sinon, vous pourriez créer un script séparé à l'elevate aide de la commande de votre script ps1.

Ou, vous pouvez appliquer elevateuniquement au bit de démarrage du service.

badp
la source
1

PowerShell ISE est présent à l'emplacement% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe. Vous pouvez cliquer dessus avec le bouton droit de la souris et sélectionner "Exécuter en tant qu'administrateur", puis exécuter le script à partir de là.

Vous pouvez également le trouver sous Logo Windows> Tous les programmes> Accessoires> Windows PowerShell et faire la même chose avec ces raccourcis.

Vapcguy
la source
0

Si vous voulez une option pour lancer un script Powershell en tant qu'administrateur, directement à partir du menu contextuel de l'Explorateur, consultez la section 2 de ma réponse ici: https://stackoverflow.com/a/57033941/2441655

Venryx
la source
-1

Ajoutez ceci au début du script:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}
Anthony
la source
Cela semble être un sous-ensemble de la réponse de MDMoore313 datant de plus de quatre ans.
Scott