2010-04-30 1 views
3

Я хочу выполнить powershell, используя SDK .net Powershell. У меня это нормально работает. Прежде чем выполнить его, я хочу проверить, подписан ли скрипт моим сертификатом подписи кода - этого достаточно легко сделать из самой powershell с помощью Get-AuthenticodeSignature, но я хотел бы сделать это в коде, прежде чем выбирать этот скрипт ,Как проверить, подписан ли скрипт powershell из управляемого API?

Решение:

 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; 

ответ

4

Самый простой способ, которым я могу думать, по-прежнему использовать PowerShell, но внутри управляемого кода:

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; 
} 

(из памяти, так что не может быть полностью синтаксически правильно)

+0

достаточно близко! Добавлено решение по моему вопросу –

+0

ах, я вижу, что вы на v1.0 powershell (объект powershell - только v2) – x0n