【tech】Powershell scriptが使えなかった時のメモ

最近Powershellを使い始めてみたのですがおもしろいですね!!

ですがいざスクリプトを組んで実行しようとするとうまく動かず・・・
調べてみるとpowershellによってスクリプトが許可されていないようでした。

環境


スクリプト配置ディレクトリ:C:\Users\Desktop\workspace>
スクリプトファイル:powershell2.ps1
実行コマンド:powershell .\powershell2.ps1

エラーログ


PS C:\Users\Desktop\workspace> powershell .\powershell2.ps1
.\powershell2.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\Desktop\workspace\powershell2.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.m
icrosoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\powershell2.ps1
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess


1.実行ポリシーの確認
Get-ExecutionPolicy
→>>
 Restricted


・Restricted
- 個別のコマンドは許可されますが、スクリプトは実行されません。
- 書式設定と構成のファイル (.ps1xml)、モジュール スクリプト ファイル (.psm1)、Windows PowerShell プロファイル (.ps1) を含むすべてのスクリプト ファイルの実行を防止します。


2.実行ポリシーの変更 ※ポリシーはご自身で判断の上設定してください。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
※実行には管理者権限が必要です。
 管理者権限のない人は一度powershellを閉じて、powershellを右クリックで開いてから、管理者として実行してください。

以上の2つのコマンドでpowershellスクリプトのps1ファイルが実行できるようになります。

powershellは実行権限の整備がかなり詳細に設定されていますので、スクリプトの実行についてはオフィシャルドキュメントをご確認ください!

https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847748(v=wps.640)

ドキュメントの引用です


Windows PowerShell の実行ポリシー
Windows PowerShell の実行ポリシーは次のとおりです。

"Restricted" が既定のポリシーです。

Restricted
- Windows 8、Windows Server 2012、Windows 8.1 の既定の実行ポリシーです。

  • 個別のコマンドは許可されますが、スクリプトは実行されません。

  • 書式設定と構成のファイル (.ps1xml)、モジュール スクリプト ファイル (.psm1)、Windows PowerShell プロファイル (.ps1) を含むすべてのスクリプト ファイルの実行を防止します。

AllSigned
- スクリプトを実行できます。

  • ローカル コンピューター上で記述されたスクリプトを含むすべてのスクリプトと構成ファイルが、信頼された発行元によって署名されている必要があります。

  • 信頼されているかどうかがまだ分類されていない発行元のスクリプトを実行する前に、確認メッセージが表示されます。

  • 署名されているが悪意のあるスクリプトが実行される危険性があります。

RemoteSigned
- スクリプトを実行できます。Windows Server 2012 R2 の既定の実行ポリシーです。

  • インターネット (電子メールとインスタント メッセージング プログラムを含む) からダウンロードされたスクリプトと構成ファイルが、信頼された発行元によってデジタル署名されている必要があります。

  • ローカル コンピューター上で記述された (インターネットからダウンロードされていない) スクリプトには、デジタル署名は必要ありません。

  • Unblock-File コマンドレットの使用などによってスクリプトのブロックが解除されている場合は、インターネットからダウンロードされた、署名されていないスクリプトが実行されます。

  • インターネット以外をソースとする署名されていないスクリプトや、署名されているが悪意のあるスクリプトが実行される危険性があります。

Unrestricted
- 署名されていないスクリプトを実行できます (悪意のあるスクリプトが実行される危険性があります)。

  • インターネットからダウンロードされたスクリプトや構成ファイルを実行する前に、ユーザーに警告します。

Bypass
- 何もブロックされません。警告やプロンプトは表示されません。

  • この実行ポリシーは、Windows PowerShell のスクリプトが大きいアプリケーションに組み込まれている構成や、Windows PowerShell が独自のセキュリティ モデルを持つプログラムの基盤になっている構成を対象としています。

Undefined
- 現在のスコープに実行ポリシーが設定されていません。

  • すべてのスコープの実行ポリシーが Undefined の場合、有効な実行ポリシーは、既定の実行ポリシーである Restricted になります。

注記:インターネット パスと汎用名前付け規則 (UNC) パスを区別しないシステムの場合、RemoteSigned 実行ポリシーを使用すると、UNC パスで識別されているスクリプトが実行を許可されない可能性があります。