Je n'ai qu'un seul compte sur ma machine Windows Vista, et cet utilisateur dispose de privilèges administratifs. Cependant, lorsque j'essaie d'exécuter une commande dans PowerShell pour arrêter un certain processus, je reçois un message "Accès refusé". Comment puis-je devenir l'administrateur ?
Réponses
Trop de publicités?La méthode Powershell v2, selon Microsoft, consiste à faire un clic droit sur le raccourci et choisir Exécuter en tant qu'administrateur.
Et pour élever les privilèges dans une fenêtre Powershell :
start-process powershell –verb runAs
Ce qui ressemblerait (de manière répétitive) à ceci à partir d'un fichier batch cmd.exe, d'un raccourci ou de la ligne de commande :
powershell "start-process powershell -verb runas"
La manière la plus simple de faire cela est de lancer Powershell avec des jetons d'administration. Pour ce faire, vous faites un clic droit sur Powershell (ou un raccourci vers celui-ci) et cliquez sur "exécuter en tant qu'administrateur". Alternativement, vous pouvez utiliser elevate.cmd.
Ceci ouvre une nouvelle instance de PowerShell :
function Run-Elevated ($scriptblock)
{
# TODO : faire de -NoExit un paramètre
# TODO : ouvrir simplement PS (sans paramètre -Command) si $scriptblock -eq ''
$sh = new-object -com 'Shell.Application'
$sh.ShellExecute('powershell', "-NoExit -Command $scriptblock", '', 'runas')
}
Je m'attends à ce qu'il y ait des problèmes avec ceci - en particulier, vous ne récupérerez pas la sortie de votre bloc de script dans le script appelant. D'un autre côté, elle sera là dans la nouvelle instance PS afin que vous puissiez bidouiller avec.
Vous pouvez utiliser ceci pour auto-élever un script lors de son exécution:
#en haut du script
if (!
#rôle actuel
(New-Object Security.Principal.WindowsPrincipal(
[Security.Principal.WindowsIdentity]::GetCurrent()
#est admin?
)).IsInRole(
[Security.Principal.WindowsBuiltInRole]::Administrator
)
) {
#élever le script et quitter l'exécution non élevée actuelle
Start-Process `
-FilePath 'powershell' `
-ArgumentList (
#aplatir en un seul tableau
'-File', $MyInvocation.MyCommand.Source, $args `
| %{ $_ }
) `
-Verb RunAs
exit
}
#exemple de programme, ceci sera exécuté en tant qu'administrateur
$args
Pause
NB ceci respecte toujours les règles de sécurité (comme la politique d'exécution) et demandera gentiment une autorisation UAC. Cela peut être contourné, mais vous ne devriez pas le faire.
- Réponses précédentes
- Plus de réponses