Edited at

管理者権限なしでPowerShellスクリプトを実行する方法

More than 3 years have passed since last update.

PowerShellのスクリプトはデフォルトでは実行できないようになっています。

スクリプトを実行するためにはGet-ExecutionPolicyコマンドレットで実行ポリシーをRestricted以外に変更する必要があります。


PowerShell

Set-ExecutionPolicy RemoteSigned


ところが、上のようにコマンドを実行するとエラーとなり、PowerShellを管理者として実行するように指示が表示されます。

でも大丈夫。管理者権限がなくてもスクリプトを実行できる方法があります。


実行ポリシーについては下の記事に詳しく説明されています。

Tech TIPS:WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する - @IT


方法1: スコープを指定してExecutionPolicyを変更する

スコープを実行中のプロセスに絞れば実行ポリシーを変更できます。


PowerShell

Set-ExecutionPolicy RemoteSigned -Scope Process



方法2: PowerShellの起動オプションとして実行ポリシーを指定する

PowerShellの起動時に起動オプションで実行ポリシーを指定することもできます。


コマンドプロンプト

powershell -ExecutionPolicy RemoteSigned


ファイル名を指定すれば直接スクリプトを実行することもできます。


⚪︎

powershell -ExecutionPolicy RemoteSigned -File script.ps1


もちろん、上のコマンドをバッチファイルに書いておけばバッチファイルをダブルクリックするだけで実行できます。

ただし、順序を入れ替えるとダメみたいです。謎ですね。


×

powershell -File script.ps1 -ExecutionPolicy RemoteSigned



方法3: ファイルの内容を一度文字列として読み込んでから実行する

最後に、スクリプトの内容をまるごと文字列として読み込んで実行する方法もあります。

Get-Contentはファイルの内容を各行を1つの文字列とする配列として読み込むので、改行を入れて結合してからInvoke-Expressionで実行します。


PowerShell_2.0

(Get-Content [ファイル名]) -join "`n" | Invoke-Expression


PowerShell 3.0にはファイルの内容をまるごと1つの文字列として読み込む-Rawパラメータがあります。


PowerShell_3.0

Get-Content [ファイル名] -Raw | Invoke-Expression



こうしてみると、案外抜け穴がいろいろありますね。

PowerShellの実行ポリシーというのはスクリプトを実行できなくするためのものではなくて、不用意にスクリプトを実行してしまわないようにしている程度のものだということがわかります。