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?

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.


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.


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"

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.


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.



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

Cela semble être un sous-ensemble de la réponse de MDMoore313 datant de plus de quatre ans.
Scott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.