No se pueden firmar los scripts de PowerShell

8

Parece que no puedo obtener mis scripts para iniciar 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      : 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
fuente
Bueno saber. Eché un vistazo a su pregunta porque tampoco puedo firmar mis scripts, sin ser un Administrador en la PC. Le pregunté sobre ello aquí: superuser.com/questions/174878/...
Bratch
44
Buena pregunta y gracias por publicar la respuesta. Debe continuar y publicar su edición en la sección de respuestas y luego, después del tiempo de espera, márquela como correcta para que las personas puedan ver más claramente que esta pregunta ha sido respondida.
Caleb
Tuve un problema similar al intentar usar Subversion al editar scripts en el ISE. Subversion se quejó de que los archivos guardados por el ISE eran de 'tipo mime binario' y no los agregarían al repositorio. He publicado una solución más sencilla para el enfoque Notepad.exe en mi respuesta a continuación.
Ryan Fisher

Respuestas:

4

Lo averigué. El archivo de secuencia de comandos se creó con PowerShell ISE y aparentemente no puede firmar secuencias de comandos creadas en PowerShell ISE o, más exactamente, no puede firmar archivos codificados Unicode Big Endian, que es el valor predeterminado para ISE. Hay una solución alternativa para cambiar la codificación predeterminada como se documenta en el enlace.


Originalmente agregado a la pregunta por Chad Miller . Reubicó su actualización a una respuesta para que esta pregunta ya no aparezca como sin respuesta.

revs Zoredache
fuente
Es bueno saberlo: ese problema de codificación de archivos Unicode me ha mordido en otra parte (un analizador XML mal escrito).
Helvick
Y a mí el otro día cuando escribía un script para exportar arrendamientos MS-DHCP para BIND DHCP. Unicode de nuevo.
sysadmin1138
3

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 agregue el menú. Ejecute este código desde el ISE o simplemente agregará basura a su perfil de ConsoleHost donde simplemente se producirá un error:

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