【2023年】これからブログを始める人へおすすめの書籍

Kissy

Powershellスクリプトを管理者権限で再実行する方法

作成: 更新:

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