2010-04-30 7 views
3

Je veux exécuter une PowerShell en utilisant le .net Powershell SDK. J'ai ce travail bien. Avant de l'exécuter, je veux vérifier que le script a été signé par mon certificat de signature de code - c'est assez facile à faire à partir de powershell en utilisant Get-AuthenticodeSignature mais je voudrais le faire dans le code avant d'exécuter ce script .Comment puis-je vérifier si un script PowerShell est signé à partir de l'API managée?

Solution:

 Runspace runSpace = RunspaceFactory.CreateRunspace(); 
     runSpace.Open(); 

     Pipeline shell = runSpace.CreatePipeline(); 
     shell.Commands.AddScript(String.Format("Get-AuthenticodeSignature '{0}'", Filename)); 

     Signature sig = (shell.Invoke()[0]).BaseObject as Signature; 
     bool isValid = sig.Status == SignatureStatus.Valid; 

Répondre

4

La meilleure façon que je peux penser est d'utiliser encore Powershell, mais à partir de code managé:

using System.Management.Automation; 

void Foo(string path) { 
    PowerShell shell = PowerShell.Create(); 
    shell.AddScript(String.Format("Get-AuthenticodeSignature {0}", path)); 

    Signature sig = shell.Invoke()[0] as Signature; // returns collection 
    bool isValid = sig.Valid; 
} 

(de la mémoire, donc peut-être pas tout à fait syntaxiquement correct)

+0

Assez près! Ajouté la solution à ma question –

+0

ah, je vois que vous êtes sur v1.0 de powershell (l'objet powershell est v2 seulement) – x0n

Questions connexes