MRが楽しい

MRやVRについて学習したことを書き残す

ps1ファイルで実行時に管理者権限をチェックする

本日はWindowsの小ネタ枠です。
ps1ファイルで実行時に管理者権限をチェックする方法です。

管理者権限をチェックする

以下のチェック関数を作成することでps1ファイルの実行を管理者権限で行っているか否かを判定できます。

function Test-IsAdministrator {
    $currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal($currentIdentity)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

if (-not (Test-IsAdministrator)) {
    Write-Host "Please run with administrator privileges."
    Read-Host "Please press the Enter key"
    exit 1
}

GetCurrent()で現在の実行ユーザのIDを取得してWindowsPrincipalを参照します。
IsInRoleで対象のユーザが管理者([Security.Principal.WindowsBuiltInRole]::Administrator)に所属しているかをチェックしています。
learn.microsoft.com

サンプルバッチファイル

以下のサンプルを作成しました。
・test.ps1

function Test-IsAdministrator {
    $currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal($currentIdentity)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

if (-not (Test-IsAdministrator)) {
    Write-Host "Please run with administrator privileges."
    Read-Host "Please press the Enter key"
    exit 1
}

Write-Host "I am running with administrator privileges."
Read-Host "Please press the Enter key"

exit 0

ps1ファイルをそのまま実行すると管理者権限がない旨のメッセージが表示されます。

次にWindowsメニューから[管理者として実行する]を選択してPowerShellを起動します。

このコマンドラインでps1ファイルを実行すると管理者権限がある旨のメッセージが表示されました。