[英]How to open an elevated cmd using command line for Windows?
如何在普通 cmd 上使用命令行打開提升的命令提示符?
例如,我使用runas /username:admin cmd
但打開的 cmd 似乎沒有提升! 有什么解決辦法嗎?
我遇到了同樣的問題,我能夠以管理員身份從 CMD 打開 CMD 的唯一方法是執行以下操作:
powershell -Command "Start-Process cmd -Verb RunAs"
然后回車我沒有足夠的聲譽來為最佳答案添加評論,但是借助別名的力量,您只需鍵入以下內容即可逃脫:
powershell "start cmd -v runAs"
這只是 user3018703 優秀解決方案的較短版本:
powershell -Command "Start-Process cmd -Verb RunAs"
sudo.bat
的文件(您可以將sudo
替換為您想要的任何名稱),其內容如下powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
sudo.bat
移動到PATH
中的文件夾; 如果您不知道這意味着什么,只需將這些文件移動到c:\windows\
sudo
將在運行對話框( win+r )或資源管理器地址欄中工作(這是最好的部分 :))sudo.bat
的文件(您可以將sudo
替換為您想要的任何名稱),其內容如下nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
和sudo.bat
移動到PATH
中的文件夾; 如果您不知道這意味着什么,只需將這些文件移動到c:\windows\
sudo
將在運行對話框( win+r )或資源管理器地址欄中工作(這是最好的部分 :))我一直使用 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 )。
%SystemRoot%\System32\cmd.exe /k "cd /d"
@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 資源管理器中的任何文件夾時,它將彈出一個額外的菜單項:
以下是步驟:
\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin
\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin\command
powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/k pushd "%1"'"
*我們使用pushd
而不是cd
以允許它在任何驅動器中工作。 :-)
與上面的一些其他解決方案類似,我創建了一個elevate
批處理文件,它運行一個提升的 PowerShell 窗口,繞過執行策略以啟用從簡單命令到批處理文件再到復雜 PowerShell 腳本的所有內容。 我建議將其粘貼在 C:\Windows\System32 文件夾中以方便使用。
原始的elevate
命令執行其任務,捕獲輸出,關閉生成的 PowerShell 窗口,然后返回,將捕獲的輸出寫入原始窗口。
我創建了兩個變體, elevatep
和elevatex
,它們分別暫停並保持 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\"
) 傳遞其參數( %*
)。
也許不是這個問題的確切答案,但這很可能是人們最終需要的。
到目前為止,最快的方法是:
CTRL+ALT+DELETE
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 時,您可以在創建用戶帳戶之前使用內置的管理員帳戶來運行程序和應用程序。 資源
啟用管理員帳戶的步驟-
compmgmt.msc
,這將打開計算機管理窗口。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
利用:
start
、 run
、 cmd
,然后是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%"
smartctl.cmd
smartctl.cmd
創建一個快捷方式C:\Users\#YourName#\AppData\Roaming\Microsoft\Windows\StartMenu\Programs
smartctl
Pin to Start
可以使用臨時環境變量與提升的快捷方式(
開始.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, 13KB ( VS 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.