Não é possível assinar scripts do PowerShell

7

Parece que não consigo que meus scripts acessem o 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      : [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
    
por Chad Miller 09.08.2010 / 21:33

2 respostas

4

Descobri isso. O arquivo de script foi criado usando o PowerShell ISE e aparentemente você não é possível assinar scripts criados no PowerShell ISE ou, mais precisamente, você não pode assinar arquivos codificados em Big Endian Unicode, 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 . Relocou sua atualização para uma resposta, então essa pergunta não aparece mais como não respondida.

    
por 13.04.2017 / 14:14
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ê apenas adicionará lixo ao seu perfil do ConsoleHost, onde ele apenas causará o erro:

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

Tags