No se pueden firmar scripts de PowerShell

No se pueden firmar scripts de PowerShell

Parece que no puedo hacer que mis scripts inicien sesión en PowerShell. Tengo un certificado de firma de código válido instalado en mi máquina y ejecuto los siguientes comandos. ¿Alguna sugerencia?

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

Respuesta1

Lo averigué. El archivo de script se creó usando PowerShell ISE y aparentemente ustedno puedo firmar scripts creados en PowerShell ISEo más exactamente, no puede firmar archivos codificados Unicode Big Endian, que es el valor predeterminado para ISE. Existe una solución alternativa para cambiar la codificación predeterminada como se documenta en el enlace.


Agregado originalmente a la pregunta porChad Miller. Se reubicó su actualización a una respuesta para que esta pregunta ya no aparezca como sin respuesta.

Respuesta2

Puede guardar un archivo como una codificación específica desde Powershell ISE con el método .Save() del objeto ISEFile:

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

Si agrega lo siguiente a su perfil ISE, puede presionar Ctrl-Shift-S para obtener una codificación predeterminada diferente para sus scripts:

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

Aquí hay un código rápido para crear su perfil si no existe y agregar el menú. Ejecute este código desde ISE o simplemente agregará basura a su perfil de ConsoleHost donde simplemente aparecerá un error:

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

información relacionada