我想使用.net Powershell SDK执行powershell。我有这个工作正常。 在我执行它之前,我想检查脚本是否已经由我的代码签名证书签名 - 这很容易在PowerShell本身内部使用Get-AuthenticodeSignature进行,但我想在选择执行此脚本之前在代码中执行此操作。
解决方案:
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;
答案 0 :(得分: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;
}
(从记忆中,所以可能不完全在语法上正确)