Não foi possível assinar scripts do PowerShell

8

Não consigo obter meus scripts para entrar no PowerShell. Eu tenho um certificado de assinatura de código válido instalado na minha máquina e execute os seguintes comandos. Alguma sugestão?

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
Chad Miller
fonte
Bom saber. Eu estava analisando sua pergunta porque também não consigo assinar meus scripts sem ser um administrador no PC. Eu perguntei sobre isso aqui: superuser.com/questions/174878/…
Bratch
4
Boa pergunta e obrigado por postar de volta a resposta. Você deve publicar sua edição na seção de respostas e, depois do tempo limite, marcar como correta para que as pessoas possam ver com mais clareza que esta pergunta foi respondida.
Caleb
Eu tive um problema semelhante ao tentar usar o Subversion ao editar scripts no ISE. O Subversion reclamou que os arquivos salvos pelo ISE eram 'binários e mime-type' e não os adicionariam ao repositório. Publiquei uma solução mais suave para a abordagem do Notepad.exe na minha resposta abaixo.
Ryan Fisher

Respostas:

4

Descobri isso. O arquivo de script foi criado usando o PowerShell ISE e, aparentemente, você não pode assinar scripts criados no PowerShell ISE ou, com mais precisão, não pode assinar arquivos codificados Unicode Big Endian, que é o padrão para o ISE. Há uma solução alternativa para alterar a codificação padrão, conforme documentado no link.


Originalmente adicionado à pergunta por Chad Miller . Realocou sua atualização para uma resposta, para que esta pergunta não seja mais respondida.

Zoredache
fonte
É bom saber - que o problema de codificação de arquivo Unicode me incomodou em outro lugar (um analisador XML mal escrito).
Helvick
E eu outro dia ao escrever um script para exportar concessões do MS-DHCP para o BIND DHCP. Unicode novamente.
sysadmin1138
3

Você pode salvar um arquivo como uma codificação específica de dentro do Powershell ISE com o método .Save () do objeto ISEFile:

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

Se você adicionar o seguinte ao seu perfil ISE, basta pressionar Ctrl-Shift-S para obter uma codificação padrão diferente para seus scripts:

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

Aqui está um código rápido para criar seu perfil, se ele não existir, e adicionar o menu. Execute este código de dentro do ISE ou você simplesmente adicionará lixo ao seu perfil do ConsoleHost, onde ocorrerá apenas um erro:

add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'
Ryan Fisher
fonte