관리자 및 표준 사용자로 실행할 명령이있는 배치 파일 동안 깜박이고 사라집니다. 이 창에 무엇이

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

/ 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에서 실행됩니다. 나는 그것을 시도했고 그것은 나를 위해 작동합니다.


답변

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


답변

“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