PowerShell
でスクリプトを作成する場合、スクリプトの実行時に管理者権限かどうかをチェックしたい場合があるかと思います。
PowerShell
ではRequires
ステートメントが用意されており。
こちらを利用すると、必要な条件を満たしていない場合のスクリプト実行を制限できます。
このRequires
ステートメントの中に管理者で開始する条件があります。
ドキュメント
#Requires RunAsAdministrator
#Requires
のRunAsAdministrator
を利用して、管理者で開始されるよう制限をかけます。
#Requires -RunAsAdministrator
Write-host "HelloWorld"
上記スクリプトファイルRunAsAdministrator.ps1
を用意し、管理者特権ではない状態で実行すると下記の通りエラーとなります。
エラーメッセージにAdministrator
で実行してくださいと出ています。
なおドキュメントに記載ありますが、このRunAsAdministrator
が使えるようになったのはPowerShell 4.0
からとなるようです。
2022年現在、PowerShell 4.0
の環境をさわることは減りましたが、少しだけ気にしておきたいポイントではあります。
余談 WindowsPrincipal.IsInRole メソッド で管理者実行か判定
WindowsPrincipal.IsInRole メソッド
.NET
のWindowsPrincipalクラスのIsInRoleメソッドで管理者実行されているか確認ができます。
PowerShellでは下記を実行し、True
となれば管理者実行と判断できます。
[System.Security.Principal.WindowsPrincipal]::new([System.Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
上記画像では、実行結果がFalse
となっているため、管理者では実行されていないと判断できます。
総評
PowerShell
スクリプトでは簡易に管理者実行に制限でき便利です。