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


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名)(adminユーザー名) "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 2014年

回答:


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...、タイムアウトになるまで画面に出力することだけです。
マフィン男14年

@マフィンマン。バッチファイルの最後にコマンドを追加すると、昇格後にコマンドが実行されます。
pelms

1
この方法は優れています。追加の依存関係(psexecなど)は必要ありません。
ウィリアム

そのスクリプトで無限ループに入りました...
JackTheKnife 2016年

0

バッチファイルを2つに分割します。admincmdとして実行する部分をsystem32に貼り付けます。通常のcmdで実行する部分を通常のフォルダに貼り付け、ここからsystem32の2番目のバッチファイルを呼び出します。このように、2番目の部分は常に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"およびそれらのそれぞれは、このエラーを返します:RUNASエラー:実行できません- elevate.cmdネット停止alfrescoTomcat -2147467259:予期しないエラー
スチュアート・レイランド・コール

昇格したコマンドを実行する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

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

実行可能ファイル.bat

all code that runs as administrator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.