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 des privilèges d'administrateur.
Quel est le moyen le plus simple d'y parvenir ?
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 des privilèges d'administrateur.
Quel est le moyen le plus simple d'y parvenir ?
Voici une façon de le faire, à l'aide d'une icône supplémentaire sur votre bureau. Je suppose que vous pourriez déplacer le script quelqu'un d'autre si vous vouliez n'avoir 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.
Sur les systèmes activés par UAC, pour s'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'
Maintenant, lors de l'exécution de votre script, il s'appellera à nouveau lui-même et tentera d'élever les privilèges avant de s'exécuter. Le commutateur -elevated l'empêche de répéter si quelque chose échoue.
Vous pouvez retirer le -noexit
si le terminal doit se fermer automatiquement lorsque le script se termine.
Puisqu'il se trouve sur votre bureau, je dirais que le moyen le plus simple d'y parvenir est de le faire glisser dans le dossier de l'ordinateur. gadget d'élévation .
Sinon, vous pourriez faire un script séparé en utilisant le site elevate
命令 sur votre ps1 script.
Ou bien, vous pouvez appliquer elevate
juste pour le bit de démarrage du service.
En plus de Réponse de MDMoore313 ci-dessus :
Si nous voulons exécuter les commandes dans le même répertoire de travail que celui dans lequel nous nous trouvons actuellement, nous devons ajouter quelques éléments :
#### START ELEVATE TO ADMIN #####
param(
[Parameter(Mandatory=$false)]
[switch]$shouldAssumeToBeElevated,
[Parameter(Mandatory=$false)]
[String]$workingDirOverride
)
# If parameter is not set, we are propably in non-admin execution. We set it to the current working directory so that
# the working directory of the elevated execution of this script is the current working directory
if(-not($PSBoundParameters.ContainsKey('workingDirOverride')))
{
$workingDirOverride = (Get-Location).Path
}
function Test-Admin {
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
# If we are in a non-admin execution. Execute this script as admin
if ((Test-Admin) -eq $false) {
if ($shouldAssumeToBeElevated) {
Write-Output "Elevating did not work :("
} else {
# vvvvv add `-noexit` here for better debugging vvvvv
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -file "{0}" -shouldAssumeToBeElevated -workingDirOverride "{1}"' -f ($myinvocation.MyCommand.Definition, "$workingDirOverride"))
}
exit
}
Set-Location "$workingDirOverride"
##### END ELEVATE TO ADMIN #####
# Add actual commands to be executed in elevated mode here:
Write-Output "I get executed in an admin PowerShell"
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.