PowerShellスクリプトに署名できません


8

スクリプトでPowerShellにサインインできないようです。マシンに有効なコード署名証明書をインストールし、次のコマンドを実行します。助言がありますか?

PS C:\Users\u00\bin> $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
PS C:\Users\u00\bin> $cert | fl


Subject      : E=operations@contoso.com, CN=contoso , OU=Operations, O=contoso,
               L=Mayberry, S=Florida, C=US
Issuer       : CN=contoso Intermediate CA1, DC=contoso, DC=com
Thumbprint   : XXXXXXXXXXXXXXXXXXXXX
FriendlyName : contoso 
NotBefore    : 7/20/2010 12:58:55 AM
NotAfter     : 7/20/2011 12:58:55 AM
Extensions   : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oi
               ystem.Security.Cryptography.Oid...}



PS C:\Users\u00\bin> Set-AuthenticodeSignature .\testsign.ps1 -Certificate $cert


    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          UnknownError                           testsign.ps1


PS C:\Users\u00\bin> Get-AuthenticodeSignature .\testsign.ps1

    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          NotSigned                              testsign.ps1

知ってよかった。PCの管理者でなければ、スクリプトにも署名できないため、私はあなたの質問を調べていました。私はここでそれについて尋ねた:superuser.com/questions/174878/...
Bratch

4
良い質問と回答を投稿してくれてありがとう。先に進んで、編集内容を回答セクションに投稿し、タイムアウト後に正しいとマークして、この質問に対する回答がより明確にわかるようにする必要があります。
Caleb 2010年

ISEでスクリプトを編集するときにSubversionを使用しようとすると、同様の問題が発生しました。Subversionは、ISEによって保存されたファイルは「バイナリMIMEタイプ」であり、それらをリポジトリに追加しないと不満を述べました。以下の私の回答で、Notepad.exeアプローチへのよりスムーズな回避策を投稿しました。
ライアンフィッシャー

回答:


4

理解した。スクリプトファイルはPowerShell ISEを使用して作成されており、PowerShell ISEで作成されたスクリプトに署名できないか、ISEのデフォルトであるUnicodeビッグエンディアンでエンコードされたファイルに正確に署名できません。リンクに記載されているようにデフォルトのエンコーディングを変更する回避策があります。


当初はChad Millerによって質問に追加されました。彼の更新を回答に移動したため、この質問は未回答として表示されなくなりました。


知っておきたいことですが、Unicodeファイルのエンコードの問題が原因で他の場所(XMLパーサーの記述が不適切)に悩まされています。
Helvick

そして、先日、BIND DHCPのMS-DHCPリースをエクスポートするスクリプトを作成したときのことです。再びユニコード。
sysadmin1138

3

ISEFileオブジェクトの.Save()メソッドを使用して、Powershell ISE内から特定のエンコーディングとしてファイルを保存できます。

 $psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)

以下をISEプロファイルに追加した場合、Ctrl-Shift-Sを押すだけで、スクリプトの別のデフォルトエンコーディングを取得できます。

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")

プロファイルが存在しない場合にプロファイルを作成してメニューを追加するための簡単なコードを次に示します。このコードをISE内から実行するか、ジャンクをConsoleHostプロファイルに追加するだけでエラーが発生します。

add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.