get-help about_signing@PowerShell

PowerShellでスクリプトを実行できるようにするには以下のコマンドを実行しなければなりません。これは既定のPowerShellのセキュリティ設定でスクリプトの実行が許可されていないためです。

Set-ExecutionPolicy RemoteSigned

以下、get-help about_signingの内容です。

トピック
署名と実行ポリシー

簡易説明
Windows PowerShell の実行ポリシーについて説明し、ポリシーを使用する方法
と変更する方法について解説します。

詳細説明

PowerShell 実行ポリシーは、PowerShell が読み込む構成ファイルや
PowerShell が実行するスクリプトに関する条件を決定することによって、
スクリプト環境にセキュリティ機能を提供します。

既定では、最も高いセキュリティで保護されるポリシーである “Restricted”
が使用されます。このポリシーでは、個々のコマンドの実行は許可されますが、
スクリプトの実行は許可されません。

実行ポリシーによって、PowerShell によるファイルの読み込みやスクリプトの
実行が禁止されている場合は、制限に関する次のような警告が表示されます。

“拡張型データ ファイルの読み込み中にエラーが発生しました。”
“書式データ ファイルの読み込み中にエラーが発生しました:”

ファイルを読み込んだり、スクリプトの実行を許可したりするためには、
実行ポリシーを変更する必要があります。

実行ポリシーの変更
——————————
コンピュータ上の PowerShell 実行ポリシーは変更できます。変更はすぐに
反映され、再度変更するまで保持されます。ポリシーの変更が許可されて
いるのは管理者だけです。

実行ポリシーを変更するには、次のように入力します。

Set-ExecutionPolicy ポリシー名>

次に例を示します。

Set-ExecutionPolicy RemoteSigned

このコマンドが成功した場合は、コマンド プロンプトが表示されます。成功を
通知するメッセージは表示されません。このコマンドが失敗した場合は、エラー
メッセージが表示され、以前の実行ポリシーに戻されます。

PowerShell 実行ポリシーを確認するには、次のように入力します。

Get-ExecutionPolicy

このコマンドが失敗した場合は、ポリシー名を正確に入力していない可能性
があります。名前を確認して、再度実行します。このコマンドの実行権限が
ないときは、システム管理者に相談してください。

POWERSHELL 実行ポリシー
——————————

PowerShell 実行ポリシーを次に示します。

Restricted
– 既定の実行ポリシーです。
– 個々のコマンドは許可されますが、スクリプトは実行できません。

AllSigned
– スクリプトを実行できます。
– ローカル コンピュータ上で作成されたスクリプトも含めて、すべての
スクリプトと構成ファイルに対して、信頼された発行元によるデジタル
署名が必要です。
– 信頼された発行元からのスクリプトを実行する前に、プロンプトが表示
されます。
– 署名されてはいても、悪意のあるスクリプトを実行するおそれがあります。

RemoteSigned
– スクリプトを実行できます。
– インターネットからダウンロードされたスクリプトおよび構成ファイル
(電子メール プログラムとインスタント メッセージング プログラムを
含みます) に対して、信頼された発行元によるデジタル署名が必要です。
– ローカル コンピュータから実行されるスクリプトに対してデジタル署名
を要求しません。
– 信頼された発行元からのスクリプトを実行する前に、プロンプトは表示
されません。
– 署名されてはいても、悪意のあるスクリプトを実行するおそれ
があります。

Unrestricted
– 署名なしスクリプトを実行できます。
– インターネットからダウンロードされたスクリプトおよび構成
ファイル (Microsoft Outlook、Outlook Express、および Windows
Messenger を含みます) を、インターネットから入手されたファイル
であることを警告してから実行します。
– 悪意のあるスクリプトを実行するおそれがあります。

署名なしスクリプトの実行 (REMOTESIGNED 実行ポリシー)
——————————————————–

PowerShell 実行ポリシーが RemoteSigned の場合、PowerShell は、
インターネットからダウンロードされた署名なしスクリプト (電子メール
プログラムとインスタント メッセージング プログラムを含みます) を
実行しません。

ダウンロードしたスクリプトを実行しようとすると、次のエラー メッセージ
が表示されます。

ファイル C:\remote.ps1 を読み込めません。ファイル C:\remote.ps1 は
デジタル的に署名されていません。このスクリプトはシステムで実行され
ません。詳細については、「get-help about_signing」と入力してヘルプ
を参照してください。

スクリプトを実行する前に、そのコードが信頼できることを確認してください。
スクリプトは、実行可能プログラムと同じ効果があります。

署名なしスクリプトを実行するには、以下の手順を実行します。

1. スクリプト ファイルをコンピュータに保存します。
2. [スタート] ボタンをクリックし、[マイ コンピュータ] をクリックして、
保存したスクリプト ファイルに移動します。
3. スクリプト ファイルを右クリックし、[プロパティ] をクリックします。
4. [ブロックの解除] をクリックします。

インターネットからダウンロードしたスクリプトがデジタル的に署名されていても、
その発行元を信頼するように選択していない場合は、次のメッセージが表示
されます。

この信頼されていない発行元からのソフトウェアを実行しますか?ファイル
C:\remote_file.ps1 の発行元は CN=発行元名> であり、このシステムで信頼
されていません。信頼された発行元からのスクリプトのみを実行してください。

[V] 常に実行しない [D] 実行しない [R] 一度だけ実行する [A] 常に実行
する [?] ヘルプ (既定値は “D”) :

発行元が信頼できる場合は、[一度だけ実行する] または [常に実行する] を
選択します。発行元が信頼できない場合は、[常に実行しない] または [実行
しない] を選択します。[常に実行しない] または [常に実行する] を選択した
場合は、この発行元に関するプロンプトは二度と表示されません。

スクリプトの署名方法
——————————————

自分で記述したスクリプトおよび他のソースから入手したスクリプトに署名
できます。スクリプトに署名する前に、各コマンドをチェックして、実行
しても安全であることを確認します。

スクリプト ファイルの署名方法の詳細の詳細について参照するには、
PowerShell コマンド ラインで次のように入力します。

Get-Help Set-AuthenticodeSignature

スクリプトにデジタル署名を追加するには、コード署名用の証明書を使用して
スクリプトに署名する必要があります。スクリプト ファイルの署名には、次の
2 種類の証明書が適しています。

— 証明機関によって作成された証明書 :

パブリック証明機関が、料金を徴収するため、身元を確認し、コード署名
用の証明書を発行します。信頼できる証明機関から証明書を購入した
場合は、Windows を実行している他のコンピュータがその証明機関を信頼
しているため、そのコンピュータ上のユーザーとスクリプトを共有できます。

— 独自に作成した証明書 :

使用しているコンピュータが証明書を作成する証明機関である場合は、
“自己署名入りの証明書” を作成できます。この証明書は無料で、
コンピュータ上でスクリプトを作成し、署名して、実行できます。ただし、
他のコンピュータでは、そのコンピュータを信頼せず、スクリプトを
実行しない可能性があります。

自己署名入りの証明書を作成した場合は、証明書に対する強力な秘密キー
保護が有効になっていることを確認してください。これによって、悪意の
あるプログラムがスクリプトに署名するのを回避できます。手順に
ついては、このトピックの最後で説明します。

自己署名入り証明書の作成
————————————————————-
自己署名入り証明書を作成するには、MakeCert.exe ツールを使用します。この
ツールは、Microsoft .NET Framework SDK (バージョン 1.1 以降) および
Microsoft Platform SDK に同梱されています。

MakeCert を使用して証明書を作成するには、以下の手順に従います。

SDK コマンド プロンプト ウィンドウで、次のコマンドを実行します。

最初のコマンドで、使用しているコンピュータ用のローカルな証明機関を
作成します。2 番目のコマンドで、その証明機関から個人証明書を生成します。

makecert -n “CN=PowerShell Local Certificate Root” -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine

makecert -pe -n “CN=PowerShell User” -ss MY -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

MakeCert によって、秘密キー パスワードに関するプロンプトが表示されます。

証明書が正しく生成されたことを確認するには、以下の手順に従います。

PowerShell プロンプトで、次のように入力します。

get-childitem cert:\CurrentUser\My -codesigning

このコマンドは、PowerShell 証明書プロバイダを使用して、証明書に関する
情報を表示します。

証明書が作成されると、次のような画面に、PowerShell ユーザーの認証データ
を含む証明書の拇印が表示されます。

ディレクトリ:Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint Subject
———- ——-
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]

スクリプトの署名
————-

自己署名入り証明書を作成したら、スクリプトに署名できます。AllSigned 実行
ポリシーを使用している場合は、スクリプトに署名することによって、
コンピュータ上でそのスクリプトを実行できます。

次に示すサンプル スクリプト sign-file.ps1 は、スクリプトに署名します。
ただし、AllSigned 実行ポリシーを使用している場合は、sign-file.ps1 を実行
する前に署名する必要があります。

このスクリプトを使用するには、次のテキストをテキスト ファイルにコピーして、
ファイル名を sign-file.ps1 にします。

(スクリプト ファイルに .txt ファイル名拡張子が付いていないことを確認して
ください。テキスト エディタによって .txt が付加されている場合は、
“sign-file.ps1” のようにファイル名を引用符で囲んでください。)

## sign-file.ps1
## Sign a file
param([string] $file=$(throw “Please specify a filename.”))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] Set-AuthenticodeSignature $file $cert

sign-file.ps1 に署名するには、PowerShell プロンプトで次のコマンドを
入力します。

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Set-AuthenticodeSignature sign-file.ps1 $cert

署名したスクリプトは、ローカル コンピュータ上で実行できます。ただし、
PowerShell 実行ポリシーによって、信頼された機関からのデジタル署名が
要求されるコンピュータ上では、そのスクリプトを実行できません。実行
しようとすると、次のエラー メッセージが表示されます。

ファイル C:\remote_file.ps1 を読み込めません。証明書の署名を検証
できません。
行:1 文字:15
+ .\ remote_file.ps1

自作スクリプト以外のスクリプトを実行してこのメッセージが表示された場合は、
そのファイルを署名なしスクリプトと同様に処理します。コードを確認し、
それが信頼できれば、署名して実行できます。

証明書に対する強力な秘密キー保護の有効化
———————————————————

コンピュータ上にプライベート証明書が存在する場合、悪意のあるプログラムが
勝手にスクリプトに署名して、PowerShell にその実行を認めさせる可能性が
あります。

自動署名を防止するには、証明書マネージャ ツール (Certmgr.exe) を使用して、
署名証明書を .pfx ファイルにエクスポートします。証明書マネージャは、
Microsoft .NET Framework SDK、Microsoft Platform SDK、および Internet
Explorer 5.0 以降に付属しています。

証明書をエクスポートするには、以下の手順に従います。

1. 証明書マネージャ (GUI ツール) を起動します。

2. “PowerShell ローカル証明書ルート” によって発行された証明書を
選択します。

3. [エクスポート] をクリックし、証明書のエクスポート ウィザードを
起動します。

4. [はい、秘密キーをエクスポートします] を選択し、[次へ] を
クリックします。

5. [強力な保護を有効にする] を選択します。

6. パスワードを入力し、確認のためにもう一度パスワードを入力します。

7. .pfx 拡張子付きのファイル名を入力します。

8. [完了] をクリックします。

証明書を再インポートするには、以下の手順に従います。

1. 証明書マネージャ (GUI ツール) を起動します。

2. [インポート] をクリックして、証明書のインポート ウィザードを
起動します。

3. エクスポート プロセスで作成した .pfx ファイルの場所を指定します。

4. [パスワード] ページで、[秘密キーの保護を強力にする] を選択し、
エクスポート プロセスで割り当てたパスワードを入力します。

5. [個人] 証明書ストアを選択します。

6. [完了] をクリックします。

関連項目

コード署名については、http://msdn.microsoft.com/ の Microsoft
Developer Network (MSDN) で、コード署名の概要に関する情報を参照
してください。

Set-AuthenticodeSignature コマンドの詳細について参照するには、
PowerShell コマンド プロンプトで次のコマンドを入力してください。

help Set-AuthenticodeSignature

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です