Existe-t-il une commande 'sudo' pour Windows?

448

Je travaille toujours sur un compte non-administrateur sur mon ordinateur Windows. Parfois, j'ai besoin d'installer des programmes nécessitant un accès administrateur. Comme j'utilise principalement l'invite de commande Windows, existe-t-il une commande Windows pour élever les privilèges, similaire à la commande de terminal Linux sudo?

ukanth
la source
7
Je crois que le terme que vous recherchez est l'accès "élevé". Même si vos informations d'identification disposent d'une autorisation d'administrateur, les processus sous vos informations d'identification ne disposent pas d'autorisations d'administrateur jusqu'à ce que vous «exécutiez» la commande. Dans Windows, ils appellent cela "élever".
surfasb
7
@IGRACH pas sur mon powershell ...
Jiggunjer
2
Je l'utilisedoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William
1
Essayez my wsudo, un sudooutil semblable à Windows disponible sous forme de package Chocolatey.
noseratio

Réponses:

266

La commande runas .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Il suffit de courir:

runas /noprofile /user:Administrator cmd 

démarrer un shell de commande en tant qu'administrateur

Davy Landman
la source
22
Vous voudrez peut-être que le profil soit chargé (par exemple, y compris les variables d'environnement) pour toute utilisation étendue. Dans ce cas, laissez tomber le /noprofile.
Richard
6
Cela ne fonctionne pas pour moi. Après avoir tapé mon mot de passe, l'invite de commande est fermée.
Jonas
55
est-ce que cela ne demande pas le mot de passe de l'administrateur? sudo vous demande votre mot de passe!
n611x007
15
Malheureusement, ceci est sérieusement obsolète. Runasexécute simplement des commandes sous un autre ensemble d'informations d'identification. Même si vos informations d'identification disposent d'autorisations d'administrateur, cela ne signifie pas que tous les processus sous vos informations d'identification s'exécutent en tant qu'administrateur.
surfasb
12
+1 pour "obsolète" car les runas ne peuvent pas contourner UAC. Au lieu de cela, appuyez sur le bouton Windows, tapez cmd et appuyez sur Ctrl + Maj + Entrée.
jaune mellow
125

J'ai découvert elevate aujourd'hui, qui "exécute une commande avec une élévation de privilèges UAC. Cela est utile pour travailler à l'intérieur d'invites de commande ou avec des fichiers de commandes." Ce n'est pas la même chose sudo, cela change l'utilisateur exécutant en administrateur, mais sa syntaxe est beaucoup plus simple à utiliser que runas, et il peut conserver le répertoire actuel, permettant ainsi l'utilisation de chemins relatifs.

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

Elevate ne vise pas à contourner ou contourner le contrôle de compte d'utilisateur (UAC), mais à l'utiliser. Tant que le contrôle de compte d'utilisateur est activé, il doit y avoir une sorte d'invite à un moment donné du processus. Si vous devez vous débarrasser complètement des invites, vous devez désactiver UAC .

Le problème de soulagement soulage est l'escalade d'un processus particulier à partir d'un shell non privilégié, puis se poursuit normalement. Sans cela, vous devez démarrer une invite de commande privilégiée avec un clic droit> "Exécuter en tant qu'administrateur" , qui ne peut pas être scriptée facilement, avant de tenter la commande privilégiée.

Matt Wilkie
la source
5
Cela va parfaitement avec "Elevate without prompting" dans secpol.msc. Ensemble, ils font la même chose que %wheel ALL=(ALL) NOPASSWD: ALLdans sudo.
sayap
2
@sayap, juste pour être clair, voulez-vous dire ceci: ss64.com/nt/syntax-uac.html ?
Matt Wilkie
5
Le seul problème que je rencontre avec elevate (v1.3.0) est qu’il ne renvoie pas le code d’erreur du programme en cours d’élévation.
Ken
4
Sudo.bat: @elevate %*=> profit!
Joe DF
10
Il serait bon de mentionner que c'est un utilitaire externe, OOTB manquant.
Bonjour Angel
67

Vous pouvez utiliser la commande runas qui est un peu similaire, ou vous pouvez vérifier le projet sudo pour Windows sur SourceForge qui ajoute une commande sudo.

La différence est subtile:

Disons que vous avez deux utilisateurs. Bob est un utilisateur normal et James est un administrateur.

Si vous vous connectez en tant que Bob et que vous utilisez "runas james acommand", la commande est exécutée comme si elle était exécutée par James. Elle accède ainsi aux paramètres utilisateur de James et toutes les modifications apportées aux utilisateurs sont placées dans les dossiers James Mes Documents & Settings, etc. installez une application, par exemple, elle sera installée en tant que James, pas en tant que Bob.

Par contre, si Bob "commande sudo", la commande est toujours exécutée en tant que Bob, mais avec des autorisations élevées - tout comme la commande Linux sudo. Pour empêcher tout utilisateur de pouvoir exécuter sudo, vous devez définir un groupe d'utilisateurs sudoers contenant la liste des utilisateurs normaux autorisés à élever à l'aide de sudo. Les utilisateurs doivent toujours fournir leurs informations d'identification avant l'élévation.

Parfois, la différence n'est pas importante, parfois, et je trouve que les deux commandes peuvent être utiles.

Simon P. Stevens
la source
2
Êtes-vous sûr? Lorsque j'exécute sudo dans ubuntu, si mon thème actuel est dans ~/.themesl'application, l'application sudo-ed ne pourra pas accéder à ce thème, car il n'y est pas /home/root/.themes, et utilisera le thème par défaut de gtk.
Hasen
5
@hasen j - votre problème vient du fait que ~ / .themes est évalué avant que la commande ne soit exécutée (et donc avant de basculer vers la racine).
Jared
1
Une autre solution, à l'exception de celle hébergée sur GitHub, est windosu: github.com/tehsenaus/windosu Je viens de la trouver, et cela semble bien fonctionner. La chose préférée est son installation facile. Juste "npm installer -g windosu".
Venryx
39

Vous pouvez également utiliser les scripts PowerToys d'élévation .

Quog
la source
Génial - exactement ce que je cherchais. Je ne voulais pas exécuter en tant que commande a un utilisateur différent, seulement pour l'exécuter avec des privilèges élevés.
orip
Exactement la bonne solution à ce problème! Qui veut Runas avec sa syntaxe en désordre?
Stabledog
1
J'ai souvent souhaité que la commande elevate soit intégrée à Windows. C'est un outil fantastique.
nhinkle
Il existe désormais une collection Elevation PowerToys du même auteur, à partir de laquelle la création d'un script à élévation automatique est particulièrement pertinente.
Matt Wilkie
1
@barlop bien sûr que non. Cela irait à l'encontre de l'objectif de l'UAC.
nhinkle
29

Si vous êtes prêt à passer à d'autres consoles, il y a ConEmu (je suis l'auteur). L'une de ses fonctionnalités - la possibilité d'exécuter des onglets surélevés et non surélevés dans la même fenêtre ConEmu. Les onglets peuvent également être démarrés avec différentes informations d'identification.

Pour le confort de l'utilisateur, csudo.cmd (qui peut être facilement adopté pour bash) est un fichier de commandes . Lisez la description complète dans le wiki du projet . En bref, lorsque vous exécutez une commande à partir d'un onglet non élevé existant, par exemple

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu démarre dismdans la nouvelle console / onglet élevé (avec la précédente invite UAC sous Vista ou la zone de connexion sous XP).

Par défaut, la csudonouvelle console démarre dans un groupe (il peut être modifié en modifiant le csudo.cmdcontenu).

Et bien sûr, vous pouvez le renommer sudo.cmdsi vous aimez le sudomot "classique" .

sudo dans ConEmu / Windows

Maximus
la source
1
csudo a depuis longtemps été inclus dans la distribution de ConEmu. Aucun lien n'est nécessaire du tout.
Maximus
Le problème est que le nouvel onglet de la console devient inutilisable après la commande sudo'd. Donc, vous ne pouvez pas continuer à travailler dans l'onglet élevé, recevez simplement un press enter or esc to exitmessage.
Jiggunjer
1
Bien sûr que vous ne pouvez pas. Même sous Unix, vous revenez à un terminal non surélevé une fois que la sudocommande est exécutée! Vous allez mal.
Maximus
1
1) Si vous voulez ouvrir une nouvelle fenêtre ou un nouvel onglet, vous pouvez également le conserver, laissez l’ utilisateur choisir s’il souhaite continuer. 2) Sur mon ubuntu, je pense que je n’ai pas besoin de me soulever à chaque fois, l’élévation dure quelques minutes. 3) cette application a un million d'options, mais rien pour cela? Peut-être que je suis gâté.
Jiggunjer
24

Méthode rapide:

Trois étapes pour ajouter sudo.

  1. Ouvrez PowerShell.

  2. Copiez le script suivant (Ctrl + C) et collez-le dans PowerShell (Alt + Espace + E + P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Hit Enter.

Cela activera en permanence les sudocommandes dans PowerShell.

Usage:

sudo <process-name> [param1 [param2 [param3]]]

Exemples:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Méthode longue d'apprentissage:

Remarque: j'ai mélangé le script des deux articles pour créer le script susmentionné. Plutôt que de coller manuellement le script dans le bloc-notes, j'ai ajouté les Out-Fileinstructions à enregistrer ps1et les $profilefichiers du script.

Conseil: si vous n’êtes pas très fan des popups UAC (comme moi), enregistrez le fichier suivant dans le fichier * .reg et exécutez-le:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
corbeau vulcan
la source
1
J'aime la solution Powershell pour cette question. Cela doit être le moyen le plus simple d'élever quelque chose. Les fichiers .bat existants peuvent facilement être convertis en POSH
Mitchell Skurnik
Vous avez cette erreur sur Windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov
@sowrov, voir [cet article] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Par défaut, les scripts PowerShell sont désactivés sur toute installation Windows. Vous devez l'activer avec cette commande set-executionpolicy remotesigned. D'autres options remotesignedsont décrites dans la documentation officielle .
vulcan corbeau
Les lecteurs notent que ce script ps est un wrapper pour la powershell -c start -verb runas program.exefonctionnalité. Notez également que vous ne pouvez pas élever ce niveau avec l'invite cmd (en mode natif). Powershell est la meilleure option native.
Jiggunjer
la même chose peut-elle être faite dans cmd.exe au lieu de Powershell env? PowerShell ne calcule pas avec Clink et sans fenêtre Clink ne calcule pas du tout ...
PJJ
20

Si vous le faites sous Windows, outre la commande Exécuter en tant que mentionné dans quelques réponses, il existe également des moyens de le faire avec la souris.

Si vous maintenez la Shifttouche enfoncée lorsque vous cliquez avec le bouton droit sur la plupart des fichiers exécutables dans Windows, vous devriez remarquer quelques options plus avancées. L'un d'eux est l' Run As...option " " (je pense que cela s'appelle " Run As Administrator" à partir de Vista).

Vous pouvez également télécharger une version plus avancée de RunAs de Microsoft, appelée ShellRunAs . Cette version présente des améliorations par rapport à la commande RunAs intégrée, à la fois en mode de commande et en mode graphique, permettant notamment de sauvegarder les informations d'identification du compte.

GAThrawn
la source
4

Il existe un paquet chocolaté avec le nom pratique sudo . Vous pouvez installer le paquet avec chocolatey en utilisant cette commande:

choco install -y sudo

Ensuite, quel que soit le shell Windows / MS que vous utilisiez, vous pouvez l'utiliser sudocomme prévu.

ypid
la source
3

Surun est une application gratuite à code source ouvert qui permet à certains programmes de s'exécuter avec des droits d'administrateur, sans fournir de mot de passe, sans modifier le registre des utilisateurs ou modifier les variables d'environnement.

Lorsque j'utilisais Windows XP, cette application m'aide beaucoup. La bêta fonctionne sous Windows 7.

diimdeep
la source
Surun fait un excellent travail. Cependant, parfois sous Windows 8 et 8.1, ses valeurs par défaut ne sont pas idéales. Dans la mesure où elle remplace l'exécution de Windows en tant que fonction, vous ne pouvez pas lancer d'invite de commande avec un clic droit sur l'écran de démarrage.
Wolf
3

Comme vous l'avez probablement découvert, les runas vous permettent de vous lancer en tant qu'utilisateur différent, mais ils ne peuvent pas faire d'altitude et ne passent pas les répertoires actuels, les variables d'environnement ou les longues lignes de commande.

Hamilton C shell résout ce problème avec un véritable su et sudo. su vous permet d'exécuter une commande en tant qu'utilisateur différent; sudo (en fait un alias à su) vous permet d'exécuter une commande élevée. Vous pouvez également faire les deux, en exécutant en tant qu'utilisateur différent. Les répertoires actuels, les variables d’environnement et les longues lignes de commande sont passés au moyen d’une négociation en mémoire partagée entre l’application su exécutée dans le contexte de l’appelant et une copie de lui-même exécutée comme interlude avec les nouvelles informations d’identification qui démarrent ensuite l’enfant. Divulgation complète: je suis l'auteur.

Nicole Hamilton
la source
1

Pour sudoremplacer le minttyterminal de Cygwin, le script suivant devrait être placé dans le chemin PATH de l'utilisateur:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Pour moi, c’est le seul remplacement viable pour élever les privilèges de programmes tels que vimou cygrunsrvtout en travaillant dans un terminal sous Windows.

Karafior
la source
1

Ce script fait le travail:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Enregistrez-le sous sudo.cmdpuis ajoutez-le à votre PATH

Note: le runasmoyen dans ce contexte "Exécuter en tant qu'administrateur" et non "Exécuter en tant qu'autre utilisateur"

Tiré d'ici et légèrement modifié pour supprimer l'en-tête cscript.exe de la sortie

Charles Milette
la source
1
Cela crée une nouvelle console. La nouvelle fenêtre disparaîtra une fois la commande sudo'd terminée - vous ne pourrez même pas lire le résultat.
jeudi
Malheureusement, oui. Mais il peut être utilisé pour des commandes de base (copie), des outils graphiques, ou pour ouvrir un cmd d’administrateur.
Charles Milette
1

La solution la plus simple, à mon avis, consiste à utiliser powershell pour effectuer le travail, qui est portable et qui incitera l'utilisateur à utiliser le contrôle de compte d'utilisateur.

Vous pouvez simplement l'exécuter dans n'importe quel shell (cmd ou powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
petit
la source
0

Le script vbs suivant fait le tour pour moi. Je le metsC:\Windows\System32

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Exemple d'utilisation sur une invite de commande sudo net start service

Ceztko
la source