Réponses:
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.
Vous pouvez maintenant exécuter le script élevé en double-cliquant simplement sur le nouveau raccourci sur votre bureau.
script.ps1
fonctionne, 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 -f
ou du -File
commutateur)
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.
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.
Si vous êtes dans le même environnement, vous pouvez le faire:
Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
C:\Windows\System32
. Une alternative qui préserve le répertoire actuel: stackoverflow.com/a/57033941/2441655
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 elevate
uniquement au bit de démarrage du service.
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.
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
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
}
powershell -f
devant le chemin du script, de manière à "compléter" la commande ...