Microsoft謹製のシェルであるPowerShellですが、Windows版ではデフォルトでシェルスクリプトからのコマンド実行に制限がかけられており、そのままの状態でPowerShellシェルスクリプト(.ps1ファイル)を実行しようとすると、下記のようなエラーが出て拒否されてしまいます。
> nodist list
nodist : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files (x86)\Nodist\bin\nodist.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.micros
oft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ nodist list
+ ~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
自作スクリプトやインターネットからダウンロードしたシェルスクリプトすべてダメなので、インストールしたコマンドラインツールも、ps1ファイル経由で起動するものに関してはすべて拒否されてしまいます。
PowerShellがWindowsのデフォルトシェルとなっているくせに、nodistなどをPowerShellで実行しようと毎回この制限にかかってしまい使いづらいので、セキュリティ設定を変更して使えるようにします。
PowerShell上で次のコマンドを実行します。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
このコマンドを実行すると、実行したユーザーのPowerShell上においては、署名が行われたシェルスクリプトは制限なく実行できるようになります。(自作スクリプトも制限の対象外になります。)
現在のユーザーに許可する以外にも
“現在のPowerShellセッションのみ許可する”
“すべてのユーザーに許可する”
といった指定や、シェルスクリプトをどのレベルまで許可するか、などの設定を選択することも可能です。
詳細は今回参考にさせていただいたQiitaの記事を参照して下さい。
PowerShellでこのシステムではスクリプトの実行が無効になっているため、ファイル hoge.ps1 を読み込むことができません。となったときの対応方法 – Qiita
因みに、このデフォルト値は不用意に不正なシェルスクリプトを実行されないように指定されているものなので、シェルスクリプトの実行制限を解除している間は不正なシェルスクリプトが実行されないように注意する必要があります。
このあたりはユーザーの自己責任で管理を行う必要があります。
また、PowerShell上でシェルスクリプトを使用する予定がない方は、設定を変更しない方が安全です。
お困りの方は参考にしてみてください。