2016-07-07 1 views
1

J'ai fait des recherches/googler les 2 dernières heures, et je suis pratiquement au point de larmes ...Comment générer un certificat auto-signé et l'utiliser pour signer mon script PowerShell?

Je ne peux pas utiliser Nouveau-SelfSignedCertificate parce que je suis sous Windows 7. Je ne peux pas utiliser makecert à cause d'un bug qui ne me permettra pas d'installer le SDK pour Windows 7 parce qu'il pense que j'ai une version préliminaire de .NET 4, mais pas moi. Essayer d'installer .NET 4 m'a informé que j'ai une version nouvelle ou meilleure.

J'ai essayé un hack de registre que j'ai trouvé pour contourner ceci, qui malheureusement n'a pas fonctionné.

J'ai téléchargé cette https://gallery.technet.microsoft.com/scriptcenter/Self-signed-certificate-5920a7c6#content

Mais peut ne pas sembler réussir à passer à travers toutes les étapes que je dois obtenir mon script signé pour que je puisse réellement donner à d'autres personnes d'utiliser en toute sécurité.

Je pense que j'ai réussi à créer le certificat (bien que je ne sois pas sûr de l'avoir fait correctement). D'après ce que je peux dire, je dois maintenant appliquer un mot de passe ou une clé, puis l'exporter? Je ne suis toujours pas sûr de la façon dont je signe spécifiquement mon script, afin que d'autres puissent l'exécuter en tant que 'Signé'.

Merci les gars.

Sinon tout cela pourrait éventuellement être inutile si quelqu'un sait comment je peux obtenir des chemins relatifs .ps1 travaillant dans un fichier .exe?

Le script fonctionne correctement en .ps1, mais dès que je le compile en .exe avec PowerGUI, ces lignes ne fonctionnent pas.

. .\Import-XLS.ps1 
$OutFile = ".\TEST$(get-date -Format dd-MM).txt" 
$Content = Import-XLS '.\TEST.xlsx' 

je place obtenir des choses comme « Le terme ». \ Import-XLS.ps1' est pas reconnu comme le nom d'une applet de commande, ainsi que quelques références à un AppData \ Local \ Temp \ QuestSoftware \ PowerGUI Donc, je suppose que PowerGUI fait quelque chose de bizarre, mais je ne sais pas comment convertir un fichier .ps1 en fichier .exe Selon la réponse à la question principale, je peux soumettre un fichier. nouvelle question pour le .exe officiellement ..

Merci les gars

+0

La signature d'un script avec un certificat auto-signé ne rendra pas le script 'approuvé' sur les machines qui n'ont pas donné ce certificat spécifique. – bluuf

+0

Ce sera le cas s'ils utilisent "Set-ExecutionPolicy RemoteSigned", non? Certaines personnes qui souhaitaient utiliser ce script n'aimaient pas l'idée de supprimer la sécurité au niveau de l'exécution de scripts distants non signés. – XViper

Répondre

1

J'ai donc résolu ce problème en combinant deux choses.

Split-Path $MyInvocation.MyCommand.Path 

et

[System.AppDomain]::CurrentDomain.BaseDirectory} 

je devais utiliser les deux, comme l'ancien travaillé dans un .ps1 mais pas dans un .exe compilé, alors que celui-ci a travaillé dans un .exe compilé, mais pas un .ps1.

Comme le fichier PowerGUI compilé .exe a un nom de dossier de chemin cohérent, j'ai fini par utiliser ce qui suit.J'ai également inclus la fonction dans le fichier .exe (mais cela n'était pas nécessaire). J'ai ensuite utilisé $OutFile = "$ScriptPath\<Filename>.txt" et $Content = Import-XLS "$ScriptPath\<Filename>.xlsx"

Cela signifie que je peux maintenant utiliser un .exe au lieu d'essayer d'obtenir un certificat de travail pour le script. Tout en étant capable de tester rapidement les modifications alors que c'est toujours un .ps1. J'espère que cela sera utile aux autres utilisateurs de PowerGUI pour faire des .exe dans le futur, qui doivent aussi utiliser des chemins relatifs.

Merci à ceux qui ont fourni une aide et des conseils.

+0

Génial cela a fonctionné pour moi mais j'ai dû utiliser '[AppDomain]' au lieu de '[System.AppDomain]' –

0

Donc, je n'ai pas utilisé PowerGUI pour créer des fichiers .exe à partir de scripts, donc c'est un peu dans le noir mais je suppose qu'il n'implémente pas les fichiers externes dot-source, si c'est la seule chose qui vous empêche de déployer le code pourquoi ne pas simplement copier les fonctions de Import-XLS.ps1 dans le corps de votre script?

+0

Salut Mike. Oui, j'ai essayé ça à la fin, mais les fichiers $ Outfile et $ Content ne fonctionnent toujours pas. J'ai travaillé autour de cela en définissant un chemin absolu, mais cela rend le script vraiment inflexible. Existe-t-il d'autres façons de créer un fichier .exe? (ou devrais-je poser une nouvelle question pour cela?) Merci. – XViper

+0

Alternativement, si je pouvais utiliser une sorte de variation de '$ ScriptPath = Split-chemin de MyInvocation.MyCommand.Path' $ Ensuite, utilisez' $ ScriptPath $ \ OutFile = "\ test.txt" '' $ Contenu = Importation -XLS '"$ ScriptPath \ TEST.xlsx" ' Mais je n'arrive pas à faire marcher ça non plus. – XViper

+0

si son échec sur d'autres choses que dot-sourcing je ne voudrais pas aller trop profondément dans ce domaine, tout sera une douleur de travailler avec de toute façon. mais revenons à la signature de votre script une fois que vous l'importer dans votre magasin de certificats [plus d'informations ici] (https://technet.microsoft.com/fr-fr/library/cc754489 (v = ws.11) .aspx) devrait être aussi simple que d'exécuter Set-AuthenticodeSignature et de fournir les bons paramètres [plus d'informations ici] (https://blogs.technet.microsoft.com/heyscriptingguy/2010/06/17/hey-scripting-guy-how-can -i-sign-windows-powershell-scripts-avec-une-enterprise-windows-pki-part-2-of-2 /) –