관리자 및 표준 사용자로 실행할 명령이있는 배치 파일


9

로컬 관리자 계정 (서비스 시작 / 중지)을 사용하여 일부 명령을 실행하고 로그인 된 사용자 (사용자 디렉토리에서 파일 복사)를 사용하는 일부 명령을 실행하려고하는 배치 파일을 작성하려고하는데 문제가 있습니다. 다음 명령을 시도했습니다.

/ 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)\""

이 명령은 암호를 묻는 메시지를 표시하지만 위의 명령과 동일한 동작을 나타냅니다. 명령 프롬프트 창이 잠깐 나타나고 서비스가 중지되지 않습니다.

이상적으로 세부 정보가있는 더 많은 명령을 실행해야하므로 세션의 비밀번호를 저장하고 싶습니다.

이것이 가능합니까? 그렇다면 내가 뭘 잘못하고 있습니까?


마지막에 "일시 정지"명령을 추가하여 닫히지 않도록하십시오
Martin

배치 파일 끝에서 이미 일시 중지되었지만 명령이 다른 명령 프롬프트를 시작하고 있습니다.이를 중지하는 방법을 모르겠습니다.
Stuart Leyland-Cole

출력을 파일로 보내려고 시도하고 파일로 인쇄되는지 확인하십시오. "runas / user : (PC 이름) (관리자 사용자 이름)"net stop \ "(서비스 이름) \" ">> log.txt"
Martin

/ savecred 옵션을 사용하여 명령을 실행해야합니다. 그렇지 않으면 암호 프롬프트가 로그 파일에 나타납니다. 내가 실행하면 runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txt아무것도 로그 파일에 출력되지 않습니다.
Stuart Leyland-Cole

Rob van der Woude의 일괄 디버깅 페이지 : robvanderwoude.com/battech_debugging.php를 확인하십시오 . 가장 중요한 것은 LOGBATCH.BAT를 다운로드하여 다음 LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needs과 같이 실행 yourbatch.bat하십시오. 그러면 수행 한 모든 명령 / 작업이 포함 된 로그 파일이 생성됩니다 .
JSanchez

답변:


12

스크립트에 다음을 추가하면 강제로 실행됩니다. 아무것도 다운로드 할 필요가 없습니다.

:: 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"
:--------------------------------------

이 모든 것은 시간이 Requesting administrative privileges...초과 될 때까지 화면에 인쇄 됩니다.
머핀 남자

@ 머핀 맨. 배치 파일 끝에 명령을 추가하면 권한 상승 후 명령이 실행됩니다.
펠름

1
이 방법은 우수합니다. psexec와 같은 추가 종속성이 필요하지 않습니다.
William

그 스크립트와 함께 무한 루프에 들어
갔습니다

0

배치 파일을 두 개로 나눕니다. admincmd로 실행하려는 부분은 system32에 붙여 넣습니다. 일반 cmd에서 실행하려는 부분은 일반 폴더에 붙여 넣고 여기에서 system32가있는 두 번째 배치 파일을 호출하십시오. 이 방법으로 두 번째 부분은 항상 admincmd에서 실행됩니다. 나는 그것을 시도했고 그것은 나를 위해 작동합니다.


0

타사 소프트웨어가 마음에 들지 않으면 암호 runasspc 로 실행할 수 있습니다 . 암호를 암호화 된 파일로 저장합니다. 배치 파일에 비밀번호를 노출 할 필요는 없습니다.


0

"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)\""

: 나는 다음과 같은 3 개 명령을 시도 runas /user:$PcName\$Username /savecred "elevate.cmd sc stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop $ServiceName"그리고 그들 각각이 오류를 반환 실행할 수 없습니다 - elevate.cmd 순 정지 -2147467259 alfrescoTomcat : RUNAS 오류 지정되지 않은 오류
스튜어트 레이 랜드 - 콜

명령을 실행 3 선 배치 파일 상승 : github.com/kasajian/pseudo
zumalifeguard

0

내가 사용하는 것은 다음 코드입니다.

::#################################################################################################################################
:: 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를 끄고 발언 한 후에 넣습니다.


0

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"

0

이 코드는 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.