このエントリーをはてなブックマークに追加


PowerShellスクリプトを起動できるようにする・実行ポリシーの変更

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

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


関連記事

get-help about_signing

メッセージ内にある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実行ポリシーの種類

以下のPowerShellの実行ポリシーの種類を記します。

実行ポリシーの種類

使用すると思われる実行ポリシーについて記述します。

  • Restricted
    デフォルト値。すべてのスクリプトを実行することができません。
  • AllSigned
    署名されているスクリプトのみ実行可能。
  • RemoteSigned
    ローカルのスクリプトは実行可能。ダウンロードしたスクリプトは署名が必要。
  • Unrestricted
    すべて実行可能。ただし、ダウンロードしたスクリプトに関しての実行はユーザーの許可が必要。

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

about_Execution_Policiesの抜粋

実行ポリシーのヘルプは以下のコマンドで表示することができます。

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実行ポリシーの変更

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に変更(失敗例)
    下記の実行ポリシー変更失敗は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を実行する方法は下図のスクリーンショットを参考にしてください。
    ps-01.gif
     
    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


添付ファイル: fileps-01.gif 2822件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:50:52