2010-04-30 29 views
3

我想使用.net Powershell SDK執行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

足夠接近!添加解決方案,我的問題 – 2010-05-04 16:04:23

+0

啊,我看你在PowerShell的v1.0(PowerShell對象是v2只) – x0n 2010-05-06 17:08:18

相關問題