155
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-01

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

155
177
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
155
177

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?