ローカル管理者アカウント(サービスの開始/停止)を使用していくつかのコマンドを実行する必要のあるバッチファイルと、ログインユーザー(ユーザーディレクトリからファイルをコピー)を使用していくつかのコマンドを実行する必要があるバッチファイルを書き込もうとすると、問題が発生します。私は次のコマンドを試しました:
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)\""
これらのコマンドはパスワードを要求しますが、上記のコマンドと同じ動作を示します。コマンドプロンプトウィンドウが一瞬ポップアップし、サービスは停止しません。
詳細を指定してさらにコマンドを実行する必要があるため、セッションのパスワードを保存するのが理想的です。
これは可能ですか?そうであれば、私は何が間違っていますか?
スクリプトに以下を追加すると、強制的に昇格して実行されます。何もダウンロードする必要はありません。
:: 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"
:--------------------------------------
サードパーティのソフトウェアを気にしない場合は、 パスワードとして実行 runasspcを試すことができます。パスワードを暗号化されたファイルに保存します。パスワードをバッチファイルで公開する必要はありません。
簡略化された回答(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"
「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)\""
このコードにより、cmdはユーザーパスワードを要求できます。ユーザーはパスワードを入力してから、executable.bat
は管理者として実行されます
@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause
all code that runs as administrator
私が使用しているのは次のコードです:
::#################################################################################################################################
:: 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をオフにして備考の後に置きます。
バッチファイルを2つに分割します。 admincmdとして実行する部分をsystem32に貼り付けます。通常のコマンドで実行する部分を通常のフォルダーに貼り付けます。ここから、system32の2番目のバッチファイルを呼び出します。このように、2番目の部分は常にadmincmdで実行されます。私はそれを試しました、そしてそれは私のために働きます。