Impossible de signer les scripts PowerShell

8

Je n'arrive pas à obtenir mes scripts pour se connecter à PowerShell. J'ai un certificat de signature de code valide installé sur ma machine et exécute les commandes suivantes. Aucune suggestion?

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
la source
Bon à savoir. Je jetais un œil à votre question car je ne peux pas non plus signer mes scripts sans être administrateur sur le PC. J'ai posé des questions à ce sujet ici: superuser.com/questions/174878/…
Bratch
4
Bonne question et merci d'avoir posté la réponse. Vous devriez aller de l'avant et publier votre modification dans la section des réponses, puis après l'expiration, marquez-la comme correcte afin que les gens puissent voir plus clairement que cette question a été répondue.
Caleb
J'ai eu un problème similaire en essayant d'utiliser Subversion lors de l'édition de scripts dans l'ISE. Subversion s'est plaint que les fichiers enregistrés par l'ISE étaient de «type mime binaire» et ne les ajouteraient pas au référentiel. J'ai publié une solution de contournement plus fluide à l'approche Notepad.exe dans ma réponse ci-dessous.
Ryan Fisher

Réponses:

4

Deviner. Le fichier de script a été créé à l'aide de PowerShell ISE et, apparemment, vous ne pouvez pas signer les scripts créés dans PowerShell ISE ou, plus précisément, vous ne pouvez pas signer les fichiers encodés Unicode Big Endian, qui est la valeur par défaut pour ISE. Il existe une solution de contournement pour modifier l'encodage par défaut, comme indiqué dans le lien.


Initialement ajouté à la question par Chad Miller . Déplacé sa mise à jour vers une réponse afin que cette question n'apparaisse plus comme sans réponse.

Zoredache
la source
Bon à savoir - ce problème de codage de fichier Unicode m'a mordu ailleurs (un analyseur XML mal écrit).
Helvick
Et moi l'autre jour lors de l'écriture d'un script pour exporter des baux MS-DHCP pour BIND DHCP. Unicode à nouveau.
sysadmin1138
3

Vous pouvez enregistrer un fichier en tant qu'encodage spécifique à partir de Powershell ISE avec la méthode .Save () de l'objet ISEFile:

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

Si vous ajoutez ce qui suit à votre profil ISE, vous pouvez simplement appuyer sur Ctrl-Maj-S pour obtenir un codage par défaut différent pour vos scripts:

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

Voici un code rapide pour créer votre profil s'il n'existe pas et ajouter le menu. Exécutez ce code à partir de l'ISE ou vous ajouterez simplement du courrier indésirable à votre profil ConsoleHost où il se contentera d'une erreur:

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