本日は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ファイルを実行すると管理者権限がある旨のメッセージが表示されました。
