簡體   English   中英

如何使用 Windows 的命令行打開提升的 cmd?

[英]How to open an elevated cmd using command line for Windows?

如何在普通 cmd 上使用命令行打開提升的命令提示符?

例如,我使用runas /username:admin cmd但打開的 cmd 似乎沒有提升! 有什么解決辦法嗎?

我遇到了同樣的問題,我能夠以管理員身份從 CMD 打開 CMD 的唯一方法是執行以下操作:

  1. 打開 CMD
  2. powershell -Command "Start-Process cmd -Verb RunAs"然后回車
  3. 將出現一個彈出窗口,要求以管理員身份打開 CMD

我沒有足夠的聲譽來為最佳答案添加評論,但是借助別名的力量,您只需鍵入以下內容即可逃脫:

powershell "start cmd -v runAs"

這只是 user3018703 優秀解決方案的較短版本:

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

在這里嘗試其他答案后我所做的簡單方法

方法 1:沒有 3rd 方程序(我用過這個)

  1. 創建一個名為sudo.bat的文件(您可以將sudo替換為您想要的任何名稱),其內容如下powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. sudo.bat移動到PATH中的文件夾; 如果您不知道這意味着什么,只需將這些文件移動到c:\windows\
  3. 現在sudo將在運行對話框( win+r )或資源管理器地址欄中工作(這是最好的部分 :))

方法 2:使用第 3 方程序

  1. 下載NirCmd並解壓縮。
  2. 創建一個名為sudo.bat的文件(您可以將sudo替換為您想要的任何名稱),其內容如下nircmdc elevate cmd /k "cd /d %cd%"
  3. nircmdc.exesudo.bat移動到PATH中的文件夾; 如果您不知道這意味着什么,只需將這些文件移動到c:\windows\
  4. 現在sudo將在運行對話框( win+r )或資源管理器地址欄中工作(這是最好的部分 :))

根據文檔,Windows 安全模型...

不會始終授予管理權限。 甚至管理員在執行不需要提升權限的非管理任務時也在標准權限下運行

您在“創建新任務”對話框( “任務管理器”>“文件”>“運行新任務” )中有“使用管理權限創建此任務”選項,但沒有使用命令行有效提升權限的內置方法。

但是,您可以使用一些第三方工具(內部依賴於 Windows API)從命令行提升權限:

NirCmd

  1. 下載並解壓縮。
  2. nircmdc elevate cmd

溫多蘇

  1. 安裝它: npm install -g windosu (需要安裝node.js
  2. sudo cmd

我一直使用 nirsoft 程序(例如 nircmdc)和 sysinternals(例如 psexec)。 他們非常有幫助。

但是,如果您不想或不能 dl 第三方程序,這里有另一種方式,純 Windows。

簡短的回答:您可以在提升時創建具有提升權限的計划任務,然后您可以稍后在未提升的情況下調用該任務。

中等長度的答案:雖然提升了創建任務(但我更喜歡任務調度程序 GUI):

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

然后,不需要提升,調用 with

schtasks /run /tn cmd_elev

長答案:有很多煩人的細節; 請參閱我的博客條目“在沒有 UAC 的情況下啟動程序,在系統啟動和批處理文件中有用(使用任務調度程序)”

以下作為批處理文件將打開提升的命令提示符,其路徑設置為與調用批處理文件的目錄相同的目錄

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

我最喜歡的方法是使用來自 SysInternals 的 PsExec.exe,可從http://technet.microsoft.com/en-us/sysinternals/bb897553獲得

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

“-h”開關是一個神奇的開關:

-h 如果目標系統是 Vista 或更高版本,則使用帳戶的提升令牌運行進程(如果可用)。

雖然 Dheeraj Bhaskar 提供的兩種解決方案都有效,但不幸的是,它們會導致UAC對話框顯示在頂部(z-order-wise)但沒有獲得焦點(焦點窗口是調用者 cmd/powershell 窗口),因此我要么需要抓住鼠標並單擊“是”,或使用 Alt+Shift+Tab 選擇 UAC 窗口。 (在 Win10x64 v1607 build14393.447 上測試;UAC = "[...] do not dim [...]" 。)

以下解決方案有點尷尬,因為它使用兩個文件,但它保留了正確的焦點順序,因此不需要額外的鼠標/鍵盤操作(除了確認 UAC 對話框: Alt+Y )。

  1. cmdadm.lnk(快捷方式屬性/高級.../以管理員身份運行 = ON) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

運行su

使用/savecred開關使批處理文件保存實際管理員帳戶的憑據。 這將第一次提示輸入憑據,然后將加密的密碼存儲在憑據管理器中。 然后在后續的所有批處理運行中,它將以完整管理員身份運行,但不會提示輸入憑據,因為它們以加密方式存儲在憑據管理器中,最終用戶無法獲取密碼。 以下應打開具有完全管理員權限的提升 CMD,並且只會在第一次提示輸入密碼:

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

我已經使用Elevate有一段時間了。

它的描述 - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files. This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

我將bin.x86-64\elevate.exe.zip復制到C:\Program Files\elevate elevate 並將該路徑添加到我的PATH中。

然后 GitBash 我可以運行類似 elevate elevate sc stop W3SVC來關閉IIS服務。

運行該命令會給我一個UAC對話框,正確聚焦於鍵盤控制,並在接受對話框后返回我的 shell。

Dheeraj Bhaskar 使用 Powershell 的方法中缺少空格,至少對於 Powershell 的 Windows 10 化身來說是這樣。

他的 sudo.bat 里面的命令行應該是

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

注意 %cd% 后的多余空格

;) 弗羅德

..

@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

將此腳本保存為 system32 中的“god.cmd”或您的路徑指向的任何內容....

如果您在 e:\mypictures\ 中打開一個 cmd 並輸入 god,它會要求您提供憑據並將您帶回與管理員相同的位置...

這是一種與資源管理器集成的方法。 當您右鍵單擊 Windows 資源管理器中的任何文件夾時,它將彈出一個額外的菜單項:

Windows 資源管理器集成

以下是步驟:

  1. 創建此密鑰: \HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin
  2. 將其默認值更改為您希望顯示為菜單項文本的任何值。
    例如“ DOS Shell 作為管理員
  3. 創建另一個密鑰: \HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin\command
  4. 並將其默認值更改為:
    powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/k pushd "%1"'"
  5. 完畢。 現在右鍵單擊任何文件夾,您將在其他項目中看到您的項目。

*我們使用pushd而不是cd以允許它在任何驅動器中工作。 :-)

在這方面似乎有很多非常有創意的解決方案,但我發現Stiegler & Gui對我來說最有意義。 我正在研究如何做到這一點,但將它與我的域管理員憑據結合使用,而不是依賴“當前用戶”的本地權限。

這就是我想出的:

runas /noprofile /user:DomainName\UserName "powershell start cmd -v runas"

這似乎是多余的,但它確實提示我輸入管理員密碼,並且確實作為提升的命令提示符出現。

與上面的一些其他解決方案類似,我創建了一個elevate批處理文件,它運行一個提升的 PowerShell 窗口,繞過執行策略以啟用從簡單命令到批處理文件再到復雜 PowerShell 腳本的所有內容。 我建議將其粘貼在 C:\Windows\System32 文件夾中以方便使用。

原始的elevate命令執行其任務,捕獲輸出,關閉生成的 PowerShell 窗口,然后返回,將捕獲的輸出寫入原始窗口。

我創建了兩個變體, elevatepelevatex ,它們分別暫停並保持 PowerShell 窗口打開以進行更多工作。

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

如果我的鏈接失效,這里是原始提升批處理文件的代碼:

@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
)

對於 Cygwin 的粉絲:

cygstart -a runas cmd

當 CMD 腳本需要管理員權限並且您知道時,將此行添加到腳本的最頂部(在@ECHO OFF的正下方):

NET FILE > NUL 2>&1 || POWERSHELL -ex Unrestricted -Command "Start-Process -Verb RunAs -FilePath '%ComSpec%' -ArgumentList '/c \"%~fnx0\" %*'" && EXIT /b

NET FILE檢查現有的管理員權限。 如果沒有,PowerShell 將在提升的 shell 中重新啟動當前腳本(及其參數),並關閉非提升的腳本。

要允許運行腳本-ex Unrestricted是必要的。 -Command執行以下字符串。 Start-Process -Verb RunAs管理員身份運行進程:shell ( %ComSpec% ,通常是C:\Windows\System32\cmd.exe ) 啟動 ( /c ) 當前腳本 ( \"%~fnx0\" ) 傳遞其參數( %* )。

也許不是這個問題的確切答案,但這很可能是人們最終需要的。

到目前為止,最快的方法是:

  1. CTRL+ALT+DELETE
  2. 運行任務管理器
  3. 單擊FILE > Run New Task > type in "cmd"並勾選“使用管理權限創建此任務”。 盒子。

不確定這是否有幫助,但這是我設法做到的。 如果您需要一個命令從批處理運行但沒有幫助,但是嘿嘿......我需要這個只是因為 Windows 資源管理器已損壞並且需要修復它。

這是我的解決方法。 如果不是原始海報,希望這對某人有所幫助。

回答有點晚了,但對於像我這樣的遲到者來說還是回答了。 我有兩種方法。 第一個是基於對@Dheeraj Bhaskar 的回答幾乎沒有改動,第二個是新的(這里的任何答案中都沒有提到)。

方法1 :為windows創建一個admin命令(只是為了靈活性)。

@ECHO OFF
powershell -Command "Start-Process %1 -Verb RunAs"

打開記事本 -> 復制/粘貼上面的腳本 -> 將其保存為 c:\windows 中的 admin.bat

可以在上面的腳本中添加很多內容以使其更好,但我盡量保持簡單,而且因為我不是批處理腳本專家。

現在您可以使用admin作為命令來運行具有提升權限的任何其他命令或應用程序。

要回答原始問題 - 在標准 cmd 中鍵入admin cmd cmd。

方法 2 :使用runas命令。 為此,我們需要啟用內置管理員帳戶(如果尚未啟用)並設置密碼。 大多數系統默認禁用此帳戶。

在制造 PC 時,您可以在創建用戶帳戶之前使用內置的管理員帳戶來運行程序和應用程序。 資源

啟用管理員帳戶的步驟-

  1. 點擊 Windows+R 並輸入compmgmt.msc ,這將打開計算機管理窗口。
  2. 轉到系統工具 -> 本地用戶和組 -> 用戶
  3. 您應該在此處看到一個名為 Administrator 的帳戶(有關此帳戶的更多信息可以在此處找到)。
  4. 右鍵單擊管理員並選擇屬性。
  5. 檢查密碼永不過期。 取消選中帳戶已禁用和其他所有內容,然后單擊確定。 這將在您的系統上啟用管理員帳戶。 如果已啟用則跳過。
  6. 再次右鍵單擊管理員並單擊設置密碼(默認情況下,它沒有設置密碼,但為了使runas命令正常工作,我們需要設置密碼)。 現在,windows 將向您顯示一個您可以接受的危及生命的警告。 或者,如果您想安全起見,那么您應該在啟用此帳戶后登錄並從那里設置密碼。

現在runas命令應該可以工作了——啟動一個標准的 cmd 並輸入——

runas /user:administrator cmd

EXTRA :現在我們可以創建類似於 Linux 的sudo命令的東西。 使用以下腳本創建一個sudo.bat文件並將其保存在 c:\windows 中。

@ECHO OFF
powershell -Command "runas /user:administrator %1"

現在我們可以做sudo cmd

只需使用命令: runas /noprofile /user:administrator cmd

利用:

startruncmd ,然后是control+shift+enter

您將獲得 UAC,然后是提升的命令 shell。

我為我的 smartctl 做了這個,它變成了一個便攜式應用程序。 我從這里借來的。

@echo off

set location=%cd%\bin
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList { '/k "TITLE Smartctl" & color 07 & pushd "%location%" & prompt $g & echo "Welcome to Smartctl cmd"' }"

prompt $g隱藏了較長的前導路徑。
pushd "%location%"類似於cd /d "%location%"

  1. 另存為smartctl.cmd
  2. smartctl.cmd創建一個快捷方式
  3. 將快捷方式復制到C:\Users\#YourName#\AppData\Roaming\Microsoft\Windows\StartMenu\Programs
  4. 單擊開始菜單旁邊的搜索並輸入smartctl
  5. 右鍵單擊Pin to Start

安裝gsudo工具並使用gsudo命令。 出現 UAC 彈出窗口,最終將提升當前控制台窗口中的命令提示符:

C:\Users\Someone>net session
System error 5 has occurred.

Access is denied.

C:\Users\Someone>gsudo
C:\Users\Someone# net session
There are no entries in the list.

可以使用各種包管理器(Scoop、WinGet、Chocolatey)安裝該工具。

可以使用臨時環境變量與提升的快捷方式(

開始.cmd

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

ascladm.lnk(快捷方式)

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

(要進行路徑更改,您需要臨時創建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"

) (targetedCmd 在提升的 cmd 窗口中執行)

雖然它是 3 個文件,但您可以將所有內容(包括 targetCmd)放在某個子文件夾中(不要忘記將 folderName 添加到補丁中)並將“start.cmd”重命名為 target 的一個名稱

對我來說,這看起來像是最原生的方式,而 cmd 沒有所需的命令

您可以使用以下語法,我有同樣的問題,認為不需要腳本。

runas /profile /user:domain\username cmd

這對我有用,在您的網絡上可能會有所不同。

我通過在cmd中使用以下命令輕松做到了

runas /netonly /user:Administrator\Administrator cmd

輸入此命令后,您必須輸入您的管理員密碼(如果您不知道您的管理員密碼,請將其留空,然后按Enter或輸入內容,對我有用)..

按 Windows + X 鍵,您現在可以選擇具有管理員權限的 Powershell 或命令提示符。 如果您是管理員,則可以使用。 如果系統不是您的,該功能可能無法使用。

我在 .Net 4.8 ExecElevated.exe, 13KBVS 2022 源項目)中創建了這個工具,它將執行一個帶有提升令牌的應用程序(在管理員模式下)。 但是你會得到一個 UAC 對話框來確認! (如果 UAC 已被禁用,可能不會,還沒有測試過)。

調用該工具的帳戶也必須具有管理員權限。 當然權利。

使用示例:

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

我使用runas /user:domainuser@domain cmd成功打開了提升的提示。

有幾種方法可以打開提升的 cmd,但只有您的方法適用於標准命令提示符。 您只需要輸入user而不是username

runas /user:machinename\adminuser cmd

請參閱Microsoft 社區的相關幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM