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 l'accès "élevé". Même si vos informations d'identification ont l'autorisation d'administrateur, les processus sous vos informations d'identification n'ont pas les autorisations d'administrateur tant que vous ne "sudo" pas la commande. Sous Windows, ils appellent cela "élever".

8 votes

@IGRACH pas sur mon powershell...

2 votes

Je utilise ce 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:NomCompteUtilisateur programme

Il suffit d'exécuter :

runas /noprofile /user:Administrateur cmd 

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

22 votes

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

3 votes

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

6 votes

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

143voto

matt wilkie Points 4774

Élever - "exécute une commande avec élévation des privilèges UAC. Ceci est utile pour travailler à l'intérieur des invites de commandes ou avec des fichiers batch." 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 actuel, permettant l'utilisation de chemins relatifs.

Synthèse:
  elevate [(-c | -k) [-n] [-u]] [-w] commande

Options:
  -c  Lance un processeur de commande en cours d'exécution; équivalent à "cmd /c commande".
  -k  Lance un processeur de commande persistant; équivalent à "cmd /k commande".
  -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, utiliser Unicode; équivalent à "cmd /u".
  -w  Attend la terminaison; équivalent à "start /wait commande".

L'objectif d'Élever n'est pas de contourner ou de contourner le contrôle de compte d'utilisateur UAC, mais de travailler avec lui. Tant que UAC est activé, il doit y avoir une sorte de prompt à un moment du processus. Si vous avez besoin de vous débarrasser complètement des invites, vous devez désactiver UAC.

Le point douloureux qu'Élever soulage est d'escalader un processus particulier à partir d'une shell non privilégiée puis 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 invite" 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=éléver -w

ou batchfile dans le chemin d'accès:
@éléver -w %*

Élever est un outil tiers écrit par Johannes Passing. C'est un téléchargement de 11 ko et portable (pas besoin d'installation): 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à. De mes tests limités, il fonctionne immédiatement sans avoir à redémarrer Windows.

69voto

deceze Points 200115

Vous pouvez utiliser la commande runas qui est un peu similaire, ou vous pouvez jeter un coup d'œil au 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 avait été exécutée par James, donc elle accède aux paramètres de l'utilisateur de James et tout changement d'utilisateur va dans les dossiers de James My Documents & settings, etc. Donc si vous installez une application, par exemple, elle sera installée en tant que James, pas en tant que Bob.

Si d'un autre côté Bob fait "sudo une_commande" 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 sudo vous devez définir un groupe d'utilisateurs sudoers qui contient la liste des utilisateurs normaux qui ont 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

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

5 votes

@hasen j - votre problème est simplement dû au fait que ~/.themes est évalué avant que la commande ne soit exécutée (et donc avant qu'elle ne passe 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 chose préférée 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 lancé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 sur 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 un prompt UAC précédent dans Vista ou une boîte de dialogue de connexion dans XP).

Par défaut, csudo démarre une nouvelle console en mode fractionné (modifiable en modifiant le contenu de csudo.cmd).

Et bien sûr, vous pouvez le renommer en sudo.cmd si vous préférez 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 fenêtre de console devient inutilisable après la commande sudo. Vous ne pouvez donc pas continuer à travailler dans l'onglet élevé, vous obtenez simplement un message appuyez sur Entrée ou sur Echap pour sortir.

1 votes

Bien sûr que non. Même sous Unix, vous revenez à un terminal non élevé après que la commande sudo ait terminé son travail ! Vous prenez 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+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

  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 mélangé le script des deux articles pour créer le script mentionné précédemment. 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 à partir du script.

Conseil : Si vous n'êtes pas 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. Cela doit être le moyen le plus facile d'élever quelque chose. Les fichiers .bat existants peuvent facilement être convertis en POSH

0 votes

J'ai obtenu cette erreur sur Windows 10 : . : Le fichier C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShe‌​ll_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 les 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