web-dev-qa-db-ja.com

管理者および標準ユーザーとして実行するコマンドを含むバッチファイル

ローカル管理者アカウント(サービスの開始/停止)を使用していくつかのコマンドを実行する必要のあるバッチファイルと、ログインユーザー(ユーザーディレクトリからファイルをコピー)を使用していくつかのコマンドを実行する必要があるバッチファイルを書き込もうとすると、問題が発生します。私は次のコマンドを試しました:

runs with/savecred

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

これらのコマンドはパスワードを要求しますが、上記のコマンドと同じ動作を示します。コマンドプロンプトウィンドウが一瞬ポップアップし、サービスは停止しません。

詳細を指定してさらにコマンドを実行する必要があるため、セッションのパスワードを保存するのが理想的です。

これは可能ですか?そうであれば、私は何が間違っていますか?

8

スクリプトに以下を追加すると、強制的に昇格して実行されます。何もダウンロードする必要はありません。

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

サードパーティのソフトウェアを気にしない場合は、 パスワードとして実行 runasspcを試すことができます。パスワードを暗号化されたファイルに保存します。パスワードをバッチファイルで公開する必要はありません。

0
Sun

簡略化された回答(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
lietus

「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)\""
0
surfasb

このコードにより、cmdはユーザーパスワードを要求できます。ユーザーはパスワードを入力してから、executable.batは管理者として実行されます

main.bat

@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause

実行可能ファイル

all code that runs as administrator
0
jfraber

私が使用しているのは次のコードです:

::#################################################################################################################################
:: 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
FifthAxiom

バッチファイルを2つに分割します。 admincmdとして実行する部分をsystem32に貼り付けます。通常のコマンドで実行する部分を通常のフォルダーに貼り付けます。ここから、system32の2番目のバッチファイルを呼び出します。このように、2番目の部分は常にadmincmdで実行されます。私はそれを試しました、そしてそれは私のために働きます。

0
sudhi