スキルゼロの非IT会社員の業務自動化のための覚書。
タイトルの通りPowerShellに直接コマンドを書き込むと実行できるのにスクリプトファイルにすると実行できない場合の対処方法です。
わからないなりにテキストにスクリプトを書いて、PowerShellで一行ずつ実行し何とか動作するようにできた後、拡張子をps1に書き換えいざ実行したところ一瞬PowerShellのウィンドウが開き何も起こらない現象が発生。
色々調べてみると文字コードがUTF-8だと文字化けするのでダメだとか、改行コードがcrlfになっていないとダメだとかがあり試してみたが状況改善せず、困っていたところそもそもスクリプトファイルを実行するには実行ポリシーなるものが正しく設定されていないと実行できないらしい!
まずは現行の実行ポリシーを確認
Get-ExecutionPolicy -list
上記コマンドをPowerShellで実行すると現状の実行ポリシーが確認できる。
画像では既にポリシーが変更されているが、今回はCurrentUserに対する実行ポリシーをUndefinedからRemoteSignedに変更した。
Undefinedは実行ポリシーが設定されていない状態らしく、RemoteSignedはローカルに保存されたスクリプトと署名済みのインターネットからダウンロードされたスクリプトが実行可能らしい。
実行ポリシーの変更
CurrentUserに対する実行ポリシーをRemoteSignedに設定するためには以下のコマンドを実行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
結果無事スクリプトファイル(.ps1)を実行することができるようになりました。
おまけ
テキストの文字コードや改行コードを確認するにはwindowsのテキストドキュメントの場合、ウィンドウの枠右下に書いてあります。
文字コードは名前を付けて保存する際の保存ボタンの横にエンコードの項目があるのでそちらで変更可能です。UTF-8だと文字化けするのでANSIにするといいみたいだったので私はASNIに変更しました。