如何使用C#验证PowerShell .ps1脚本的签名?
-
01-10-2019 - |
题
我有一些签名的.ps1脚本,我需要验证它们是从C#项目中正确签名的,是否有任何算法或库可以执行此操作?
谢谢!
解决方案
您可以托管PowerShell引擎,以使用Get-authenticodeSignature CMDLET进行检查:EG:
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
private bool VerifyPowerShellScriptSignature()
{
using (var runspaceInvoke = new RunspaceInvoke())
{
string path = "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\" +
"Modules\\PSDiagnostics\\PSDiagnostics.psm1";
Collection<PSObject> results =
runspaceInvoke.Invoke("Get-AuthenticodeSignature " + path);
Signature signature = results[0].BaseObject as Signature;
return signature == null ? false :
(signature.Status == SignatureStatus.Valid);
}
}
其他提示
如果是 Get-AuthenticodeSignature
CMDLET正确验证(即报告不可行的情况),并且在目标系统上可用PSH,您可以在C#应用程序中运行PSH。
不隶属于 StackOverflow