Powershellスクリプトを管理者権限で再実行する方法
こんにちは、きっしーです。
今日はPowershellスクリプトを管理者権限で再実行する方法を紹介します。
便利なPowershellスクリプトを作って周りの人に公開したとき、「管理者権限で実行するってどうやるの?」って聞かれるときがあります。
実行方法はとっても簡単なのですが、Windowsのbatファイルを想像していると、戸惑う方が多いように感じます。
そこで、今回紹介する方法を組み込んでおけば、わざわざPowershellを管理者権限で起動したりする必要がなく、簡単に実行できます。
スクリプト
#
# 管理者権限で実行されているかを確認する
#
function Is-RunAsAdmin
{
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
#
# スクリプトを管理者権限で実行する
#
function Start-ScriptAsAdmin
{
param(
[string] $ScriptPath,
[object[]] $ArgumentList
)
# 管理者権限でない場合
if(!(Is-RunAsAdmin)) {
# スクリプトのパスと引数リストからコマンドを生成する
$list = @($ScriptPath)
if($null -ne $ArgumentList) {
$list += @($ArgumentList)
}
# スクリプトを再実行する
if ($list) {
Start-Process powershell -ArgumentList $list -Verb RunAs -Wait
} else {
Start-Process powershell -Verb RunAs -Wait
}
}
}
# 管理者権限でスクリプトを再実行する
Start-ScriptAsAdmin $PSCommandPath
# 管理者権限であれば処理を実行する
if (Is-RunAsAdmin) {
# [TODO]管理者権限で実行する処理をここに記述する
}
スクリプトの解説
現在のユーザーが管理者かどうかチェックする
現在のユーザーが管理者かどうかをチェックする関数Is-RunAsAdmin
を作ります。
処理は、GetCurrent()
を使用して現在のユーザー情報を取得して、管理者(Administrator)かどうかをチェックしています。
スクリプトを管理者権限で再実行する
Start-ScriptAsAdmin
という関数で管理者権限でない場合には、スクリプトを再実行します。
まず、管理者かどうかをチェックし、管理者でない場合には、スクリプトを実行するためのコマンドラインを作ります。
コマンドラインは
- スクリプトのフルパス
- コマンドライン引数
を結合して作成します。
最後に、Start-Process
に作成したコマンドライン引数を渡して、Powershellを実行します。
まとめ
このように、スクリプト側で実行しやすいようにしておいてあげると、結果としてよく使われるスクリプトになります。
使う人のことを考えたやさしいスクリプトを心がけたいですね。
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。
関連記事
SPONSORED LINK
SPONSORED LINK