web-dev-qa-db-fra.com

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

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. Étant donné que j'utilise principalement l'invite de commande Windows, existe-t-il une commande Windows permettant de hiérarchiser les privilèges, similaire à la commande de terminal Linux Sudo?

435
ukanth

Le runas commande.

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

Il suffit de courir:

runas /noprofile /user:Administrator cmd 

démarrer une commande Shell en tant qu'administrateur

262
Davy Landman

J'ai découvert elevate today que "exécute une commande avec une élévation de privilège UAC. Cela est utile pour travailler à l'intérieur des invites de commande ou avec des fichiers de commandes." Ce n'est pas la même chose que 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 courant, 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é, a une sorte d'Invite à un peu dans le processus. Si vous avez besoin de vous débarrasser complètement des invites, vous devez désactiver UAC .

Le point de difficulté soulager soulage est l'escalade d'un processus particulier à partir d'un shell non privilégié, puis continue comme d'habitude. Sans cela, vous devez démarrer une commande privilégiée Invite avec clic droit> "Exécuter en tant qu'administrateur" , qui ne peut pas être facilement scriptée, avant de tenter la commande privilégiée.

120
matt wilkie

Vous pouvez utiliser la commande runas qui est un peu similaire, ou vous pouvez consulter le Sudo pour Windows projet 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 avait été exécutée par James. Elle accède ainsi aux paramètres utilisateur de James. Toute modification apportée à cet utilisateur est placée dans les dossiers James My Documents & settings , etc. Ainsi, si vous installez une application, disons, elle sera installée en tant que James, pas en tant que Bob.

Par contre, si Bob exécute "Sudo acommand", 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 utiliser 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.

66
Simon P Stevens

Vous pouvez également utiliser le Script Elevation PowerToys .

39
Quog

Si vous êtes prêt à passer à d'autres consoles, il existe 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, il existe un fichier de commandes csudo.cmd (qui peut être facilement adopté en bash). 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émarrera dism dans la nouvelle console/onglet élevé (avec l’invitation précédente du UAC sous Vista ou la zone de connexion sous XP).

Par défaut, csudo démarre la nouvelle console dans un groupe (les modifications peuvent être apportées via l'édition du contenu de csudo.cmd).

Et bien sûr, vous pouvez le renommer en Sudo.cmd si vous aimez le mot "classique" Sudo.

Sudo in ConEmu/Windows

28
Maximus

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. Frappé Enter.

Il activera en permanence la commande Sudodans 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é. Au lieu de coller manuellement le script dans le bloc-notes, j'ai ajouté les instructions Out-File pour enregistrer les fichiers ps1 et $profile à partir du script.

Astuce: Si vous n'êtes pas un grand fan des popups UAC (comme moi), enregistrez ce qui suit 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
24
vulcan raven

Si vous effectuez cette opération sous Windows, outre la commande Exécuter en tant que mentionné dans quelques réponses, vous pouvez également le faire à l'aide de la souris.

Si vous maintenez la Shift 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'option "Run As..." (je pense qu'elle s'appelle "Run As Administrator" à partir de Vista).

Vous pouvez également télécharger une version plus avancée de RunAs auprès de Microsoft, appelée ShellRunAs , qui offre 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

20
GAThrawn

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 cela 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 de su 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.

3
Nicole Hamilton

Surun est une application gratuite et à 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 ni modifier les variables d'environnement.

Lorsque j’utilisais Windows XP, cette application m’aide beaucoup. Beta fonctionne sous Windows 7.

3
diimdeep

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 utiliser Sudo comme prévu.

3
ypid

Un remplacement Sudo fonctionnel du terminal mintty de Cygwin consisterait à placer le script suivant 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 vim ou cygrunsrv tout en travaillant dans un terminal sous Windows.

1
karafior

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

Remarque: runas signifie dans ce contexte "Exécuter en tant qu'administrateur" et non "Exécuter en tant qu'autre utilisateur"

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

1
Charles Milette

La solution la plus simple, à mon avis, consiste à utiliser powershell pour effectuer le travail, qui est portable et invite 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"
1
twall

Le script vbs suivant fait le tour pour moi. Je le mets 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 commande Invite Sudo net start service

0
ceztko