
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")'