2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463

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

Je travaille toujours sur un compte non administrateur sur mon ordinateur Windows. Parfois, je dois installer des programmes qui nécessitent un accès d'administrateur. Comme j'utilise principalement l'invite de commande de Windows, existe-t-il une commande Windows permettant d'augmenter les privilèges, similaire à la commande du terminal Linux sudo ?

Réponses (15)

272
272
272
2009-09-17 09:29:46 +0000

La commande runas .

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

Il suffit d'exécuter :

runas /noprofile /user:Administrator cmd

pour lancer un shell de commande en tant qu'administrateur

128
128
128
2011-04-12 06:42:00 +0000
  • Elevate ** - _“exécute une commande avec élévation de privilège UAC. C'est utile pour travailler à l'intérieur d'invites de commande ou avec des fichiers batch” _ Ce n'est pas la même chose que sudo, il change l'utilisateur exécutant en Administrateur, mais sa syntaxe est beaucoup plus simple à utiliser que runas, et il peut conserver le répertoire courant, permettant 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 n'a pas pour but de contourner ou de contourner l'UAC (User Account Control), mais de travailler avec lui. Tant que l'UAC est activé, il doit y avoir une sorte d'invite à quelque point dans le processus. Si vous avez besoin de vous débarrasser complètement de l'invite, vous devez désactiver l'UAC .

Le point de douleur que l'Elevate soulage est l'escalade d'un processus particulier à partir d'une coquille non privilégiée, puis la poursuite de la procédure normale. Sans cela, vous devez lancer une invite de commande privilégiée avec clic droit > “Run as Administrator” avant de tenter la commande privilégiée, qui ne peut pas être facilement scriptée.

Cela fonctionne bien avec “Elevate without prompting” dans secpol.msc. Ensemble, ils font la même chose que %wheel ALL=(ALL) NOPASSWD: ALL dans sudo

Une limitation connue est qu'il ne renvoie pas le code d'erreur du programme qu'il élève.

Si votre mémoire musculaire est bloquée sur sudo, créez un alias en utilisant Doskey : doskey sudo=elevate -w

ou batchfile dans PATH : @elevate -w %*

Elevate est un outil tiers écrit par Johannes Passing . Il est téléchargeable et portable (aucune installation nécessaire) : http://code.kliu.org/misc/elevate/

67
67
67
2009-09-17 09:28:30 +0000

Vous pouvez utiliser la commande runas qui est assez similaire, ou vous pouvez consulter le projet sudo for 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 utilisez “runas james acommand”, la commande est exécutée comme si elle était lancée par James, donc elle accède aux paramètres utilisateur de James et tout changement d'utilisateur va dans les dossiers James My Documents & settings, etc. Ainsi, si vous installez une application, par exemple, elle sera installée en tant que James, et non en tant que Bob.

Si, par contre, Bob fait “sudo acommand”, la commande est toujours exécutée en tant que Bob, mais avec des permissions élevées - tout comme la commande sudo de Linux. Pour empêcher tout utilisateur de pouvoir utiliser sudo, vous devez définir un groupe d'utilisateurs sudoers qui contient la liste des utilisateurs normaux qui ont la permission d'augmenter le nombre de leurs droits en utilisant sudo. Les utilisateurs doivent toujours fournir des informations d'identification avant l'élévation.

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

41
41
41
2009-09-17 13:11:39 +0000

Vous pouvez également utiliser les Script Elevation PowerToys .

30
30
30
2012-10-26 07:52:13 +0000

Si vous êtes prêt à passer à des consoles alternatives, il y a ConEmu (je suis l'auteur). L'une de ses caractéristiques - la possibilité d'exécuter des onglets surélevés et non surélevés dans une seule fenêtre ConEmu. Les onglets peuvent également être lancés avec des identifiants différents.

Pour le confort de l'utilisateur, il y a le fichier batch csudo.cmd (qui peut être facilement adopté pour le bash). Lisez la description complète dans 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 dism dans la nouvelle console/onglet élevée (avec l'invite UAC précédente dans Vista ou la boîte de connexion dans XP). Par défaut, csudo démarre la nouvelle console dans un split (peut être modifié par l'édition du contenu de csudo.cmd).

Et bien sûr, vous pouvez le renommer en sudo.cmd si vous aimez le mot “classic” sudo.

24
24
24
2012-08-28 10:36:22 +0000

Méthode rapide :

Trois étapes pour ajouter du sudo.

  1. Ouvrir PowerShell.

  2. Copier le script suivant (Ctrl+C) et le coller 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. Appuyer sur Entrée.

Cela activera de façon permanente la commande sudo dans PowerShell.

Utilisation :

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 pour l'apprentissage :

Note : J'ai mélangé le script des deux articles pour créer le script mentionné ci-dessus. Plutôt que de coller manuellement le script dans le bloc-notes, j'ai ajouté les instructions Out-File pour enregistrer les fichiers ps1 et $profile du script.

Truc : Si vous n'êtes pas un très grand fan des popups UAC (comme moi), enregistrez ce qui suit dans le fichier *.reg et lancez-le :

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
19
19
19
2009-09-17 11:22:41 +0000

Si vous faites cela sous Windows, alors en plus de la commande Exécuter en tant que, comme mentionné dans quelques autres réponses, il y a aussi des façons de le faire avec la souris.

Si vous maintenez la touche Shift enfoncée lorsque vous faites un clic droit sur la plupart des fichiers exécutables sous Windows, vous devriez remarquer quelques options plus avancées. Vous pouvez également télécharger une version plus avancée des RunAs de Microsoft, appelée ShellRunAs , qui comporte des améliorations par rapport à la commande RunAs intégrée, tant en ligne de commande qu'en mode graphique, notamment en vous permettant de sauvegarder vos identifiants de compte

4
4
4
2011-11-17 15:24:50 +0000

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

Lorsque j'utilisais Windows XP, cette application m'a beaucoup aidé. Beta fonctionne sous Windows 7.

3
3
3
2012-09-06 15:01:51 +0000

Comme vous l'avez probablement découvert, les runas vous permettent d'exécuter une commande en tant qu'autre utilisateur, mais ils ne peuvent pas effectuer d'élévation et ne passent pas les répertoires courants, 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'autre utilisateur ; sudo (en fait un alias de su) vous permet d'exécuter une commande élevée. Vous pouvez également faire les deux, en exécutant elevated en tant qu'utilisateur différent. Les répertoires courants, les variables d'environnement et les longues lignes de commande sont transmis par une poignée de main en mémoire partagée entre su qui s'exécute dans le contexte de l'appelant et une copie de lui-même qui s'exécute comme un interlude avec les nouvelles informations d'identification qui démarre ensuite l'enfant. Divulgation complète : je suis l'auteur.

3
3
3
2018-06-14 18:44:28 +0000

Il existe un emballage chocolaté pour ce produit, qui porte le nom pratique de sudo . Vous pouvez installer le paquet avec chocolatey en utilisant cette commande :

choco install -y sudo

Puis dans n'importe quel shell Windows/MS que vous devez utiliser, vous pouvez utiliser sudo comme prévu.

3
3
3
2019-11-07 16:12:24 +0000

J'ai écrit gsudo , un sudo pour windows qui ressemble à *nix sudo et qui a quelques caractéristiques géniales :

  • Fonctionne dans la console actuelle (ci-jointe) sans casser la touche tabulation auto-complète. Ou ajoutez -n pour lancer dans une nouvelle fenêtre.
  • Gère tous les scénarios de manière fiable pour être utilisé sur des scripts. (ExitCodes, StdIn/Out/Err Redirection/Capture)
  • Supporte Cmd/PowerShell/PowerShell Core
  • Cache des références : Si gsudo est invoqué plusieurs fois en quelques minutes, il n'affiche le pop-up UAC qu'une seule fois.

Utilisation

gsudo Ouvre un shell élevé dans la console actuelle.

gsudo [options] {command} [arguments]Exécute la commande spécifiée avec des droits élevés.

Plus pertinent [options] :

  • -n | --new Lance la commande dans une nouvelle console avec des droits élevés (et revient immédiatement).
  • -w | --wait Forcer l'attente de la fin du processus (et renvoyer le code de sortie).
  • -s | --system Exécuter en tant que compte du système local (“NT AUTHORITY\SYSTEM”).
  • --copyev Copier toutes les variables d'environnement dans la session élevée avant l'exécution.

Installation

  • Utilisation de Scoop : scoop install gsudo
  • Utilisation de Chocolatey : choco install gsudo
  • Installation manuelle
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

Un remplacement fonctionnel de sudo pour le terminal mintty de Cygwin serait de placer le script suivant dans le 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 comme vim ou cygrunsrv tout en travaillant dans un terminal sous Windows.

1
1
1
2017-11-20 19:58:47 +0000

La solution la plus simple à mon avis est d'utiliser powerhell pour faire le travail, qui est portable et qui invite l'utilisateur à utiliser l'UAC.

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

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

Le script vbs suivant permet de lancer une commande donnée avec des arguments avec élévation et imite le comportement de la commande unix sudo originale pour un ensemble limité de cas utilisés (il ne cache pas les identifiants et ne permet pas d'exécuter réellement des commandes avec des identifiants différents). Je l'ai mis sur C:\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

0
0
0
2016-01-10 21:08:24 +0000

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.cmd puis ajoutez-le à votre PATH

Note : le runas signifie dans ce contexte “Run as administrator” et non “Run as other user” Taken from here et légèrement modifié pour supprimer l'en-tête cscript.exe de la sortie