如何使用PowerShell提取publickeytoken?

Sam*_*abu 3 powershell strongname powershell-2.0

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

以下是我的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

}
Run Code Online (Sandbox Code Playgroud)

输出如下.

Sampledll,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 70ea1bb087B4tbed

如果publickeytoken为null,我认为它没有签名.我试图写条件如果条件

$Assembly=Get-AssemblyStrongName $assembly
If ($assembly -contains "null" ) { "assembly is not signed" }
Run Code Online (Sandbox Code Playgroud)

虽然许多exe或dll将publickey作为null但仍然没有显示输出,因为"程序集未签名".

如何检查if条件以查找publickeytoken是否为null?(或组装是否签署)

Kei*_*ill 5

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

function Test-AssemblyStrongNamed($assemblyPath) {
    [reflection.assemblyname]::GetAssemblyName($assemblyPath).GetPublicKeyToken().Count -gt 0
}
Run Code Online (Sandbox Code Playgroud)