3

我正在尝试检查程序集是否是强名称签名的。

以下是我的PowerShell脚本

function Get-AssemblyStrongName($assemblyPath)
{
    [System.Reflection.AssemblyName]::GetAssemblyName($assemblyPath).FullName 
}

$File = Get-ChildItem -Path $args[0] -Include @("*.dll","*.exe") -Recurse

Foreach ($f in $File)
{
  $assembly=$f.FullName

  Get-AssemblyStrongName $assembly

}

输出如下所示。

Sampledll,版本=1.0.0.0,文化=中性,PublicKeyToken=70ea1bb087B4tbed

如果 publickeytoken 为空,我认为它没有签名。我试图写如果条件像

$Assembly=Get-AssemblyStrongName $assembly
If ($assembly -contains "null" ) { "assembly is not signed" }

尽管许多 exe 或 dll 的 publickey 为 null,但它仍然没有显示“程序集未签名”的输出。

如何使用 if 条件检查 publickeytoken 是否为空?(或程序集是否签名)

4

1 回答 1

5

另一种选择是使用 GetPublicKeyToken() 方法,该方法返回填充或空字节数组,例如:

function Test-AssemblyStrongNamed($assemblyPath) {
    [reflection.assemblyname]::GetAssemblyName($assemblyPath).GetPublicKeyToken().Count -gt 0
}
于 2013-03-04T15:59:11.073 回答