Impossibile firmare gli script di PowerShell


8

Non riesco a ottenere i miei script per accedere a PowerShell. Ho un certificato di firma codice valido installato sulla mia macchina ed eseguo i seguenti comandi. Eventuali suggerimenti?

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

Buono a sapersi. Stavo dando un'occhiata alla tua domanda perché non posso nemmeno firmare i miei script, senza essere un amministratore sul PC. Ho chiesto qui: superuser.com/questions/174878/…
Bratch

4
Bella domanda e grazie per aver rispedito la risposta. Dovresti andare avanti e pubblicare la modifica nella sezione delle risposte e dopo il timeout contrassegnala come corretta in modo che le persone possano vedere più chiaramente a questa domanda è stata data una risposta.
Caleb,

Ho avuto un problema simile nel tentativo di utilizzare Subversion durante la modifica di script in ISE. Subversion si è lamentato del fatto che i file salvati dall'ISE erano "binari di tipo mime" e non li aggiungevano al repository. Ho inserito una soluzione più fluida all'approccio Notepad.exe nella mia risposta di seguito.
Ryan Fisher,

Risposte:


4

Capito. Il file di script è stato creato utilizzando PowerShell ISE e apparentemente non è possibile firmare script creati in PowerShell ISE o, più precisamente, non è possibile firmare file codificati Unicode Big Endian che è l'impostazione predefinita per ISE. C'è una soluzione alternativa per modificare la codifica predefinita come documentato nel collegamento.


Originariamente aggiunto alla domanda di Chad Miller . Ha trasferito il suo aggiornamento a una risposta in modo che questa domanda non venga più visualizzata senza risposta.


Buono a sapersi: quel problema di codifica dei file Unicode mi ha morso altrove (un parser XML scritto male).
Helvick,

E l'altro giorno quando scrivo uno script per esportare contratti di locazione MS-DHCP per DHCP BIND. Unicode di nuovo.
sysadmin1138

3

È possibile salvare un file come codifica specifica dall'interno di Powershell ISE con il metodo .Save () dell'oggetto ISEFile:

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

Se aggiungi quanto segue al tuo profilo ISE, puoi semplicemente premere Ctrl-Shift-S per ottenere una codifica predefinita diversa per i tuoi script:

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

Ecco un po 'di codice rapido per creare il tuo profilo se non esiste e aggiungere il menu. Esegui questo codice dall'interno di ISE o aggiungerai semplicemente spazzatura al tuo profilo ConsoleHost dove si limiterà a fuoriuscire:

add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.