PowerShell スクリプトの実行について

今さらながらPowerShellを使ってスクリプトを作成に取込み始めました。しかし、スクリプトを動作させるためにはいくつかの条件を満たさないといけないようです。

注意:スクリプトファイルをダブルクリックしても実行できません。メモ帳が開いてしまいます!

PowerShell スクリプトの実行条件

  • 条件1 拡張子:「.ps1」
  • 条件2 実行には相対パスまたは絶対パスを指定
  • 条件3 実行ポリシーの変更

条件1 拡張子:「.ps1」

これは拡張子を、.ps1に設定すればOKです。

条件2 実行には相対パスまたは絶対パスを指定

コマンドプロンプトの様にスクリプトファイルを指定しても、コマンドとして認識できませんと返ってきますので、必ず、絶対パスか現在のパスからの相対パスを指定します。

PS C:\> test.ps1
The term ‘test.ps1’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the sp
elling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:9
+ test.ps1 <<<<
+ CategoryInfo : ObjectNotFound: (test.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

スクリプトファイルがCドライブ直下にある場合

相対パスの場合 .\test.ps1

絶対パスの場合 c:\test.ps1

スクリプトファイルがマイドキュメントにある場合

 

条件3 実行ポリシーの変更

初期設定ではセキュリティ上、実行できないようになっているため、下記のようなアラートが表示され実行できません。そのため、実行ポリシーの変更には「Set-ExecutionPolicy」を使用します。

PS C:\> .\test.ps1
File C:\test.ps1 cannot be loaded because the execution of scripts is disabled on this system.
Please see “get-help about_signing” for more details.
At line:1 char:11
+ .\test.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException

 

PowerShellを「管理者として実行」で開いてコマンド「Set-ExecutionPolicy RemoteSigned」を実行します。これでPowerShell上からスクリプトを実行できるようになります。

通常通りPowerShellを開いてコマンドを実行すると、下記のように跳ね返されてしまいますのでご注意ください。

PS C:\Users\Tomoaki> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は “N”): y
Set-ExecutionPolicy : レジストリ キー ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
‘ へのアクセスが拒否されました。 既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプシ
ョンを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを変更するには、”Set-ExecutionPolicy
-Scope CurrentUser” を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

スクリプトファイルをダブルクリックで実行

ここまで来たらようやくスクリプトファイルをダブルクリックで実行することができるようですが、単純には実行できないようです。なぜなら、セキュリティ上の理由でスクリプトファイルはそのままでは実行できない仕様になっているからです。

そこで、一工夫が必要で、PowerShellを起動して、スクリプトを実行するショートカットを作成します。実行には2段階必要になります。

新規ショートカットを作成」を選択します。「項目の場所を入力してください」に次の様にPowerShellを指定し、起動時のオプションとしてスクリプトを指定します。

powershell.exe -noexit &’C:\Users\user\Documents\test.ps1′

ここで、「&’パス’」で囲んでいるのは、スペースを含むパス用です。

これで作成したショートカットを実行すれば、スクリプトが実行されます。

少々面倒ですが、セキュリティ上しょうがないですね。