Powershell脚本检查特定文件夹中dll的调试模式

时间:2018-07-10 05:18:04

标签: .net powershell debugging dll

我希望使用Powershell脚本在当前文件夹中以调试模式列出DLL。 是否可以这样做,请您帮忙准备脚本吗?

谢谢@Moerwald。根据您提供的脚本和参考,已对其进行了扩展以递归地运行给定文件夹中的所有DLL。您可以看看它。

Get-ChildItem -Filter *.dll -Recurse |
    ForEach-Object {
        $AssemblyName= $_.FullName;      
        try {
         $Assembly = [Reflection.Assembly]::LoadFile($AssemblyName);
         $type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute");
         $debugAttribute = $Assembly.GetCustomAttributes($type,$false);
         If ($debugAttribute.count -Eq 0) {} #{$_.Name  + ":Release"}
          Elseif ($debugAttribute[0].IsJITOptimizerDisabled -eq $false) {} #{$_.Name + ":Release"}
          Else {$_.Name + ":Debug"}
        } catch{ "***ERROR*** Error when loading assembly: " + $AssemblyName + $_.Exception.Message}                   
    } 

1 个答案:

答案 0 :(得分:0)

基于此stackoverflow answer

$type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute")
$path = "$($($pwd).Path)\xyz.dll"
$loadedAss = [System.Reflection.Assembly]::LoadFile($path)
$loadAss.GetCustomAttributes($type, $false)

如果程序集是在调试模式下编译的,则结果如下:

IsJITTrackingEnabled   : True
IsJITOptimizerDisabled : True
DebuggingFlags         : Default, IgnoreSymbolStoreSequencePoints, EnableEditAndContinue, DisableOptimizations
TypeId                 : System.Diagnostics.DebuggableAttribute

对于发布模式:

IsJITTrackingEnabled   : False
IsJITOptimizerDisabled : False
DebuggingFlags         : IgnoreSymbolStoreSequencePoints
TypeId                 : System.Diagnostics.DebuggableAttribute

简单功能(无错误检查):

function Is-AssemblyDebugOne {
[CmdletBinding()]
param (
    [ValidateScript({Test-Path $_ })] 
    [string]
    $absolutePathToAssembly
)

begin {
    $type = [System.Type]::GetType("System.Diagnostics.DebuggableAttribute")
}

process {
    $loadedAss = [System.Reflection.Assembly]::LoadFile($absolutePathToAssembly)
    $debugAttribute = $loadedAss.GetCustomAttributes($type, $false)
    $debugAttribute[0].IsJITOptimizerDisabled -eq $true -and $debugAttribute[0].IsJITTrackingEnabled -eq $true
}

end {
}

}

希望有帮助。