PowerShellスクリプト(.ps1ファイル)は、デフォルトでは起動できません。
ダブルクリックをした場合でも、メモ帳が開くだけで、バッチファイルのように実行されません。
これはセキュリティが強化され、ウィルスなどが知らない間にPowerShellスクリプトを実行することを防ぐためです。ここではPowerShellスクリプトを実行する方法を紹介します。
PowerShellスクリプトの実行ポリシー
PowerShellスクリプトは実行ポリシーで制御されており、全部で5種類存在します。
実行ポリシー | 説明 | 署名あり | 署名なし ローカル |
署名なし リモート |
---|---|---|---|---|
Restricted | すべてのスクリプトの実行を禁止(デフォルト設定) | ☓ | ☓ | ☓ |
AllSigned | 署名されているスクリプトのみ実行可能 | ○ | ☓ | ☓ |
RemoteSigned | ローカル上のスクリプトとリモート(非ローカル)上の署名のあるスクリプトのみ実行可能 | ○ | ○ | ☓ |
Unrestricted | すべてのスクリプトが実行可能、リモート(非ローカル)上のスクリプトは実行時に許可が必要 | ○ | ○ | ○ 許可要 |
Bypass | すべてのスクリプトが実行可能 | ○ | ○ | ○ |
デフォルトでは「Restricted」となっているため、PowerShellスクリプトは実行できません。
署名ありスクリプト/署名なしスクリプト
スクリプトには認証局から発行してもらった証明書や、自己証明書を使用して電子署名をつけることができます。署名されたスクリプトのみを実行できるように制限しておくことで、悪意のあるスクリプトが実行される可能性を低くすることができます。
悪意のあるスクリプトを防ぐと言い切れないのは、署名がついているからといって安全なスクリプトとは限らないためです。
ローカルスクリプト/リモートスクリプト
スクリプトが保存されている場所によってローカルかリモートに分けることができます。
「ローカルスクリプト」は物理ディスク上に保存されているだけでなく、そのPCからディスクとして見れる領域はすべてローカルとみなされます。
たとえば、ファイルサーバをネットワークドライブとしてマッピングしている場合や、UNCパス(「\\」で始まるパス)で接続できる領域に保存しているスクリプトもローカルスクリプトとなります。
「リモートスクリプト」はインターネット(URL)から取得したファイルを指します。ダウンロードして保存したものでも「リモートスクリプト」とみなされます。
PowerShellスクリプトを実行するには
PowerShellスクリプトを実行するには実行ポリシーを適切なものに変更する必要があります。
変更する実行ポリシーは、PowerShellスクリプトに署名することができるのであれば「AllSigned」、難しいのであれば「RemoteSigned」で問題ないのではないかと思います。
PowerShellスクリプトの署名方法がわからない場合は、以下の記事をご覧ください。
実行ポリシーを変更する
実行ポリシーを変更する場合は、PowerShellを管理者権限で開いておく必要があります。
- 「スタートボタン」右クリックするか、ショートカットキーの[Windows]キー + [X]キーを押下してアドバンストメニューを開きます。
- [Windows PowerShell (管理者)]をクリックします。
実行ポリシーは以下のコマンドで変更できます。
Set-ExecutionPolicy [実行ポリシー]
コマンドを実行すると、確認メッセージが表示されるため「Y」を入力します。
実行ポリシーを変更するとスクリプトが実行できるようになります。
実行ポリシーの確認方法
現在の実行ポリシーがわからない場合は以下のコマンドで確認できます。
Get-ExecutionPolicy
実行ポリシーを指定してPowerShellを起動する
PowerShellはオプションで実行ポリシーを指定して起動することができます。セキュリティが心配で、PowerShellスクリプトを実行する時だけ実行ポリシーを変更したい場合は、毎回設定変更するのは面倒なため、この方法で起動することをおすすめします。
powershell -ExecutionPolicy [実行ポリシー]
実行方法は色々な方法があります。
など
PowerShellやコマンドプロンプト上でコマンドを実行した場合は、新しい画面で開くのではなく、その画面の中で指定した実行ポリシーのPowerShellが開く形になります。
右クリックから実行する
PowerShellスクリプトを実行するには実行ポリシーの変更が必要と記載しましたが、実行ポリシーを変更しなくても実行する方法があります。
方法は簡単でPowerShellスクリプトファイルを右クリックし、表示されたメニューから[PowerShellで実行]を選択します。
実行ポリシーの変更が必要ない理由としては、レジストリで実行ポリシーが「AllSigned」ではない場合は「Bypass」で起動するように設定されているためです。
※ Windowsのバージョンによって異なる可能性があります。
コメント