web-dev-qa-db-ja.com

管理者としてバッチファイルを自動的に実行することは可能ですか

コマンドを実行する必要があるため、バッチファイルをダブルクリックすると自動的にバッチファイルを管理者として開くことができるかどうか考えています。管理者権限を持ちます。

注:ファイルを右クリックしてRun As Administratorをクリックするという解決策については既に知っていますが、これは自動的な解決策ではありません。

45
Antp

はい、管理者権限でバッチファイルを実行することができます。残念ながら、これを自分自身のバッチファイルから直接行うことはできません。これを機能させるには、まずそのバッチファイルのショートカットを作成し、そのショートカットのプロパティを変更する必要があります。

ショートカットを作成するには、さまざまな方法がありますが、最も簡単で早い方法は、コンテキストメニューの[に送信]オプションを使用することです。

Right click batch file > Send to > Desktop (create shortcut)

もちろん、あなたはあなたが望むところへのショートカットを送ることができます。バッチファイルを管理者として実行するように昇格するには、次の手順に従います。

  1. 作成したばかりのショートカットを右クリックします(デスクトップ上または送信した場所にあるはずです)。
  2. [ショートカット]タブの[詳細設定]ボタンをクリックします。
  3. [管理者として実行]チェックボックスをオンにして、モーダルウィンドウとメインプロパティウィンドウの両方に[OK]を押します。
  4. ダブルクリックしてショートカットを実行すると、バッチファイルが管理者として実行されます。
40
10100111001

で別の質問に対する回答 によって投稿されたBen Gripka:

REM --add the following to the top of your bat file--


@echo off

:: 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"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
28
user399109

windows 7の場合

  1. そのバッチファイルへのショートカットを作成します。

  2. ショートカットファイルを右クリック

  3. 管理者として実行するためのチェックボックスを見つけるには、進むボタンをクリックします。

下のスクリーンショットを確認してください

Screenshot

4
fedmich

私のスクリプトBatch_Adminを使用して、任意のタイプのバッチ独自スクリプト、またはBATまたは.CMDで使用するために管理者を自動的に昇格させることができます。この機能は、標準ツールを使用して、および異なるWindowsシステムでも同じように、標準環境での作業を保証します。それはいくつかの標準的で組み込みのWindowsコマンドを使います。他の外部スクリプトを使用しないでください。スクリプトバッチだけでなく、任意のプログラムを管理者として呼び出すために使用できます。小さなスクリプトを作成するだけで十分です。その後、そのスクリプトが、許可管理者を必要とするプログラムを呼び出します。これを任意の検索パスフォルダー(%PATH%から)に配置します。

これを使用するには、管理者として実行される親のBatchスクリプトに次の行を(正確に同じように)挿入するだけです。これは親スクリプトの一番上で行うのが最善であり、最初にCALL、さらにいくつかのサブスクリプトを介して呼び出されるのが最善です(以下の詳細な説明を参照)。

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

これは、CALL構文によって呼び出される任意の子スクリプト内に挿入できます。メッセージを表示したままにしても、管理者権限はありません。 Batch_Adminを呼び出す前に5秒間、変数 "ShowAdminInfo"を秒数で設定します。

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

それでそれはどのように動作します:

•VBScriptを介してUAC.ShellExecuteを呼び出し、ユーザー権限を取得します。

•バッチでスクリプト、またはBATまたはCMDを実行します。

•スクリプトの呼び出し元は、コールに引用符で囲まれた長い名前空間を持つことができます。

•コマンドラインから渡されたマスタースクリプトにすべてのパラメータコールを返し、あたかもコールが送信されていないかのように、感嘆符(!)やパーセント(%)などの特殊文字を使用して何かを最初から開始します。括弧付き()

•コールがこのスクリプトがマスターとなっているディレクトリで行われた場合は、マスタースクリプトの場所を保持します。

•自分自身の前に変数 "ShowAdminInfo"を設定すると、Auxiliaryはメッセージを表示します。 5秒間、管理者が追加情報を提供する権利が直ちに通過するのを妨げ、情報に基づいた決定が下される可能性があります。設定が必要な設定例:SET ShowAdminInfo = 5デフォルトでは、この変数は定義されていないため表示されません。

•スクリプトは、システム検索パス%PATH%およびネットワークリソース(\ Computer\share\test.batなど)からも呼び出しています。

•スクリプトがほぼ同時に複数のBatch_Adminを呼び出すときに、必要な補助ファイルを記述する際の誤解を防止します。 1から100までの乱数を使用します

•しかし、最善の方法は、親スクリプトで使用することです。管理者権限への移行では、スクリプトで以前に設定された変数に頼ることなく、新しいウィンドウで、新しい環境で、スクリプトを完全に再度実行する必要があります。 。スクリプトだけが再度実行されます。

完全なスクリプトBatch_Adminの下。これに関する詳しい情報は私のサイトにあります。

次のテキストをメモ帳にコピーして、ディスクに保存します。Batch_Admin.bat

@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)

::  A D M I N I S T R A T O R   - Automatically get admin rights for script batch. Paste this on top:    net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*
::                                Also keep Batch directory localisation and then set variable:   PATH_BAT
::                                if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
::                                Elaboration:  Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion

SET "Localy="
if exist "%~1"      SET "Localy=YES"
if exist "%~1.BAT"  SET "Localy=YES"
if exist "%~1.CMD"  SET "Localy=YES"
if defined Localy   FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"

 SET P1=%~1
 SET Parameters=%*
 SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
 SET Parameters=!Parameters:%P1%=!
 SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
 SET Parameters=%Parameters:~3%

net session >nul 2>nul&if not errorlevel 1  goto Administrator_OK

if not defined ShowAdminInfo   goto skip_message_Administrator
echo.
echo Script:  %~1
echo.
echo *****************************************************************
echo ***    R U N N I N G     A S     A D M I N I S T R A T O R    ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo          shortcut ^> Advanced ^> Running as Administrator
echo.
echo     Alternatively run once "As Administrator"
echo     or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch  %ShowAdminInfo%  seconds ...
TIMEOUT /T %ShowAdminInfo% > nul

:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1

SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat"  SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul

echo @SET "PATH_BAT=%PATH_BAT%"               > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%"    >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy  (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"

echo SET UAC = CreateObject^("Shell.Application"^)                                   > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B

:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R  - Automatically get admin rights  (The End)  ***
3
Artur Zgadzaj

受け入れられた答えは確かに機能します。しかし、私は、Windows 7では、ショートカットがクリックされるたびにUACダイアログを我慢しなければならないことに気付きました。この私見は、この質問の「自動的な」ことを著しく損ねています!

それから私は私自身の状況では、問題の.batファイルがTask Schedulerによって実行されることになっていることを知りました。この場合、タスクのGeneralタブのRun with highest privilegesオプションをチェックすることで問題をうまく解決できます。その後、.batは管理者として問題なく実行されます。

シモンズ:私はこの答えで画像をアップロードできないことに気づいていませんでした。それとも私?

3
Ifedi Okonkwo
@echo off        
:: 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  
chkdsk

SOURCE: https://social.technet.Microsoft.com/Forums/windows/en-US/bc8a4561-d97e- 4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatchファイル

あるいは、2番目のバッチファイルを作成することもできます。これにより、管理者パスワードを1回入力するだけで、管理者として何でも実行できるようになります。パスワードは認証トークンに保存され、実際のコンピュータに解読方法を知らせます。

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
1
Brapapple

コマンドラインユーティリティ elevate を使うことができます。 (ダウンロードリンク - https://drive.google.com/open?id=0Bz7qe_olclTwVGZLUklFMHNxQ00

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
0
T.Todua

これは、管理者としてバットを実行する例です。わたしにはできる。

こんなふうになります:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
0
JoshMoreNo