「このコマンドは管理者権限で実行してください」
——PowerShellを使っていて、こんなエラーメッセージに出会ったことはありませんか?
特にシステム設定やアプリの制御を行う際には、管理者権限(Administrator)での実行が必須になります。
本記事では、PowerShellを管理者権限で実行する方法を初心者でもわかりやすく、丁寧に解説します。
さらに、「管理者権限で実行されているかの確認方法」や「スクリプトを常に管理者で実行する方法」など、意外と知られていないテクニックもご紹介します。
なぜPowerShellを管理者で実行する必要があるのか
PowerShellは強力なツールですが、一部のコマンドは管理者権限がないとエラーになります。
たとえば、以下のような操作は管理者でないと実行できません:
- システム設定の変更(例:サービスの停止/開始)
- ユーザーアカウントの管理
- Windows Updateの制御
- 特定フォルダ(C:\Windowsなど)へのアクセスや書き込み
- ファイアウォール設定の変更
- レジストリの変更
- ドライバーのインストール
管理者権限なしでこれらの操作を実行すると、以下のようなエラーが表示されます:
Access is denied.
アクセスが拒否されました。
そのため、権限が必要な作業のときは、最初から「管理者で実行」するのが基本です。
Windowsでの実行方法(GUI編)
手順1:スタートメニューから起動
- Windowsキーを押す
- 「PowerShell」と入力
- 「Windows PowerShell」が表示されたら、右クリック →「管理者として実行」を選択
- UAC(ユーザーアカウント制御)の確認ダイアログで「はい」をクリック
管理者権限で起動すると、タイトルバーに「管理者」と表示されます。
手順2:ショートカットで起動
- デスクトップやタスクバーのPowerShellアイコンを右クリック
- 「管理者として実行」をクリック
- UAC確認ダイアログで「はい」をクリック
手順3:ファイルエクスプローラーから起動
- Windowsキー + Eを押してファイルエクスプローラーを開く
- アドレスバーに「powershell」と入力してEnterを押す
- PowerShellが起動したら、いったん閉じる
- 再度アドレスバーを見ると「PowerShell」という項目が表示されているので、それを右クリック
- 「管理者として実行」を選択
コマンドから管理者権限で起動する方法
方法1:Start-Processコマンドレットを使う
既存のPowerShellから管理者権限の新しいPowerShellを起動する場合:
Start-Process PowerShell -Verb RunAs
特定のスクリプトを管理者権限で実行する場合:
Start-Process PowerShell -Verb RunAs -ArgumentList "-File C:\Scripts\myscript.ps1"
方法2:runasコマンドを使う
runas /user:Administrator "powershell"
※実行時にパスワード入力が求められます。
方法3:タスクスケジューラ経由(自動実行向け)
スクリプトを定期実行する場合、タスクスケジューラに「最上位の特権で実行」にチェックを入れて登録することで、管理者権限で実行可能です。
- タスクスケジューラを開く
- 「基本タスクの作成」をクリック
- タスク名と説明を入力して「次へ」
- トリガー(実行タイミング)を設定して「次へ」
- アクション:「プログラムの開始」を選択して「次へ」
- プログラム/スクリプト:「powershell.exe」
- 引数の追加:「-ExecutionPolicy Bypass -File “C:\スクリプトパス\script.ps1″」
- 「次へ」をクリックし、設定を確認して「完了」
- 作成したタスクを右クリックして「プロパティ」
- 「全般」タブで「最上位の特権で実行する」にチェック
- 「OK」をクリック
実行中のPowerShellが管理者か確認する方法
以下のスクリプトを使うと、現在のセッションが管理者かどうかを確認できます。
# 管理者権限かどうかをチェックする関数
function Test-Administrator {
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
$principal = New-Object Security.Principal.WindowsPrincipal $user
$isAdmin = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
return $isAdmin
}
# 関数を呼び出して結果を表示
if (Test-Administrator) {
Write-Host "管理者権限で実行中です" -ForegroundColor Green
} else {
Write-Host "管理者権限ではありません" -ForegroundColor Red
}
より簡潔に一行で確認したい場合は:
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
True
なら管理者、False
なら非管理者です。
スクリプトを常に管理者で実行する設定方法
PowerShellスクリプト(.ps1
)をダブルクリックしたときに、常に管理者として実行したい場合、以下の手法が有効です:
方法1:バッチファイルを経由する
以下のような .bat
ファイルを作成し、PowerShellスクリプトを呼び出します:
@echo off
powershell -Command "Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File \"%~dp0スクリプト名.ps1\"' -Verb RunAs"
%~dp0
はバッチファイルの場所を示す変数なので、バッチファイルと同じフォルダにスクリプトを置くと便利です。
方法2:ショートカットを作成する
- スクリプトファイル(.ps1)を右クリック
- 「ショートカットの作成」を選択
- 作成されたショートカットを右クリック→「プロパティ」
- リンク先を以下のように変更:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:\スクリプトのパス.ps1"
- 「詳細設定」ボタンをクリック
- 「管理者として実行」にチェック
- 「OK」をクリック
これで、そのショートカットをダブルクリックするたびに、スクリプトが管理者権限で実行されます。
方法3:スクリプト内で権限チェックと昇格を行う
スクリプトの最初に以下のコードを入れると、管理者権限がない場合に自動的に昇格します:
# 管理者権限で実行されていない場合は昇格する
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
# スクリプトのパスを取得
$scriptPath = $MyInvocation.MyCommand.Path
# 管理者として同じスクリプトを起動
Start-Process PowerShell.exe -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" -Verb RunAs
# 現在のプロセスを終了
exit
}
# ここから実際のスクリプト処理
Write-Host "管理者権限で実行されています"
# 以下、実際の処理内容
よくあるトラブルと対処法
Q. 管理者で実行しているのにエラーが出る?
→ UAC(ユーザーアカウント制御)が無効になっていないか確認してください。または、
「スタートアップでの自動実行」では非管理者モードになることがあります。
→ また、権限不足ではなく別の原因(パスが正しくない、ファイルがロックされているなど)の可能性もあります。
エラーメッセージを正確に確認しましょう。
Q. スクリプト実行がブロックされる
→ 実行ポリシーの問題です。以下のコマンドで一時的に回避できます:
Set-ExecutionPolicy RemoteSigned -Scope Process
または、スクリプトの実行時に次のように指定:
powershell.exe -ExecutionPolicy Bypass -File "C:\path\to\script.ps1"
Q. 特定のアプリケーションが管理者権限で起動できない
→ アプリケーションのパスやファイル名にスペースが含まれている場合、引用符で囲む必要があります:
Start-Process "C:\Program Files\Some App\app.exe" -Verb RunAs
Q. リモートからの管理者実行ができない
リモートでのPowerShell実行には、追加の設定が必要です:
# リモートでのPowerShell実行を有効にする(管理者権限のPowerShellで実行)
Enable-PSRemoting -Force
まとめ
PowerShellを管理者権限で実行することで、より多くの操作や自動化が可能になります。
とくにシステム管理やスクリプト運用を行う方にとっては必須の知識です。
ポイントおさらい
- スタートメニューや右クリックから管理者実行が基本
Start-Process PowerShell -Verb RunAs
で管理者としての新規セッションを開始- バッチファイルやショートカットで自動化可能
- スクリプトから管理者権限かどうか判定・昇格処理を組み込める
- 実行ポリシーにも注意(
-ExecutionPolicy Bypass
など)
PowerShellを管理者として正しく使いこなすことで、Windows操作の自由度は一気に広がります。
ただし、管理者権限は強力な権限のため、不用意に使うとシステムに影響を与える可能性があることも忘れないでください。
セキュリティを考慮しながら、必要な場面でのみ管理者権限を使用することをおすすめします。
今日からさっそく実践して、PowerShellでのシステム管理を効率化しましょう!
コメント