Невозможно подписать скрипты PowerShell

Невозможно подписать скрипты PowerShell

Похоже, я не могу заставить свои скрипты подписываться в PowerShell. У меня установлен действительный сертификат подписи кода на моей машине, и я запускаю следующие команды. Есть предложения?

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


Subject      : [email protected], 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

решение1

Разобрался. Файл скрипта был создан с помощью PowerShell ISE и, видимо, выне удается подписать скрипты, созданные в PowerShell ISEили, точнее, вы не можете подписать файлы в кодировке Unicode Big Endian, которая является кодировкой по умолчанию для ISE. Есть обходной путь для изменения кодировки по умолчанию, как описано в ссылке.


Первоначально добавлено к вопросу пользователемЧад Миллер. Переместил свое обновление в ответ, чтобы этот вопрос больше не отображался как неотвеченный.

решение2

Вы можете сохранить файл в определенной кодировке из Powershell ISE с помощью метода .Save() объекта ISEFile:

 $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")'

Связанный контент