システムエンジニアXの「プログラミング以外」の話 50代会社員SEのお仕事・副業・システム運用の経験談

PowerShellで管理者権限かどうかを判定する方法【初心者向け完全解説】

公開:

※本記事には広告を含みます。

はじめに:なぜスクリプトが途中で止まるのか

PowerShellでスクリプトを作っていると、こんな経験はありませんか。

「テストでは動いたのに、本番でエラーになる」

その原因の多くは、管理者権限が必要な処理を一般ユーザーで実行していることです。
たとえば、レジストリ変更、サービス操作、C:\Windows配下の書き込みなどは、管理者権限が必要です。

そこで重要なのが、スクリプトの最初で管理者かどうかをチェックすることです。


管理者権限とは何か?

Windowsにはユーザーごとに「できることの範囲」が決まっています。

  • 一般ユーザー:通常の操作のみ可能
  • 管理者ユーザー:システム変更が可能

さらに注意が必要なのは、管理者アカウントでログインしていても、PowerShellを「管理者として実行」していなければ、管理者権限ではありません。

ここが初心者が混乱するポイントです。


管理者権限かどうかを判定する基本コード

まずは一番シンプルな判定方法です。

$isAdmin = ([Security.Principal.WindowsPrincipal] 
    [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

if ($isAdmin) {
    Write-Output "管理者として実行されています。"
} else {
    Write-Output "管理者権限ではありません。"
}

このコードは、現在のユーザーが「Administratorsグループ」に属しているかを確認しています。

ポイントは、.NETのクラスを使っているところです。
PowerShellは内部で.NETを利用しているため、このような判定が可能です。


実務でよく使う書き方(スクリプトを止める)

実務では、管理者でなければ処理を止めるのが安全です。

$isAdmin = ([Security.Principal.WindowsPrincipal] 
    [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

if (-not $isAdmin) {
    Write-Error "このスクリプトは管理者として実行してください。"
    exit 1
}

これをスクリプトの一番上に書いておくと、事故を防げます。


管理者として自動で再起動する方法

少し応用です。

管理者でなければ、自分自身を管理者として再実行する方法があります。

$isAdmin = ([Security.Principal.WindowsPrincipal] 
    [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

if (-not $isAdmin) {
    Start-Process powershell -Verb RunAs -ArgumentList "-File `"$PSCommandPath`""
    exit
}

このコードは、現在のスクリプトを管理者権限で再実行します。

ただし、ユーザー確認(UACダイアログ)が表示されます。


よくあるハマりどころ

1. 管理者アカウントなのにfalseになる

これは「管理者として実行」していない可能性があります。

2. バッチから呼び出すと動かない

呼び出し元が管理者でなければ意味がありません。

3. スケジュールタスクで動かない

「最上位の特権で実行する」にチェックが必要です。


まとめ

PowerShellで管理者権限を扱うときは、最初に判定する習慣をつけることが重要です。
管理者かどうかを確認してから処理を始めるだけで、トラブルを大きく減らせます。
運用スクリプトでは、必須のテクニックです。

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。

OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。 また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。

この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。 すべての操作は自己責任で行ってください。

最後までお読みいただきありがとうございました。
またお会いしましょう!

著者のおすすめ教材 & note実践記事

公式教材 豪華4大特典付き

PowerShell実務スクリプト50選

AD・Windows運用・障害対応をコマンド一発で自動化する現役SEの実務スクリプト集。

最新note 毎日定時で帰る現場ハック

ググっても出ない実務テク20選

社内SE現場の地味で細かすぎる面倒作業を一撃で解消する実践テクニック集。