バッチファイルよりもVBScript、VBScriptよりもPowerShellスクリプトの方がいろいろなことができるので便利だとわかっていても、PowerShellスクリプトはデフォルトの設定では、エクスプローラ上で.ps1ファイルをダブルクリックしたところでテキストエディタで開かれるだけで実行できません。
このせいで、今までPowerShellでスクリプトを書くのをためらってきました。
PowerShellを起動させて、Get-ExecutionPolicyを実行すると、初期状態では、Restrictedとなっています。
実行ポリシーには、Restricted、AllSigned、RemoteSigned、Unrestricted、Bypassがありますが、
拡張子ps1のファイルをダブルクリックで実行させるためには、RemoteSigned、Unrestricted、Bypassのどれかに設定する必要があります。
Set-ExecutionPolicyというコマンドで変更できますが、管理者権限が必要です。
実行ポリシーがRestrictedのままで、拡張子ps1のファイルを簡単に実行するにはバッチファイルを使います。
以下の内容で、hello.ps1というファイルを作成します。
[System.Windows.Forms.MessageBox]::Show("Hello World!!")
同じフォルダに以下の内容でhello.batというファイルを作成します。
hello.batをダブルクリックすれば、hello.ps1を動作させることができます。
このように、PowerShellスクリプトを実行するバッチファイルを作るだけで良いので簡単です。
タスクスケジューラから実行する場合は、バッチファイルは不要です。
例えば、このように設定します。
「C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe」
引数に
「-NoProfile -ExecutionPolicy Unrestricted C:\Temp\hello.ps1」
hello.ps1を直接指定した場合は、動作しません。
powershell.exeに引数をつけてタスクを設定する必要があります。