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 が null の場合、署名されていないと思います。if condition like を書こうとしていた

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

多くのexeまたはdllはpublickeyをnullにしていますが、「アセンブリが署名されていません」として出力が表示されません。

publickeytoken が null かどうかを if 条件で確認する方法は? (またはアセンブリが署名されているかどうか)

4

1 に答える 1

5

もう 1 つのオプションは、入力済みまたは空のバイト配列を返す GetPublicKeyToken() メソッドを使用することです。

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