494 votes

Y a-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 qui nécessitent un accès administrateur. Comme j'utilise principalement l'invite de commandes Windows, y a-t-il une commande Windows pour augmenter les privilèges, similaire à la commande terminal Linux sudo?

8 votes

Je crois que le terme que vous recherchez est "accès élevé". Même si vos informations d'identification ont la permission d'administrateur, les processus sous vos informations d'identification n'ont pas les autorisations d'administrateur tant que vous n'avez pas "sudo" la commande. Sous Windows, on appelle cela "élever".

8 votes

@IGRACH pas sur mon powershell...

2 votes

Je utilise cette doskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"

290voto

kraymer Points 2642

La commande runas.

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

Il suffit de taper :

runas /noprofile /user:Administrateur cmd

pour démarrer un shell de commandes en tant qu'administrateur

22 votes

Vous pourriez constater que vous voulez charger le profil (par exemple, y compris les variables d'environnement) pour une utilisation prolongée. Auquel cas, supprimez le /noprofile.

3 votes

Vous devez également vous assurer que le compte Administrateur a un mot de passe. Sinon, vous obtenez une erreur 1327, "restriction du compte utilisateur. Les raisons possibles sont que les mots de passe vides ne sont pas autorisés,..."

6 votes

Cela ne fonctionne pas pour moi. Après avoir saisi mon mot de passe, l'invite de commandes se ferme.

143voto

matt wilkie Points 4774

Elevate - "exécute une commande en élevant les privilèges de l'UAC. Cela est utile pour travailler dans des invites de commandes ou avec des fichiers de traitement par lots." Ce n'est pas la même chose que sudo, cela change l'utilisateur en cours d'exécution en Administrateur, mais sa syntaxe est beaucoup plus simple à utiliser que runas, et il peut conserver le répertoire actuel, ce qui permet l'utilisation de chemins relatifs.

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

Options:
  -c  Lance un interpréteur de commandes terminant ; équivalent à "cmd /c command".
  -k  Lance un interpréteur de commandes persistant ; équivalent à "cmd /k command".
  -n  Lors de l'utilisation de -c ou -k, ne pas pushd le répertoire actuel avant l'exécution.
  -u  Lors de l'utilisation de -c ou -k, utilise Unicode ; équivalent à "cmd /u".
  -w  Attend la terminaison ; équivalent à "start /wait command".

Le but d'Elevate n'est pas de contourner ou de contourner l'UAC (Contrôle de compte d'utilisateur), mais de travailler avec. Tant que l'UAC est activé, il doit y avoir une sorte de prompt à un moment donné dans le processus. Si vous avez besoin de vous débarrasser complètement de la demande, vous devez désactiver l'UAC.

Le point douloureux qu'Elevate atténue est d'escalader un processus particulier à partir d'une invite de commandes non privilégiée et ensuite de continuer normalement. Sans cela, vous devez démarrer une invite de commandes privilégiée avec clic droit > "Exécuter en tant qu'administrateur" avant de tenter la commande privilégiée, ce qui ne peut pas être facilement scripté.

Cela fonctionne bien avec "Élever sans demander" 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 coincée sur sudo, créez un alias en utilisant Doskey:
doskey sudo=elevate -w

ou un fichier de traitement par lots dans le PATH:
@elevate -w %*

Elevate est un outil tiers écrit par Johannes Passing. C'est un téléchargement de 11ko et portable (aucune installation nécessaire) : http://code.kliu.org/misc/elevate/

5 votes

Cela va parfaitement avec "Élever sans demander" dans secpol.msc. Ensemble, ils font la même chose que %wheel ALL=(ALL) NOPASSWD: ALL dans sudo.

2 votes

@sayap, juste pour être clair, voulez-vous dire ceci: ss64.com/nt/syntax-uac.html?

0 votes

Oui, c'est celui-là. D'après mes tests limités, ça fonctionne immédiatement sans avoir à redémarrer Windows.

69voto

deceze Points 200115

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 une_commande", la commande est exécutée comme si elle était exécutée par James, donc elle accède aux paramètres de l'utilisateur James et toutes les modifications d'utilisateur vont dans les dossiers Mes Documents et paramètres de James, etc. Donc si vous installez une application, par exemple, elle sera installée en tant que James, pas en tant que Bob.

Si, d'autre part, Bob fait "sudo une_commande", la commande est toujours exécutée en tant que Bob, mais avec des autorisations élevées - tout comme la commande sudo de Linux. Pour empêcher tout utilisateur de pouvoir effectuer un sudo, vous devez définir un groupe d'utilisateurs sudoers qui contient la liste des utilisateurs normaux ayant l'autorisation d'élever 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.

2 votes

Êtes-vous sûr ? Lorsque j'exécute sudo sous ubuntu, si mon thème actuel se trouve dans ~/.themes alors l'application sudo ne pourra pas y accéder, car il n'est pas dans /home/root/.themes, et utilisera le thème gtk par défaut moche.

5 votes

@hasen j - votre problème est simplement dû au fait que ~/.themes est évalué avant l'exécution de la commande (et donc avant le passage en mode root).

2 votes

Une autre solution, sauf hébergée sur GitHub, est windosu: github.com/tehsenaus/windosu Je viens de le trouver et il semble fonctionner très bien. La meilleure chose est qu'il est super facile à installer. Juste "npm install -g windosu".

32voto

Maximus Points 20409

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

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

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

ConEmu lancera dism dans la nouvelle console/onglet élevé (avec une invite UAC précédente sous Vista ou une boîte de dialogue de connexion sous XP).

Par défaut, csudo lance une nouvelle console en mode fractionné (peut être modifié en éditant le 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

1 votes

Csudo a été inclus il y a longtemps dans la distribution ConEmu. Aucun lien n'est nécessaire du tout.

0 votes

Le problème ici est que la nouvelle console devient inutilisable après la commande sudo. Vous ne pouvez donc pas continuer à travailler dans l'onglet élevé, vous obtenez juste un message appuyez sur Entrée ou sur Echap pour quitter.

1 votes

Bien sûr que non. Même sur Unix, vous revenez à un terminal non élevé après que la commande sudo a terminé son travail ! Vous allez dans la mauvaise direction.

28voto

vulcan raven Points 429

Méthode rapide:

Trois étapes pour ajouter sudo.

  1. Ouvrez PowerShell.

  2. Copiez le script suivant (Ctrl+C) et collez-le dans PowerShell (Alt+Space+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

  3. Appuyez sur Entrée.

Cela activera définitivement la commande sudo dans PowerShell.

Utilisation :

sudo  [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 apprendre :

Remarque : J'ai combiné 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 déclarations Out-File pour enregistrer les fichiers ps1 et $profile à partir du script.

Conseil: Si vous n'êtes pas très fan des fenêtres contextuelles UAC (comme moi), enregistrez ce qui suit dans un fichier *.reg et exécutez-le :

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1 votes

J'adore la solution PowerShell pour cette question. C'est probablement le moyen le plus simple pour élever quelque chose. Les fichiers .bat existants peuvent facilement être convertis en POSH

0 votes

J'ai eu cette erreur sur Windows 10: . : fichier C:\Utilisateurs\Utilisateur\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 ne peut pas être chargé car l'exécution de scripts est désactivée sur ce système.

0 votes

@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 en dehors de remotesigned sont décrites dans docs officiels.

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