我有一個小腳本,用於在Windows上爲我管理的Bazaar存儲庫執行構建和安裝過程。我試圖從內運行與提升,管理權限的腳本Windows外殼程序(CMD.EXE) - 就好像我右鍵單擊它並選擇以管理員身份運行,但沒有使用任何方法這需要使用圖形界面。如何從Windows命令行以管理員身份運行命令?
回答
批處理/ WSH混合動力是能夠調用ShellExecute的顯示UAC提升對話框......
@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
cscript //E:JScript //nologo "%~f0"
@goto :EOF
)
echo.Performing admin tasks...
REM call foo.exe
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end
瀏覽C:\windows\System32
並右擊cmd.exe
並以管理員身份運行。爲我工作在Windows 7
如果你想運行使用提升的權限的腳本,你可以在腳本文件做同樣或使用調度程序的運行方式不同的用戶選項來運行該腳本。
這很棒,但不是我在命令行中可以做的事情,例如從安裝腳本。唯一需要的用戶干預是確認升級 - 與在Windows 6/7上安裝任何程序時類似。 – jpaugh 2011-05-10 17:31:11
所有你需要做的就是使用runas
命令來運行程序作爲管理員(一個警告)。
runas /user:Administrator "cmdName parameters"
在我而言,這是
runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"
請注意,您必須使用引號,否則runas命令將吞噬開關選項鍵入cmd。
還要注意的是,管理shell(CMD.EXE)在C啓動:\ windows \ system32目錄。這不是我想要的,但很容易將當前路徑傳遞給我的安裝程序,並使用絕對路徑引用它。
以這種方式使用runas的警告是這樣的:必須啓用管理帳戶,這不是Windows 7或Vista的默認設置。然而,here是如何使一個偉大的教程,以三種不同的方式:
我自己啓用它打開管理工具,本地安全策略,然後導航至本地策略\安全選項和將帳戶:管理帳戶狀態策略的值更改爲啓用,這不是鏈接中顯示的三種方式之一。
更簡單的方法:
C:> net user Administrator /active:yes
我將建立一個快捷方式,無論是到CMD或要運行的東西,然後設置快捷方式,需要管理員的屬性,然後運行批處理文件的快捷方式。我沒有測試過,以確認它會尊重這些屬性,但我認爲它更優雅,並且不需要激活管理員帳戶。
此外,如果你做一個計劃任務(可以從代碼中設置)有運行它升高有一個選項。
:: ------- Self-elevating.bat --------------------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
findstr "^:::" "%~sf0">temp.vbs
cscript //nologo temp.vbs & del temp.vbs & exit /b
::: Set objShell = CreateObject("Shell.Application")
::: Set objWshShell = WScript.CreateObject("WScript.Shell")
::: Set objWshProcessEnv = objWshShell.Environment("PROCESS")
::: strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
::: objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
:admin -------------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
對於一個演示:ARG2 3 4「另一個長期爭論自elevating.bat 「帶有空格的路徑」 「
而這是另一個不需要創建臨時文件的版本。
<!-- : --- Self-Elevating Batch Script ---------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
cscript //nologo "%~f0?.wsf" //job:Elevate & exit /b
-->
<job id="Elevate"><script language="VBScript">
Set objShell = CreateObject("Shell.Application")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objWshProcessEnv = objWshShell.Environment("PROCESS")
strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
</script></job>
:admin -----------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
第二個版本真的很棒。看看美化的''''cscript「self-elevating.bat?.wsf」''''部分。 – Rockallite 2015-04-29 02:01:59
純文本'''.bat''和XML'''.wsh'''混合內容也非常漂亮。 – Rockallite 2015-04-29 02:16:47
「find」S-1-16-12288「'的SID是什麼?當我使用'whoami/groups'時不會出現。 – lit 2015-09-16 14:34:22
簡單的管道技巧,||
,在批處理中使用了一些.vbs。它將退出正常並以管理員身份重新啓動。
@AT>NUL||echo set shell=CreateObject("Shell.Application"):shell.ShellExecute "%~dpnx0",,"%CD%", "runas", 1:set shell=nothing>%~n0.vbs&start %~n0.vbs /realtime& timeout 1 /NOBREAK>nul& del /Q %~n0.vbs&cls&exit
它也del /Q
temp.vbs完成使用它。
這是邪惡的!你介意更深入地解釋這一行嗎? – jpaugh 2014-12-31 15:14:56
儘管@amr ali's代碼很棒,但我有一個例子,我的bat文件包含>
<
標誌,並且因爲某些原因它們窒息。
我找到了這個。把它放在你的代碼之前,它完美的工作。
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else (goto gotAdmin)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs")
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
- 1. 以管理員身份在Windows命令行中運行cmd
- 2. 如何以管理員身份通過java運行命令行命令
- 3. 從命令行以管理員身份運行Python程序
- 4. Powershell和Python - 如何以管理員身份運行命令
- 5. 如何以管理員身份在Vb6中運行CMD命令
- 6. 以管理員身份從cygwin/mintty運行命令
- 7. 以管理員身份運行PowerShell命令 - 命令本身不會加載
- 8. 如何在Windows 7下以管理員身份運行命令行程序?
- 9. 以命令行管理員身份運行
- 10. 如何從VBS以管理員身份執行PowerShell命令?
- 11. 以管理員身份運行cmd以及命令?
- 12. 以C#管理員身份運行shell命令(manage-bde)
- 13. 以管理員身份通過java運行dos命令
- 14. 以PowerShell腳本中的管理員身份運行命令。 UAC
- 15. Windows CMD批處理文件以管理員身份運行命令
- 16. 如何以管理員身份運行VS 2010 Pro命令行選項?
- 17. 在Windows上以管理員身份運行時無法識別'choco'命令
- 18. PowerShell:如何從PowerShell以管理員身份運行遠程命令提示符命令?
- 19. 如何以管理員身份在rake任務中運行shell命令?
- 20. 如何以管理員身份運行cmd並將命令傳遞給它?
- 21. 如何從命令提示符下以「以管理員身份運行」運行應用程序?
- 22. 如何以管理員身份運行?
- 23. 如何以管理員身份運行?
- 24. 如何讓cmd.exe調用沒有管理員帳戶密碼的「以管理員身份運行」命令?
- 25. 從java以管理員身份啓動命令提示符(CMD)
- 26. 開發一個以管理員身份運行命令的應用程序
- 27. 蒙戈:命令行管理員身份驗證失敗
- 28. 如何以管理員模式運行命令
- 29. 如何從Windows命令行運行Qt
- 30. 如何從Windows命令行運行Maxima
您可以請@安德斯,告訴我這個腳本的工作要求是什麼? a)Windows版本,b)已安裝Visual Basic或.NET,c)已安裝Java。在我看來,沒有任何東西只有Windows運行,但我不確定。謝謝。 – 2014-03-21 14:15:32
@SopalajodeArrierez:在Win2000中添加runas動詞,並在Win98/IE4 IIRC中添加cscript.exe。 – Anders 2014-03-21 19:55:24
謝謝@安德斯。請稍微提一個問題:我試圖用我自己的程序(調用執行Windows shell.exe的* .lnk *文件)來使用您的腳本,並且我無法設置我的首選**圖標**,就像我一直用任何.lnk文件做。這是:將圖標分配給.lnk,但在執行期間(接受UAC提示後),運行窗口具有通常的* CMD *圖標。有沒有辦法解決這個問題? – 2014-03-22 12:35:50