Windows 명령 줄에서 관리자로 명령을 실행하는 방법은 무엇입니까?
관리 중인 Bazaar 저장소에 대해 Windows에서 빌드 및 설치 프로세스를 수행하는 작은 스크립트가 있습니다. Windows 셸 (cmd.exe) 내 에서 상승 된 관리 권한으로 스크립트를 실행하려고합니다. 마치 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택한 것처럼 하지만 사용이 필요한 방법은 사용하지 않습니다. 그래픽 인터페이스.
일괄 / 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
시작 버튼을 누릅니다. 검색 창에 "cmd"를 입력 한 다음 Ctrl+ Shift+ 를 누릅니다.Enter
runas
명령을 사용하여 관리자로 프로그램을 실행하기 만하면됩니다 (주의 사항).
runas /user:Administrator "cmdName parameters"
제 경우에는
runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"
인용 부호를 사용해야합니다. 그렇지 않으면 runas 명령이 스위치 옵션을 cmd로 끌어 올립니다.
또한 관리 셸 (cmd.exe)은 C : \ Windows \ System32 폴더에서 시작됩니다. 이것은 내가 원하는 것은 아니지만 현재 경로를 내 설치 프로그램에 전달하고 절대 경로를 사용하여 참조하는 것은 쉽습니다.
주의 사항 : 관리자 계정 활성화
이 방법으로 runas를 사용하려면 관리 계정을 활성화해야하며 이는 Windows 7 또는 Vista에서 기본값이 아닙니다. 그러나 다음 은 세 가지 방법으로 활성화하는 방법에 대한 훌륭한 자습서입니다.
나는 나 자신을 개방하여 활성화 , 관리 도구 , 로컬 보안 정책 , 다음으로 이동 로컬 정책 \ 보안 옵션 과의 값 변경 계정 : 관리자 계정 상태의 링크에 표시된 세 가지 방법 중 어느 것도없는 사용에 대한 정책을.
더 쉬운 방법 :
C:> net user Administrator /active:yes
:: ------- 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
데모 : self-elevating.bat "공백이있는 경로"arg2 3 4 "another long argument"
그리고 이것은 임시 파일을 만들 필요가없는 또 다른 버전입니다.
<!-- : --- 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
I would set up a shortcut, either to CMD or to the thing you want to run, then set the properties of the shortcut to require admin, and then run the shortcut from your batch file. I haven't tested to confirm it will respect the properties, but I think it's more elegant and doesn't require activating the Administrator account.
Also if you do it as a scheduled task (which can be set up from code) there is an option to run it elevated there.
Simple pipe trick, ||
, with some .vbs used at top of your batch. It will exit regular and restart as administrator.
@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
It also del /Q
the temp.vbs when it's done using it.
Although @amr ali's code was great, I had an instance where my bat file contained >
<
signs, and it choked on them for some reason.
대신 이것을 찾았습니다. 코드 앞에 모든 것을 넣으면 완벽하게 작동합니다.
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"
:--------------------------------------
찾아서 C:\windows\System32
마우스 오른쪽 버튼으로 클릭 cmd.exe
하고 관리자 권한으로 실행 하십시오 . Windows 7에서 나를 위해 일했습니다.
상승 된 권한으로 스크립트를 실행하려는 경우 스크립트 파일에 대해 동일한 작업을 수행하거나 다른 사용자로 스케줄러 실행 옵션을 사용하여 스크립트를 실행할 수 있습니다.
'Programing' 카테고리의 다른 글
Facade와 Gateway 디자인 패턴의 차이점은 무엇입니까? (0) | 2020.12.14 |
---|---|
MySQL 데이터베이스에 데이터를 삽입하려면 어떻게해야합니까? (0) | 2020.12.14 |
리디렉션시 Rails 플래시 알림을 표시하는 방법은 무엇입니까? (0) | 2020.12.14 |
위조 방지 토큰을 해독 할 수 없습니다. (0) | 2020.12.14 |
Java 8의 속성을 기반으로 객체 목록에서 중복 제거 (0) | 2020.12.14 |