2014-07-28 03:24:17 +0000 2014-07-28 03:24:17 +0000
50
50

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

コマンドは管理者権限で実行する必要があるので、バッチファイルをダブルクリックしたときに 自動的に管理者としてバッチファイルを開くことは可能でしょうか

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

回答 (9)

45
45
45
2014-07-28 03:43:30 +0000

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

ショートカットを作成するには、多くの方法がありますが、最もシンプルで最速の方法は、コンテキストメニューのに送信オプションを使用することです。バッチファイルを管理者権限で実行できるようにするには、以下の手順に従ってください。

  1. あなたが作成したばかりのショートカットを右クリックしてください(デスクトップまたはどこに送信する必要があります)
  2. ショートカットタブの「詳細設定」ボタンをクリックします。管理者として実行」にチェックを入れ、OKを押すとモーダルウィンドウとメインのプロパティウィンドウが表示されます。ショートカットをダブルクリックして実行すると、バッチファイルが管理者として実行されるはずです。
33
33
33
2014-12-15 16:55:24 +0000

別の質問へのベン・グリプカによる回答に投稿されたように:

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"
:--------------------------------------
5
5
5
2015-02-10 14:25:39 +0000

Windows 7 の場合

  1. そのバッチファイルのショートカットを作成します。ショートカットファイルを右クリックします。管理者として実行するためのチェックボックスを見つけるためにアドバンスボタンをクリックします

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

4
4
4
2014-10-07 18:42:22 +0000

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

それから、私自身の状況では、問題の.batファイルはタスクスケジューラによって実行されることがわかりました。この場合、タスクのRun with highest privilegesタブのGeneralオプションにチェックを入れると、きれいに解決します。この場合、タスクの.batタブの&007オプションをチェックすると、問題が解決されます。

PS: 私はこの回答で画像をアップロードできないことに気付きませんでした。または私はすることができますか?

3
3
3
2015-05-31 14:49:17 +0000

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

それを使用するには、単にAdministratorとして実行されることになっているその親バッチスクリプトに次の行を(正確に)挿入します。これは、私たちの親スクリプトのトップで行われ、それはさらに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" %*

だから、どのように動作するか:

  • UACを呼び出します。 ShellExecuteをVBScriptを介してユーザー権限を拾うために呼び出します

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

  • スクリプトの呼び出し元は、引用符で呼び出しに含まれる長い名前のスペースを持つことができます

  • すべてのパラメータを返しますマスタースクリプトは、コマンドラインから渡された呼び出しの伝送がなかったかのように、また、特別な文字で、感嘆符のように(! また、感嘆符(!)やパーセンテージ(%)のような特殊文字を使用して、また、カッコ付き()

  • 呼び出しがこのスクリプトがマスターであるディレクトリで行われた場合、マスタースクリプトの場所を保持します

  • 我々は自分自身の前に変数 "ShowAdminInfo "を設定した場合、補助は、メッセージが表示されます。設定する必要があります設定の例。SET ShowAdminInfo=5 デフォルトでは、この変数が定義されていないため、表示されません。\B\Computer\sharetest.bat

  • スクリプトが複数のBatch_Adminをほぼ同時に呼び出す場合に、必要な補助ファイルを書く際の誤解を防ぎます。1から100までの乱数を使用します。管理者権限への移行は、常にあなたが完全に再びスクリプトを実行する必要があります、新しいウィンドウで、新しい環境では、変数に頼ることなく、私たちのスクリプトで以前に設定されており、これらの変数の値は、管理者として呼び出すために、その後渡すことはありませんでした。ちょうどスクリプトが再び実行されます。

完全なスクリプトBatch B_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)***
1
1
1
2015-11-26 03:54:44 +0000
@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-file

1
1
1
2014-07-28 14:33:06 +0000

代わりに、第二のバッチファイルを作成することができ、これは、管理者パスワードを一度だけ入力しながら、管理者として何かを実行できるようにすることができます。パスワードは認証トークンに保存されており、クラックする方法を知っている本物のコンピュータが必要です。

0
0
0
2015-11-25 07:07:27 +0000

管理者としてバットを実行する例です。これで動作します。

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
0
0
2015-11-11 09:50:46 +0000

コマンドラインユーティリティ 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