로컬 관리자 계정 (서비스 시작 / 중지)을 사용하여 일부 명령을 실행하고 로그인 된 사용자 (사용자 디렉토리에서 파일 복사)를 사용하는 일부 명령을 실행하려고하는 배치 파일을 작성하려고하는데 문제가 있습니다. 다음 명령을 시도했습니다.
/ savecred를 포함한 runas
runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""
사용할 때 /savecred
비밀번호를 묻는 메시지가 표시되지 않습니다. 대신 명령 프롬프트 창이 잠깐 동안 깜박이고 사라집니다. 이 창에 무엇이 있는지 알 수 없습니다. 서비스가 중지되지 않았습니다.
/ savecred가없는 runas
runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""
이 명령은 암호를 묻는 메시지를 표시하지만 위의 명령과 동일한 동작을 나타냅니다. 명령 프롬프트 창이 잠깐 나타나고 서비스가 중지되지 않습니다.
이상적으로 세부 정보가있는 더 많은 명령을 실행해야하므로 세션의 비밀번호를 저장하고 싶습니다.
이것이 가능합니까? 그렇다면 내가 뭘 잘못하고 있습니까?
답변
스크립트에 다음을 추가하면 강제로 실행됩니다. 아무것도 다운로드 할 필요가 없습니다.
:: BatchGotAdmin
:-------------------------------------
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"
:--------------------------------------
답변
배치 파일을 두 개로 나눕니다. admincmd로 실행하려는 부분은 system32에 붙여 넣습니다. 일반 cmd에서 실행하려는 부분은 일반 폴더에 붙여 넣고 여기에서 system32가있는 두 번째 배치 파일을 호출하십시오. 이 방법으로 두 번째 부분은 항상 admincmd에서 실행됩니다. 나는 그것을 시도했고 그것은 나를 위해 작동합니다.
답변
답변
“Runas”명령은 명령을 “sudo”하지 않습니다.
배치 파일에서이 작업을 수행하려면 생성중인 명령을 “상승”해야합니다. Elevate Powertoy 스크립트를 다운로드하십시오.
http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx
다음과 같이 명령을 실행하십시오.
runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""
또는
runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""
답변
내가 사용하는 것은 다음 코드입니다.
::#################################################################################################################################
:: Elevate this script #
::#################################################################################################################################
(
:: Check Admin rights and create VBS Script to elevate
>nul fsutil 2>&1 || (
:: Very little red console
mode con cols=80 lines=3
color cf
:: Message
title Please wait...
echo.
echo Requesting elevated shell...
:: Create VBS script
echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
if exist "%TEMP%\elevate.vbs" start /b >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
exit /b
)
:: Delete elevation script if exist
if exist "%~1" >nul del /f "%~1" 2>&1
)
pushd "%~dp0"
.... your code ....
popd
@echo를 끄고 발언 한 후에 넣습니다.
답변
evevated 액세스 권한이있는 일부 디렉토리에서만 작업을 시작해야하는 경우 단순화 된 답변 (user325534에 추가) :
@echo off
set MyWorkDir=D:\dev\
echo Requesting administrative privileges...
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/C start /D %MyWorkDir% cmd", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
답변
이 코드는 cmd가 사용자 비밀번호를 요구할 수있게합니다. 사용자는 반드시 비밀번호를 입력해야합니다. 그러면 executable.bat
관리자 권한으로 실행됩니다
main.bat
@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause
executable.bat
all code that runs as administrator