- 追加された行はこの色です。
- 削除された行はこの色です。
#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)