PowerShell・自動化

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつき

2025年12月4日

PowerShellをバッチファイルから起動する方法|管理者権限チェック付きのサンプルつきのアイキャッチ画像

はじめに

PowerShell のスクリプトを実行したいときに、「バッチファイルから起動したい」という場面は意外と多いです。
特に、PowerShell を触らないユーザーにも簡単に使ってもらいたい場合は、ダブルクリックで実行できる .bat のほうが便利ですよね。

本記事では、バッチファイルから PowerShell を起動する基本の方法から、管理者権限を自動でチェックして昇格してくれる実践的なバッチコードまで詳しく解説します。

サンプルとして、eth1-Switch-NetworkWithProxy.ps1 を呼び出す例で説明しています。

なぜバッチから PowerShell を起動するの?

バッチファイルを使って PowerShell を起動するメリットは、次のとおりです。

  • ダブルクリックするだけで、PowerShell の実行が完結する
  • 管理者実行が必要な処理も、自動で権限昇格できる
  • 古い環境でも動きやすく、ユーザーへの配布が簡単
  • bat → PowerShell → bat といった複合処理もしやすい

運用現場では、PowerShell は強力だが、ユーザーはバッチの方が慣れているというケースがよくあります。
そこで、バッチから PowerShell を呼び出す仕組みが役立ちます。

バッチから PowerShell を起動する最も簡単な方法

最小限の構文はこれだけです。

powershell -ExecutionPolicy Bypass -File "script.ps1"

よく使うオプション

  • -ExecutionPolicy Bypass
    → スクリプト実行ポリシーの影響を受けずに実行する
  • -File
    → 実行したい PowerShell ファイルを指定

また、バッチファイルと同じフォルダの .ps1 を呼びたい場合は %~dp0 を使います。

powershell -ExecutionPolicy Bypass -File "%~dp0script.ps1"

管理者権限が必要なスクリプトを実行したい

Windows11 UAC

PowerShell スクリプトによっては、管理者権限が必要なケースがあります。

  • レジストリを変更する
  • Windows の設定を変更する
  • システムフォルダへの書き込みを行う

バッチファイルをダブルクリックしただけでは、通常の権限で実行されてしまうため、エラーになったり、処理が正常に行われないことがあります。

そこで使いたいのが、「管理者権限を自動チェック → 権限昇格して再実行」する仕組みです。

管理者権限をチェックして PowerShell を起動するバッチ

以下が、管理者権限をチェックするバッチファイルです。

@echo off
powershell -Command "if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) { exit 1 }"
if %errorlevel% NEQ 0 (
    echo 管理者権限が必要です。再実行します...
    powershell -Command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Bypass -File \"%~dp0eth1-Switch-NetworkWithProxy.ps1\"' -Verb RunAs"
    exit /b
)

powershell -ExecutionPolicy Bypass -File "%~dp0eth1-Switch-NetworkWithProxy.ps1"

① PowerShell で「管理者かどうか」をチェックする

powershell -Command "if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) { exit 1 }"

この1行で、「今のバッチは管理者権限で動いているか?」を PowerShell でチェックします。

  • 管理者 → 正常終了
  • 管理者でない → exit 1 を返す

バッチ側では、この終了コードを %errorlevel% として受け取ります。

② 管理者でなければ、自動で管理者権限で再実行する

Windows11 UAC
if %errorlevel% NEQ 0 (
    echo 管理者権限が必要です。再実行します...
    powershell -Command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Bypass -File \"%~dp0eth1-Switch-NetworkWithProxy.ps1\"' -Verb RunAs"
    exit /b
)

ここでは -Verb RunAs を使って、UACダイアログ付きで管理者 PowerShell を起動しています。

ユーザーが「はい」を押せば、PowerShell が管理者権限で実行され、スクリプトが動きます。

③ 管理者であれば、そのまま PowerShell を実行

powershell -ExecutionPolicy Bypass -File "%~dp0eth1-Switch-NetworkWithProxy.ps1"

再起動ではなく、普通に実行する処理です。

ポイントは「無限ループしない仕組みになっている」ことです。

  • 通常起動 → 権限チェック → NG → 管理者で PowerShell 起動
  • 管理者 PowerShell 内のスクリプトが実行され、バッチは終了
  • ループせず1回で完了

よくあるトラブルと対処法

「このスクリプトは実行できません」と表示される

→ 実行ポリシーが制限されている可能性があるため、-ExecutionPolicy Bypass を付けて実行しましょう。

パスにスペースがあると動かない

" " で囲みます。
→ 特に %~dp0 と組み合わせるときは必須です。

管理者として再起動されない

.bat をネットワークドライブから実行していないかを確認します。
→ UNC パスでは UAC による制限で昇格できない場合あります。

まとめ

  • バッチから PowerShell を起動するには powershell -File を使う
  • 実行ポリシー対策には -ExecutionPolicy Bypass が便利
  • 管理者権限チェックを組み合わせれば、ユーザー操作なしで安全に実行できる
  • %~dp0 を使えば、同じフォルダの PowerShell を確実に呼び出せる

バッチで PowerShell を起動できるようにしておくと、ユーザーに配布するスクリプトや、社内運用スクリプトの管理がとても楽になります。

Windows PowerShell実践システム管理ガイド 第3版 商品画像

Windows PowerShell実践システム管理ガイド 第3版

Windows 管理者向けに、PowerShell を実務レベルで使いこなすための決定版です。
ユーザー管理・ログ取得・運用自動化など、現場で役立つスクリプトが満載です。
本格的な管理業務に踏み込む人に最適な1冊です。

おすすめポイント:

  • Active Directory・運用管理などリアルな業務内容に直結
  • スクリプト作例が豊富でそのまま仕事に活かせる
  • 初級〜中級を抜け、実務エンジニアとして成長できる内容

Rakuten

Amazon

Yahoo!ショッピング

  • この記事を書いた人
  • 最新記事
プロフィール用アイコン

かじ

社内SEとして15年以上、IT企画とシステム開発を担当してきました。
ガジェット好きで、実務で得たITノウハウをわかりやすく発信しています。

★…社内SE歴 15年以上
★…IT企画・開発・業務改善を経験
★…PowerShellやサーバ運用など技術記事を更新中

現場で役立つITノウハウ×ガジェットレビューを中心に更新しています。

-PowerShell・自動化
-,