Comment exécuter la commande 'sudo' dans Windows

93

Comment exécuter la commande suivante dans Windows:

$ sudo django-admin.py startproject NEW

?

David542
la source
Il vaut mieux éviter d'utiliser les commandes de terminal sous Windows. Au lieu de cela, essayez de faire la même chose avec l'aide d'un IDE, comme Eclipse + PyDev. Cela rendra les choses beaucoup plus simples.
Pushpak Dagade
7
@Pushpak Dagade: J'ai été décontenancé par votre commentaire, en général, mais quand je suis allé taper ceci, j'ai réalisé que c'était STACK OVERFLOW. Ce sont les personnes qui utilisent le terminal sous Windows. =) Je veux dire, PowerShell n'existerait probablement pas autrement.
Brent Rittenhouse
2
Et s'il créait un script pour automatiser une tâche? (Oui, je sais que vous pourriez exécuter THAT en tant qu'utilisateur privilégié.)
Brent Rittenhouse
Essayez mon wsudo , un outil de type sudo pour Windows disponible sous forme de package Chocolatey.
noseratio

Réponses:

98

Il n'y a pas de sudocommande sous Windows. L'équivalent le plus proche est «exécuter en tant qu'administrateur».

Vous pouvez le faire à l'aide de la runascommande avec un niveau de confiance administrateur ou en cliquant avec le bouton droit sur le programme dans l'interface utilisateur et en choisissant «exécuter en tant qu'administrateur».

BlueRaja - Danny Pflughoeft
la source
4
Savez-vous si le comportement des runas varie d'une version à l'autre? J'ai installé Win7 Enterprise et toutes les combinaisons que j'ai essayées avec runas créent le nouveau cmd sans privilèges d'administrateur
notNullGothik
4
Sudo pour Windows (sudowin) permet aux utilisateurs autorisés de lancer des processus avec des privilèges élevés en utilisant leur propre mot de passe. Contrairement à la commande runas, Sudo pour Windows préserve le profil de l'utilisateur et la propriété des objets créés. Vous pouvez l'obtenir ici: sourceforge.net/projects/sudowin
Joe Bigler
Consultez gsudo( stackoverflow.com/a/58753166/97471 ). C'est un sudo pour Windows avec *nix sudoune expérience utilisateur: permettant d'exécuter la commande dans la console actuelle et le cache des informations d'identification (un seul popup UAC).
Gerardo Grignoli
runas est l'élévation d'un compte d'utilisateur dans les administrateurs; sudo est une autre chose. Cela ne devrait pas être la réponse acceptée.
Massimo le
14

Ouvrez le bloc-notes et collez ce code:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && %*'"
@echo on

Ensuite, enregistrez le fichier sous sudo.cmd. Copiez ce fichier et collez-le dans C:\Windows\System32ou ajoutez le chemin où se sudo.cmdtrouve votre variable d'environnement PATH.

Lorsque vous ouvrez l'invite de commande, vous pouvez maintenant exécuter quelque chose comme sudo start ..

Si vous souhaitez que la fenêtre d'invite de commande d'administration reste ouverte lorsque vous exécutez la commande, modifiez le code dans le bloc-notes comme suit:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
@echo on

Explication:

powershell -Command exécute une commande PowerShell.

Start-Process est une commande PowerShell qui démarre un processus, dans ce cas, une invite de commande.

-Verb RunAs exécute la commande en tant qu'administrateur.

-Argument-List exécute la commande avec des arguments.

Nos arguments sont '/c cd /d %CD% && %*'. %*signifie tous les arguments, donc si vous le faisiez sudo foo bar, il s'exécuterait dans l'invite de commande foo barcar les paramètres sont foo et bar, et %*retourne foo bar. cd /d %CD%est une commande pour aller dans le répertoire courant. Cela garantira que lorsque vous ouvrez la fenêtre élevée, le répertoire sera le même que la fenêtre normale. les &&moyens qui , si la première commande est réussie, exécuter le deuxième commande.

Le /cest un paramètre cmd pour fermer la fenêtre une fois la commande terminée, et le /kest un paramètre cmd pour garder la fenêtre ouverte.

Crédit à Adam Plocher pour le séjour dans le code du répertoire courant.

Membre d'équipage CME1
la source
Un problème avec cela est qu'une fois élevé, vous n'êtes plus dans ce qui était le dossier actuel, mais plutôt dans C:\Windows\System32.
noseratio
2
@noseratio vrai, il semble que le changer pour cela fera l'affaire, cependant:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher
@AdamPlocher, cela pourrait fonctionner mais pourrait avoir des problèmes si la ligne de commande %*contient des guillemets. C'est pourquoi j'ai créé wsudo, basé sur PowerShell.
noseratio
Il s'agit de l'élévation d'un compte d'utilisateur dans les administrateurs; sudo est une autre chose.
Massimo le
Ne pouvez-vous pas simplement sauter les echolignes un et trois en précédant @la ligne PowerShell ?
nudl
9

Toutes les réponses expliquent comment élever votre commande dans un nouvel hôte de console.

Ce qui m'a amusé, c'est qu'aucun de ces outils ne se comporte comme *nix sudo, permettant d'exécuter la commande à l'intérieur de la console actuelle .

Alors, j'ai écrit: gsudo

Code source https://github.com/gerardog/gsudo

Installation

Par scoop

  • Installez scoop si vous ne l'avez pas déjà. Ensuite:
scoop install gsudo

Ou via Chocolatey

choco install gsudo

Installation manuelle:

Démo

démo gsudo

Gerardo Grignoli
la source
8

J'ai créé wsudoun sudooutil CLI de type open source pour Windows pour exécuter des programmes ou des commandes avec une élévation à droite, dans le contexte du répertoire actuel . Il est disponible en emballage chocolaté .

Je l'utilise beaucoup pour des choses comme la configuration des agents de build, des tâches d'administration sfc /scannow, dism /online /cleanup-image /restorehealthou simplement pour installer / mettre à jour mes packages Chocolatey locaux. À utiliser à vos risques et périls.

Installation

choco install wsudo

Chocolatey doit être déjà installé.

Objectif

wsudoest un sudooutil de type Linux permettant à Windows d'appeler un programme avec des droits élevés (en tant qu'administrateur) à partir d'une invite de commande shell non-admin et en conservant son répertoire actuel.

Cette implémentation ne dépend pas de l'ancien Windows Script Host ( CScript). Au lieu de cela, il utilise un script d'assistance PowerShell 5.1 qui appelle l' "Start-Process -Wait -Verb runAs ..."applet de commande. Votre système a probablement déjà installé PowerShell 5.x, sinon il vous sera proposé de l'installer en tant que dépendance.

Usage

wsudoexécute un programme ou une commande en ligne avec des droits élevés dans le répertoire actuel. Exemples:

wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

Pour plus de détails, visitez la repro GitHub .

noseratio
la source
2
Merci d'avoir publié "wsudo", c'est assez utile pour moi. Je pense que l'avantage de votre wsudo est de garder le répertoire de travail pas comme les alternatives. Je n'ai pas trouvé que l'on puisse garder CWD autre que wsudo. Je pense que vous devriez souligner ce point dans la description. J'apprécie vraiment votre travail.
benok
3
Encore une chose à vous faire savoir. Connaissez-vous le piratage de la barre d'adresse pour ouvrir directement le shell? J'utilise habituellement ce hack, mais j'étais très frustré quand je voulais obtenir un shell élevé avec ce hack. J'ai essayé de trouver de nombreuses alternatives mais cela ne fonctionne pas. Je peux enfin en ouvrir un avec "wasudo [shell]". J'adore avoir ça. Merci encore :-)
benok
3
@benok, c'est vrai, c'est un hack pratique! Glad wasudovous a facilité la tâche. Je vis moi-même principalement dans le terminal de console intégré VSCode, donc je viens de taper wasudolà :) La prochaine amélioration serait d'hériter des variables d'environnement .
noseratio
Bonjour @benok, vous pourriez également être intéressé par mon nouvel utilitaire pour améliorer la productivité copier / coller / exécuter, DevComrade :)
noseratio
5

runascommande oblige les utilisateurs à saisir le mot de passe. Si vous ne souhaitez pas taper de mot de passe et que vous souhaitez simplement cliquer sur la boîte de dialogue UAC, utilisez Start-Process -Verb runasPowerShell au lieu de runascommande.

voir: http://satob.hatenablog.com/entry/2017/06/17/013217

SATO Yusuke
la source
Il s'agit de l'élévation d'un compte d'utilisateur dans les administrateurs; sudo est une autre chose.
Massimo le
4

Vous ne le feriez normalement pas, puisque vous ne l'exécuteriez pas sous * nix de toute façon. Faites le développement dans un répertoire utilisateur, puis déployez-le dans les répertoires système.

Ignacio Vazquez-Abrams
la source
2

Le script vbs suivant permet de lancer une commande donnée avec des arguments avec élévation et imite le comportement de la commande sudo unix originale pour un ensemble limité de cas d'utilisation (il ne mettra pas en cache les informations d'identification ni ne permet d'exécuter réellement des commandes avec des informations d'identification différentes). Je l'ai mis 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

ceztko
la source
1
comment pouvons-nous faire attendre le script pour l'entrée de l'utilisateur, afin que nous puissions lire la sortie du programme shell?
Ahmad Hajjar
1
Vous voulez dire une commande shell interactive? Eh bien, vous devriez d'abord essayer de vous assurer que la commande lancée sera attendue pour le retour. Ici, il semble que ce soit possible. Ensuite, vous devriez obtenir la sortie des objets shell et la sortir, ce qui, je suppose, est également possible. Ne vous attendez pas à ce que tout ce que vous pouvez faire sous Unix soit possible.
ceztko
Sous Windows 10, il génère une erreur de syntaxe sur la ligne 1, car 6.
Martin Braun
Il s'agit de l'élévation d'un compte d'utilisateur dans les administrateurs; sudo est une autre chose.
Massimo le
1

Je pense que j'ai essayé les étapes ci-dessous après avoir fait des recherches et j'ai réussi

1.Installez scoop à l'aide de PowerShell 3 (iex (nouvel objet net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. do scoop install --global sudo 3. assurez-vous que les chemins (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) ajouté dans la variable de chemin d'environnement.

Pawan Gangwani
la source
1

Il n'y a pas de commande sudo dans le cas de windows et il n'est pas non plus nécessaire de mettre $. Pour installer Angular CLI via l'invite de commande node.js dans Windows, je viens d'écrire npm install -g @ angular / cli , puis j'ai appuyé sur Entrée. Cela a bien fonctionné.

Saurabh Kumar
la source
0

ouvrez la console en tant qu'administrateur. Faites un clic droit sur l'invite de commande ou bash -> plus et sélectionnez "exécuter en tant qu'administrateur"

James N
la source
0

Dans Windows Powershell, vous pouvez utiliser la commande Start-Process avec une option -Verb RunAspour démarrer et un processus élevé. Voici mon exemple de fonction sudo:

function sudo {
    Start-Process @args -verb runas
}

Ex: ouvrir le fichier d'hôtes en tant qu'administrateur dans le bloc-notes

sudo notepad C:\Windows\System32\drivers\etc\hosts
David Hatch
la source
0

L'utilisation de la sudocommande pour les utilisateurs de fenêtres vous donne les suggestions suivantes:

Tout d'abord, installez l' scoopoutil de gestion des packages et exécutez les commandes suivantes:

entrez la description de l'image ici

Ensuite, utilisez scooppour installer la sudocommande:

entrez la description de l'image ici

Enfin, vous pouvez exécuter la commande avec sudo:

entrez la description de l'image ici

azjhong
la source
0

Je suis heureux de vous aider.

Pour créer une commande sudo, suivez les étapes: -

  1. Créez un dossier env dans C: \ Drive.
  2. Créez un dossier dans le dossier env nommé bin.
  3. Ajoutez maintenant C: \ env \ bin à votre PATH.
  4. Créez un fichier sudo.bat dans C: \ env \ bin.
  5. Modifiez-le avec le bloc-notes et écrivez ce code: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

J'espère que ceci vous aidera

Aayush Shah
la source
Cette réponse doit inclure le texte du fichier de commandes, ne pas dépendre d'un lien hors site en raison de la pourriture du lien. La réponse devrait également inclure l'avertissement que ce script cherche à émuler le comportement grossier de sudo, mais n'est pas vraiment sudo (c'est un pseudo-sudo).
asky
0

Pour simplement exécuter une commande en tant qu'administrateur dans un Powershell non élevé, vous pouvez utiliser Start-Processdirectement, avec les bonnes options, en particulier -Verb runas.

C'est beaucoup plus compliqué que sudo, en particulier parce que vous ne pouvez pas simplement réutiliser la commande précédente avec une option supplémentaire. Vous devez spécifier les arguments de votre commande séparément.

Voici un exemple, en utilisant la commande route pour changer la passerelle:

Cela échoue car nous ne sommes pas dans un PS élevé:

> route change 0.0.0.0 mask 0.0.0.0 192.168.1.3
The requested operation requires elevation.

Cela fonctionne après avoir accepté l'UAC:

> Start-Process route -ArgumentList "change 0.0.0.0 mask 0.0.0.0 192.168.1.3" -Verb runas

Ou pour une commande qui nécessite cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
mivk
la source