如何使用C#验证Powershell .ps1脚本的签名?

时间:2010-06-29 15:06:08

标签: c# powershell signature authenticode

我有一些签名的.ps1脚本,我需要验证它们是否已从C#项目中正确签名,是否有任何算法或库可以执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以托管PowerShell引擎以使用Get-AuthenticodeSignature cmdlet进行检查,例如:

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

答案 1 :(得分:0)

如果Get-AuthenticodeSignature cmdlet正确验证(即它报告错误,如果无效)并且目标系统上有PSH,则可以在C#应用程序中运行PSH。