Невозможно подписать сценарии 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
Чед Миллер
источник
Хорошо знать. Я посмотрел на ваш вопрос, потому что я не могу подписывать свои сценарии, не будучи администратором на ПК. Я спросил об этом здесь: superuser.com/questions/174878/…
Bratch
4
Хороший вопрос и спасибо за ответ. Вы должны пойти дальше и опубликовать свои изменения в разделе ответов, а затем по истечении времени ожидания пометить их как правильные, чтобы люди могли более четко видеть, что на этот вопрос дан ответ.
Калеб
У меня была похожая проблема при попытке использовать Subversion при редактировании скриптов в ISE. Subversion жаловалась, что файлы, сохраненные ISE, были 'двоичным типом пантомимы' и не добавляли их в хранилище. В моем ответе ниже я опубликовал более плавный обходной путь для подхода Notepad.exe.
Райан Фишер

Ответы:

4

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


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

оборота Зоредаче
источник
Полезно знать - эта проблема с кодировкой файлов в Юникоде укусила меня в другом месте (плохо написанный анализатор XML).
Хелвик
И мне на днях при написании скрипта для экспорта MS-DHCP аренды для BIND DHCP. Снова Юникод.
sysadmin1138
3

Вы можете сохранить файл как определенную кодировку из ISE Powershell с помощью метода .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")'
Райан Фишер
источник