
Não consigo fazer com que meus scripts entrem no PowerShell. Tenho um certificado de assinatura de código válido instalado em minha máquina e executo 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
Responder1
Descobri. O arquivo de script foi criado usando PowerShell ISE e aparentemente vocênão é possível assinar scripts criados no PowerShell ISEou, mais precisamente, você não pode assinar arquivos codificados em Unicode Big Endian, que é o padrão para ISE. Há uma solução alternativa para alterar a codificação padrão conforme documentado no link.
Originalmente adicionado à pergunta porChade Miller. Realocou sua atualização para uma resposta para que esta pergunta não apareça mais como sem resposta.
Responder2
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, caso ele não exista, e adicionar o menu. Execute este código de dentro do ISE ou você simplesmente adicionará lixo ao seu perfil ConsoleHost, onde ocorrerá um erro:
add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'