web-dev-qa-db-ja.com

昇格されたアクセス許可でバッチファイルコマンドを実行する方法

ユーザーに配布するバッチファイルを作成しています。管理者特権でいくつかのコマンドを実行する必要があります。私の最初の解決策は使用することでした:

runas /noprofile /user:Administrator SOME_COMMAND  

ただし、多くのマシン(私のものを含む)は非表示の管理者アカウントを非アクティブにしているため、管理者パスワードが設定されていません。マシンごとにユーザーが異なるため、別のユーザー名を指定することもできません。バッチファイルを介して「右クリック->管理者として実行」アクションを複製する方法はありますか?プロンプトのポップアップは気にしません。ユーザーに明示的に右クリックして管理者として実行させたくないだけです。

5
hazrmard

最近のすべての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し、次に目的のバッチファイルを実行します。

7
Ben N

RunAdmin コマンドラインから昇格された権限でプログラムを実行できます(ユーザーが資格情報を入力できるようにUACが表示されます)。

0
Ultralisk

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

::#################################################################################################################################
:: 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をオフにしてコメントの後に置きます。

0
FifthAxiom