【问题标题】:How can I check a pdb for a particular dll exists in a directory using Powershell?如何使用 Powershell 检查目录中是否存在特定 dll 的 pdb?
【发布时间】:2013-01-11 05:25:37
【问题描述】:

我有一个父目录,其中有多个项目文件夹。 如何在 powershell 中检查所有项目文件夹中的所有相应 dll 是否存在 pdb?

我尝试了以下方法,但不知道如何将 pdb 与特定 dll 匹配。

$source = "C:\ParentDir\*"
$Dir = get-childitem $source -recurse
$List = $Dir | where-object {$_.Name -like "*.dll"}

任何帮助将不胜感激。

【问题讨论】:

    标签: powershell dll directory match pdb


    【解决方案1】:

    试试这个,它应该输出两列,FullName、dll 路径和 PDB,其中包含一个布尔值,指示是否存在相应的 PDB 文件。

    Get-ChildItem $source -Filter *.dll -Recurse | 
    Select-Object FullName,@{n='PDB';e={ Test-Path ($_.FullName -replace 'dll$','pdb') -PathType Leaf }}
    

    【讨论】:

    • 感谢您的回复谢伊!通过使用您的脚本,我得到了没有与目录路径关联的 pdb 的 dll。我实际上想要有和没有 PDB 的 DLL。我如何在具有不同列的报告中显示它?假设在一个 xls 文件中 - DLL、PDB、Path.. 再次感谢!
    • 结果包括有或没有对应pdb文件的dll(在pdb属性中分别报告true或false。要添加扩展名,请添加另一个计算属性(如我使用的那个) PDB) 并更改它以匹配新的扩展名。
    【解决方案2】:

    试试这个:

    $source = ".\Projects\"
    $dlls = Get-ChildItem -Path $source -Filter *.dll -Recurse | where {!$_.PSIsContainer}
    foreach ($dll in $dlls)
    { 
        $pdb = $dll.FullName.Replace(".dll",".pdb") 
        if (!(Test-Path $pdb)) { Write-Output $dll }
    }
    

    它为每个没有 pdb 的 dll 返回 fileinfo(dir) 对象。使用fullname 属性获取文件路径。我在上面提供了很长的答案,以便轻松展示它是如何工作的。要缩短它,请使用:

    $source = ".\Projects\"
    Get-ChildItem -Path $source -Filter *.dll -Recurse | where {!$_.PSIsContainer} | % { $pdb = $_.FullName.Replace(".dll",".pdb"); if (!(Test-Path $pdb)) { $_ } }
    

    【讨论】:

    • 感谢 Graimer 的回复。我尝试了你的方法,它对我来说部分有效。对于 pdb,它显示了完整的文件路径。比如:.\Projects\data\test1.pdb。而我只需要没有路径的 pdb 名称.. 并且路径作为单独的字段.. 我可以这样做吗?
    • ?它返回 PDB 文件?它对我来说很好。它应该只返回没有 psb 文件的 dll 文件。你用的是什么ps版本?你是用长方法还是短方法得到不同的结果?
    • 是的,这很好用.. 但是我得到了所有具有 pdbs 的 dll.. 并且 pdb 显示为完整的文件路径.. 而我需要 pdb 和文件路径分别:)跨度>
    • 它应该可以在刚才测试的 ps2.0 上运行。如果它返回带有 pdb 的 dll,那么您可能错过了!之前(测试路径 ....)。如果还是不行,试试Shay的方法。 :-) 编辑:如果您的文件夹名称也以“.dll”结尾,我猜它会在每个文件夹中包含一个条目,现在修复它。
    • 输入字符串数组。您可以通过使用逗号分隔路径来做到这一点(记住每个路径周围的引号)$Source = "c:\path1", "c:\path2"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2022-11-21
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多