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

  • 83
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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