バッチファイルを実行する際に、管理者権限を持たせる方法です。
※2018/08/02 加筆修正しました。ほぼ全面リニューアル記事です。
目次
1. アカウントパスワードの入力を求めた後、管理者権限で実行する
いきなり本題を書きます!以下のバッチを実行すると、アカウントパスワードの入力が求められ、認証に成功すれば内容が実行されます。
すでにコンピューターの管理者でログインしている場合は、ユーザーアカウント制御の確認ダイアログが出て、「はい」を選択するだけで実行されます。
9行目の「rem —以下に~—」の後に、実行したい内容を書いてください。ここでは例としてメッセージを表示しています。
@echo off
whoami /priv | find "SeLoadDriverPrivilege" > nul
if %ERRORLEVEL% neq 0 (
powershell.exe -Command Start-Process ""%0"" -Verb Runas -WindowStyle Hidden
exit
)
rem ---以下に実行したい内容を記述---
echo msgbox "実行しました。",vbInformation,"管理者実行" > %TEMP%\resultmsg.vbs & %TEMP%\resultmsg.vbs
del %TEMP%\resultmsg.vbs
初めに「whoami」のところで管理者権限があるかどうか判断しています。最初に実行された時は権限が無いので、ifの分岐に入ります。
「powershell.exe」の行で、アカウントパスワードの入力を求めるとともに、自身のバッチファイルを最小化して実行しています。
最小化せずにコマンドプロンプトの画面を表示しておきたい場合は、「-WindowStyle Hidden」を削除してください。
管理者として実行されたら、ifの分岐には入らずrem以下の内容が実行される仕組みです。
バッチの最初に5行追加するだけなので、とても簡単ですね!
2. コマンドプロンプトを管理者権限で起動して待機する
コマンドプロンプトを単に管理者権限で起動する方法も、念のため書いておきます。
コマンドプロンプトは “C:\Windows\System32\cmd.exe” にありますので、右クリックから「管理者として実行」を選択します。
左上に「管理者」と表示が出ていればOKです。
3. VBSを使用して管理者権限で実行する(旧方式)
旧方式ですが、記録として残しておきます。
以下の内容をVBSとして保存してください。8行目の「起動するバッチ.bat」に実行対象のバッチファイルを指定しておきます。VBSとバッチは同じフォルダ内に置いてください。
VBSを起動すればアカウントパスワード入力画面になり、認証に成功したらバッチが実行されます。
Dim FSO
Dim fullpath
Dim filepath
Dim folderpath
Dim batfile
' バッチファイル名を指定(VBSと同じディレクトリに置く)
batfile = "起動するバッチ.bat"
' 実行しているVBSのディレクトリを取得してフルパスを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
filepath = Wscript.ScriptFullName
folderpath = FSO.GetParentFolderName(filepath)
fullpath = FSO.BuildPath(folderpath, batfile)
' 管理者権限に昇格(要パスワード入力)0:GUI 1:CUI
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
For Each value in os
if left(value.Version, 3) < 6.0 then exit do 'Exit if not vista
Next
Set sha = CreateObject("Shell.Application")
sha.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"
WScript.Quit
loop
' バッチファイル実行
CreateObject("WScript.Shell").Run fullpath,1,True