#author("2018-06-27T20:45:05+09:00","","")
#navi(../)
* PowerShellスクリプトを起動できるようにする・実行ポリシーの変更 [#waea5bac]
PowerShellスクリプト(拡張子.ps1)はデフォルトでは実行禁止となっています。~
せっかくPowerShellスクリプトを勉強しようと思ってスクリプトを書きファイルに保存し実行しようとしても以下のようなメッセージが表示されてしまいます。

 PS C:\PowerShell> .\hello.ps1
 スクリプトの実行がシステムで無効になっているため、ファイル C:\PowerShell\hello.ps1 を読み込めません。詳細については、「
 get-help about_signing」と入力してヘルプを参照してください。
 発生場所 行:1 文字:12
 + .\hello.ps1 <<<<
     + CategoryInfo          : NotSpecified: (:) []、PSSecurityException
     + FullyQualifiedErrorId : RuntimeException

メッセージ出力の通り、''スクリプトの実行がシステムで無効になっている''ためです。~
本資料では、スクリプトの実行を有効にする方法を記します。

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連記事 [#a0b947c7]
-[[PowerShell実行ポリシーを変更しPowerShellスクリプトを起動できるようにする>PowerShell/PowerShellスクリプトを起動できるようにする]]
-[[PowerShellの実行ポリシーを変更せずにスクリプトを実行する方法>PowerShell/実行ポリシーを変更せずにスクリプトを実行する方法]]
-[[PowerShellスクリプトが起動できない環境でスクリプトを起動する方法・Invoke-Expression>PowerShell/PowerShellスクリプトが起動できない環境でスクリプトを起動する方法]]

* get-help about_signing [#q952d8c1]
メッセージ内にある''get-help about_signing''を確認すると以下のような記述があります。

 PS C:\PowerShell> Get-Help about_signing | more
 
 <snip>
 詳細説明
    Restricted 実行ポリシーでは、すべてのスクリプトの実行が禁止されます。
    AllSigned 実行ポリシーおよび RemoteSigned 実行ポリシーでは、デジタル署名がないスクリプ
    トの実行が禁止されます。
 
    このトピックでは、実行ポリシーが RemoteSigned の場合であっても選択した署名されていないス
    クリプトを実行する方法について説明します。加えて、自分専用にスクリプトに署名する方法について
    説明します。
 
    Windows PowerShell の実行ポリシーの詳細については、「about_Execution_Policy」を参照
    してください。

現在のポリシーを確認するコマンドGet-ExecutionPolicyを実行すると''Restricted''が返却されました。
 PS C:\PowerShell> Get-ExecutionPolicy
 Restricted
これでは、スクリプトすべてが実行できません。

* PowerShell実行ポリシーの種類 [#u4e3435e]
以下のPowerShellの実行ポリシーの種類を記します。

** 実行ポリシーの種類 [#b1d3f16f]
使用すると思われる実行ポリシーについて記述します。
- Restricted~
デフォルト値。すべてのスクリプトを実行することができません。
-AllSigned~
署名されているスクリプトのみ実行可能。
-RemoteSigned~
ローカルのスクリプトは実行可能。ダウンロードしたスクリプトは署名が必要。
-Unrestricted~
すべて実行可能。ただし、ダウンロードしたスクリプトに関しての実行はユーザーの許可が必要。

したがって、PowerShellの勉強や開発であれば、''RemoteSigned''がおすすめです。

** about_Execution_Policiesの抜粋 [#ybb29527]
実行ポリシーのヘルプは以下のコマンドで表示することができます。
 Get-Help about_Execution_Policies
以下、about_Execution_Policiesに記載されていた内容の抜粋です。

 PS C:\PowerShell> Get-Help about_Execution_Policies | more
 トピック
     about_Execution_Policies
 
 簡易説明
     Windows PowerShell の実行ポリシーとその管理方法について説明します。
 <snip>

- Restricted

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

- AllSigned

        AllSigned
            - スクリプトを実行できます。
 
            - すべてのスクリプトと構成ファイルが信頼された発行元によって署名されていることが
              要求されます (ユーザーがローカル コンピューターで作成するスクリプトを含む)。
 
            - 信頼されているかどうかが分類されていない発行元からのスクリプトを実行する前に、プ
              ロンプトが表示されます。
 
            - インターネット以外のソースによる署名なしスクリプトや署名済みの悪意のあるスクリ
              プトを実行する危険性があります。

- RemoteSigned

        RemoteSigned
            - スクリプトを実行できます。
 
            - インターネットからダウンロードされたスクリプトおよび構成ファイル (電子メール プ
              ログラムとインスタント メッセージング プログラムを含む) に対して、信頼された発行元
              によるデジタル署名が必要です。
 
            - (インターネットからダウンロードしたのではなく) ローカル コンピューターで実行され
              たスクリプトおよび作成されたスクリプトにはデジタル署名は不要です。
 
            - 署名済みの悪意のあるスクリプトを実行する危険性があります。

- Unrestricted

        Unrestricted
            - 署名なしスクリプトを実行できます (悪意のあるスクリプトを実行する危険性があります)。
 
            - インターネットからダウンロードしたスクリプトおよび構成ファイルを実行する前にユ
              ーザーに警告します。

- Bypass

        Bypass
            - 何もブロックされず、警告またはプロンプトも表示されません。
 
            - この実行ポリシーは、Windows PowerShell スクリプトが大きいアプリケーションに組み
              込まれる構成や、独自のセキュリティ モデルを備えたプログラムの基礎として Windows
              PowerShell が使用される構成を対象に設計されています。

- Undefined

        Undefined
            - 現在のスコープで設定されている実行ポリシーはありません。
 
            - すべてのスコープの実行ポリシーが Undefined である場合、効力を持つ実行ポリシーは
              既定の実行ポリシーである Restricted となります。
 
 
    注: 汎用名前付け規則 (UNC) パスとインターネット パスとが区別されないシステムでは、
        RemoteSigned 実行ポリシーで UNC パスによって識別されるスクリプトの実行が許可されない可能性
        があります。

* PowerShell実行ポリシーの変更 [#l9468f21]
PowerShell実行ポリシーを変更するには、以下のコマンドを実行します。

 Set-ExecutionPolicy ポリシー

以下にRemoteSignedポリシーに変更した場合の操作を記します。~
- 実行ポリシー変更前
 PS C:\PowerShell> Get-Content hello.ps1
 Write-Host Hello
 PS C:\PowerShell> .\hello.ps1
 スクリプトの実行がシステムで無効になっているため、ファイル C:\PowerShell\hello.ps1 を読み込めません。詳細については、「 
 get-help about_signing」と入力してヘルプを参照してください。
 発生場所 行:1 文字:12
 + .\hello.ps1 <<<<
     + CategoryInfo          : NotSpecified: (:) []、PSSecurityException
     + FullyQualifiedErrorId : RuntimeException
 
 PS C:\PowerShell> Get-ExecutionPolicy
 Restricted

- 実行ポリシーをRemoteSignedに変更(&color(red){失敗例};)~
下記の実行ポリシー変更失敗はPwerShellを管理者権限で起動していないためでした。
 PS C:\PowerShell> Set-ExecutionPolicy RemoteSigned
 
 実行ポリシーの変更
 PS C:\PowerShell> Get-ExecutionPolicy
 Restricted
 PS C:\PowerShell> Set-ExecutionPolicy RemoteSigned
 
 実行ポリシーの変更
 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
 のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
 [Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):
 Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 
 ' へのアクセスが拒否されました。
 発生場所 行:1 文字:20
 + Set-ExecutionPolicy <<<<  RemoteSigned
     + CategoryInfo          : NotSpecified: (:) [Set-ExecutionPolicy]、UnauthorizedAccessException
     + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
- PowerShellを管理者権限で起動し実行ポリシーを変更する(成功例)~
管理者権限でPowerShellを実行する方法は下図のスクリーンショットを参考にしてください。
#ref(ps-01.gif)
#br
RemoteSignedに変更しhello.ps1スクリプトを実行した操作例になります。

 PS C:\PowerShell> Get-ExecutionPolicy
 Restricted
 PS C:\PowerShell> Set-ExecutionPolicy RemoteSigned
 
 実行ポリシーの変更
 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
 のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
 [Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y
 PS C:\PowerShell> Get-ExecutionPolicy
 RemoteSigned
 PS C:\PowerShell> .\hello.ps1
 Hello

#htmlinsertpcsp(win-btm.html,win-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS