web-dev-qa-db-de.com

Wie öffne ich ein Cmd mit erhöhten Rechten über die Befehlszeile für Windows?

Wie öffne ich eine Eingabeaufforderung mit erhöhten Rechten mithilfe von Befehlszeilen auf einem normalen Cmd?

Zum Beispiel benutze ich runas /username:admin cmd aber der cmd, der geöffnet wurde, scheint nicht erhöht zu sein! Irgendwelche Lösungen?

87
user2633882

Ich hatte das gleiche Problem und konnte die CMD nur auf folgende Weise als Administrator von CMD aus öffnen:

  1. Öffnen Sie CMD
  2. Schreiben powershell -Command "Start-Process cmd -Verb RunAs" und drücke Enter
  3. Es erscheint ein Popup-Fenster, in dem Sie aufgefordert werden, eine CMD als Administrator zu öffnen
147
Gui

Laut Dokumentation , dem Windows-Sicherheitsmodell ...

gewährt keine Administratorrechte zu allen Zeiten. Selbst Administratoren werden unter Standardberechtigungen ausgeführt, wenn sie nicht administrative Aufgaben ausführen, für die keine erhöhten Berechtigungen erforderlich sind.

Sie haben die Option Diese Aufgabe mit Administratorrechten erstellen im Dialogfeld Neue Aufgabe erstellen ( Task-Manager> Datei> Neue Aufgabe ausführen), aber es gibt keine eingebaute Möglichkeit, die Berechtigungen über die Befehlszeile effektiv zu erhöhen.

Es gibt jedoch einige Tools von Drittanbietern (die intern auf Windows-APIs basieren), mit denen Sie die Berechtigungen über die Befehlszeile erhöhen können:

NirCmd :

  1. Laden Sie es herunter und entpacken Sie es.
  2. nircmdc elevate cmd

windos :

  1. Es installieren: npm install -g windosu (erfordert node.js installiert)
  2. Sudo cmd
34
Ricardo Stuven

Ein einfacher Weg, nachdem ich andere Antworten hier ausprobiert hatte

Methode 1: OHNE ein Programm von Drittanbietern (ich habe dies verwendet)

  1. Erstelle eine Datei mit dem Namen Sudo.bat (Sie können Sudo durch einen beliebigen Namen ersetzen) mit folgendem Inhalt powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Bewegung Sudo.bat in einen Ordner in Ihrem PATH; Wenn Sie nicht wissen, was das bedeutet, verschieben Sie diese Dateien einfach nach c:\windows\
  3. Jetzt funktioniert Sudo im Dialogfeld "Ausführen" (win+r) oder in der Adressleiste des Explorers (dies ist der beste Teil :))

Methode 2: MIT einem Drittanbieterprogramm

  1. Laden Sie NirCmd herunter und entpacken Sie es.
  2. Erstelle eine Datei mit dem Namen Sudo.bat (Sie können Sudo durch einen beliebigen Namen ersetzen) mit folgendem Inhalt nircmdc elevate cmd /k "cd /d %cd%"
  3. Bewegung nircmdc.exe und Sudo.bat in einen Ordner in Ihrem PATH; Wenn Sie nicht wissen, was das bedeutet, verschieben Sie diese Dateien einfach nach c:\windows\
  4. Jetzt funktioniert Sudo im Dialogfeld "Ausführen" (win+r) oder in der Adressleiste des Explorers (dies ist der beste Teil :))
20
Dheeraj Bhaskar

Ich habe nicht genug Reputation, um der Top-Antwort einen Kommentar hinzuzufügen, aber mit der Macht der Aliase können Sie durch Eingabe der folgenden Zeichen davonkommen:

powershell "start cmd -v runAs"

Dies ist nur eine kürzere Version von user3018703 ausgezeichnete Lösung:

powershell -Command "Start-Process cmd -Verb RunAs"
20
Stiegler

Ich benutze die ganze Zeit nirsoft Programme (zB nircmdc) und sysinternals (zB psexec). Sie sind sehr hilfreich.

Wenn Sie jedoch kein Programm eines Drittanbieters verwenden möchten oder können, finden Sie hier eine andere Möglichkeit, reines Windows.

Kurze Antwort : Sie können eine geplante Aufgabe mit erhöhten Rechten erstellen, die Sie später aufrufen können, wenn Sie nicht erhöht sind.

Mittellange Antwort : während erhöht Aufgabe erstellen mit (aber ich bevorzuge Taskplaner-GUI):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Dann später, ohne dass eine Erhöhung erforderlich ist, rufen Sie mit auf

schtasks /run /tn cmd_elev

Lange Antwort : Es gibt viele zappelige Details; siehe meinen Blogeintrag "Programm ohne Benutzerkontensteuerung starten, nützlich beim Systemstart und in Batchdateien (Taskplaner verwenden)"

11
john v kumpf

Das Folgende als Batchdatei öffnet eine Eingabeaufforderung mit erhöhten Rechten wobei der Pfad auf dasselbe Verzeichnis festgelegt ist wie das, von dem aus die Batchdatei aufgerufen wurde

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
5
statler

Ich benutze Elevate jetzt für eine Weile.

Es ist eine Beschreibung - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Ich kopiere das bin.x86-64\elevate.exe von dem .Zip into C:\Program Files\elevate und füge diesen Pfad meinem PATH hinzu.

Dann kann ich mit GitBash so etwas wie elevate sc stop W3SVC, um den Dienst IIS auszuschalten.

Wenn ich den Befehl ausführe, erhalte ich das Dialogfeld UAC, das korrekt mit der Tastatur gesteuert wird. Wenn ich das Dialogfeld akzeptiere, kehre ich zu meiner Shell zurück.

3
seangwright

Stellen Sie sicher, dass die Batchdatei die Anmeldeinformationen des tatsächlichen Administratorkontos mit dem Schalter /savecred Speichert. Dies fordert Sie zum ersten Mal zur Eingabe von Anmeldeinformationen auf und speichert das verschlüsselte Kennwort im Anmeldeinformations-Manager. Dann wird der Batch für alle folgenden Male als vollständiger Administrator ausgeführt, jedoch nicht als Aufforderung zur Eingabe von Anmeldeinformationen, da diese im Anmeldeinformations-Manager verschlüsselt gespeichert sind und der Endbenutzer das Kennwort nicht abrufen kann. Folgendes sollte eine CMD mit erhöhten Rechten und vollständigen Administratorrechten öffnen und fordert Sie nur beim ersten Mal zur Eingabe eines Kennworts auf:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
3
Stefan Gadecki

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var Shell = new ActiveXObject('Shell.application'); Shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

speichern Sie dieses Skript unter dem Namen "god.cmd" in Ihrem System32 oder einem anderen Pfad ....

wenn Sie einen Befehl in e:\mypictures\öffnen und god eingeben, werden Sie nach Anmeldeinformationen gefragt und an denselben Ort wie der Administrator zurückgebracht ...

3
jOte-

Ähnlich wie bei einigen der oben genannten Lösungen habe ich eine elevate Batch-Datei erstellt, in der ein erweitertes PowerShell-Fenster ausgeführt wird. Dabei wurde die Ausführungsrichtlinie umgangen, damit von einfachen Befehlen über Batch-Dateien bis hin zu komplexen PowerShell-Skripten alles ausgeführt werden kann. Ich empfehle, es in Ihrem C:\Windows\System32-Ordner zu speichern, um die Verwendung zu vereinfachen.

Der ursprüngliche Befehl elevate führt seine Aufgabe aus, erfasst die Ausgabe, schließt das erzeugte PowerShell-Fenster und kehrt dann zurück, wobei die erfasste Ausgabe in das ursprüngliche Fenster geschrieben wird.

Ich habe zwei Varianten erstellt, elevatep und elevatex, die jeweils angehalten werden und das PowerShell-Fenster für weitere Arbeiten geöffnet lassen.

https://github.com/jt-github/elevate

Und für den Fall, dass mein Link jemals stirbt, hier der Code für die ursprüngliche Elevate-Batch-Datei:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)
2
Shadow Lynx

Obwohl beide von Dheeraj Bhaskar bereitgestellten Lösungen funktionieren, führen sie leider dazu, dass der Dialog UAC oben angezeigt wird (in z-Reihenfolge), aber nicht bekommen fokussiert (das fokussierte Fenster ist das Aufrufer-Cmd/Powershell-Fenster), daher muss ich entweder die Maus greifen und auf "Ja" klicken oder das UAC-Fenster mit Alt + Shift auswählen + Tab. (Getestet auf Win10x64 v1607 build14393.447; UAC = "[...] nicht dimmen [...]" .)

Die folgende Lösung ist etwas umständlich, da sie zwei Dateien verwendet, aber die richtige Fokusreihenfolge beibehält, sodass keine zusätzlichen Maus-/Tastaturaktionen erforderlich sind (außer dem Bestätigen des UAC-Dialogfelds: Alt + Y ).

  1. cmdadm.lnk (Verknüpfungseigenschaften/Erweitert .../Als Administrator ausführen = EIN) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Führen Sie mit su aus.

2
Ogmios

Meine bevorzugte Methode hierfür ist die Verwendung von PsExec.exe von SysInternals, verfügbar unter http://technet.Microsoft.com/en-us/sysinternals/bb89755

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

Der Schalter "-h" ist derjenige, der die Magie ausführt:

-h Wenn das Zielsystem Vista oder höher ist, wird der Prozess mit dem erhöhten Token des Kontos ausgeführt, sofern verfügbar.

2
David Rodriguez

Kann eine temporäre Umgebungsvariable für eine erweiterte Verknüpfung verwenden (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (Verknüpfung)

_ properties\advanced\"run as administrator"=yes

(Um Pfadänderungen vorzunehmen, müssen Sie vorübergehend das env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (targetCmd wird im erhöhten cmd-Fenster ausgeführt)

Obwohl es sich um 3 Dateien handelt, können Sie alles (einschließlich targetCmd) in einem Unterordner ablegen (vergessen Sie nicht, den folderName zu den Patches hinzuzufügen) und "start.cmd" in den einen Namen von target umbenennen

Für mich sieht es nach der gebräuchlichsten Vorgehensweise aus, während cmd nicht über den erforderlichen Befehl verfügt

0
ilia

Ich bin nicht sicher, ob das Tool ExecElevated.exe (13KB) den Job machen wird ... aber es könnte. Oder zumindest nützlich für andere mit ähnlichen Bedürfnissen, die auf diese Seite gekommen sind wie ich (aber ich habe keine Lösung gefunden und das Tool selbst in .Net erstellt).

Es wird eine Anwendung mit erhöhtem Token ausgeführt (im Admin-Modus). Sie erhalten jedoch einen UAC-Dialog zur Bestätigung! (Möglicherweise nicht, wenn die Benutzerkontensteuerung deaktiviert wurde, noch nicht getestet).

Und das Konto, das das Tool aufruft, muss auch über einen Administrator verfügen. Rechte natürlich.

Anwendungsbeispiel:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
0
MrCalvin

Drücken Sie die Windows + X-Taste, und Sie können jetzt die PowerShell oder Eingabeaufforderung mit Administratorrechten auswählen. Funktioniert, wenn Sie der Administrator sind. Die Funktion kann unbrauchbar sein, wenn das System nicht Ihnen gehört.

0
Tom