PowerShellのスクリプトはデフォルトでは実行できないようになっています。
スクリプトを実行するためにはGet-ExecutionPolicyコマンドレットで実行ポリシーをRestricted以外に変更する必要があります。
Set-ExecutionPolicy RemoteSigned
ところが、上のようにコマンドを実行するとエラーとなり、PowerShellを管理者として実行するように指示が表示されます。
でも大丈夫。管理者権限がなくてもスクリプトを実行できる方法があります。
実行ポリシーについては下の記事に詳しく説明されています。
Tech TIPS:WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する - @IT
方法1: スコープを指定してExecutionPolicyを変更する
スコープを実行中のプロセスに絞れば実行ポリシーを変更できます。
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で実行します。
(Get-Content [ファイル名]) -join "`n" | Invoke-Expression
PowerShell 3.0にはファイルの内容をまるごと1つの文字列として読み込む-Rawパラメータがあります。
Get-Content [ファイル名] -Raw | Invoke-Expression
こうしてみると、案外抜け穴がいろいろありますね。
PowerShellの実行ポリシーというのはスクリプトを実行できなくするためのものではなくて、不用意にスクリプトを実行してしまわないようにしている程度のものだということがわかります。