2013-03-04 63 views
2

我想檢查程序集是否是強名稱簽名。如何使用PowerShell提取publickeytoken?

以下是我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,文化=中立, 公鑰= 70ea1bb087B4tbed

如果公鑰爲null,我認爲這是沒有簽名。我試圖寫的,如果條件一樣

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

雖然很多EXE或DLL被其公鑰爲空,但它仍然顯示爲「組件沒有簽署」不輸出。

如何檢查是否條件來查找publickeytoken是否爲null? (或組件被簽署或不)

+1

參考這個博客帖子(C#代碼) - HTTP ://blogs.msdn.com/b/shawnfa/archive/2004/06/07/150378.aspx – 2013-03-04 09:26:47

+0

用'-match'改變'-contains'。或者使用''[System.Reflection.AssemblyName] :: GetAssemblyName($ assemblypath).getpublickeytoken()'獲取令牌值(bytearray) – 2013-03-04 09:28:43

回答

4

另一種選擇是使用它返回任一個填充的或空的字節數組例如GetPublicKeyToken()方法:

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