1

我有一些签名的 .ps1 脚本,我需要验证它们是否从 C# 项目正确签名,是否有任何算法或库可以做到这一点?

谢谢!

4

2 回答 2

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);
    }
}
于 2010-06-29T15:28:59.257 回答
0

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

于 2010-06-29T15:22:45.637 回答