2010-04-30 3 views
3

.net Powershell SDK를 사용하여 powershell을 실행하고 싶습니다. 나는이 잘 작동합니다. 스크립트를 실행하기 전에 코드 서명 인증서로 서명했는지 확인하고 싶습니다. Get-AuthenticodeSignature를 사용하여 powershell 자체에서 수행하기는 쉽지만이 스크립트를 실행하기 전에 코드에서이 작업을 수행하고 싶습니다. .관리되는 API에서 powershell 스크립트가 서명되었는지 어떻게 확인할 수 있습니까?

솔루션 :

 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

아, 당신이 PowerShell의 v1.0에있어 (powershell 개체가 v2에만 해당) – x0n

관련 문제