41 votes

Acquisition de privilèges administratifs dans PowerShell

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 ?

36voto

RomanSt Points 627

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"

20voto

sblom Points 173

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.

12voto

Ryan Rinaldi Points 1683

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.

5voto

Dave Cross Points 17363

Si vous souhaitez exécuter PowerShell toujours en tant qu'administrateur, vous pouvez faire un clic droit sur le raccourci PowerShell, puis cliquer sur le bouton "Avancé..." dans l'onglet "Raccourci", puis sélectionner "Exécuter en tant qu'administrateur".

3voto

Hashbrown Points 175

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.

SistemesEz.com

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.

Powered by:

X