ユーザーに配布するバッチファイルを作成しています。管理者特権でいくつかのコマンドを実行する必要があります。私の最初の解決策は使用することでした:
runas /noprofile /user:Administrator SOME_COMMAND
ただし、多くのマシン(私のものを含む)は非表示の管理者アカウントを非アクティブにしているため、管理者パスワードが設定されていません。マシンごとにユーザーが異なるため、別のユーザー名を指定することもできません。バッチファイルを介して「右クリック->管理者として実行」アクションを複製する方法はありますか?プロンプトのポップアップは気にしません。ユーザーに明示的に右クリックして管理者として実行させたくないだけです。
最近のすべてのWindowsシステムにあるPowerShellを利用できます。
昇格が必要なコマンドを別のバッチファイルに分割します。 elevated.bat
。次に、それらを実行するときに、昇格していないスクリプトからこれを使用します。
powershell -command "Start-Process elevated.bat -Verb runas"
-Verb runas
の部分は、昇格のプロンプトの原因です。元のバッチファイルが既に管理者として実行されている場合、またはUACプロンプトがオフの場合、新しいファイルはプロンプトなしで昇格されます。
昇格したバッチプロセッサの現在のディレクトリはSystem32
で始まることに注意してください。問題がある場合は、この代替バージョンを使用して、昇格されていないスクリプトと同じディレクトリで起動することができます。
powershell -command "Start-Process cmd -ArgumentList '/c %CD% && elevated.bat' -Verb runas"
これにより、新しいcmd
インスタンスは、まず昇格されていないプロンプトの%CD%
変数によって提供されるディレクトリにcd
し、次に目的のバッチファイルを実行します。
RunAdmin コマンドラインから昇格された権限でプログラムを実行できます(ユーザーが資格情報を入力できるようにUACが表示されます)。
私が使用しているのは次のコードです:
::#################################################################################################################################
:: Elevate this script #
::#################################################################################################################################
(
:: Check Admin rights and create VBS Script to elevate
>nul fsutil dirty query %SYSTEMDRIVE% 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 /wait >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
:: Delete elevation script if exist
if exist "%TEMP%\elevate.vbs" >nul del /f "%TEMP%\elevate.vbs" 2>&1
exit /b
)
)
pushd "%~dp0"
.... your code ....
popd
@echoをオフにしてコメントの後に置きます。