循环遍历多个服务器,找到特定的 dll,获取 dll 版本、内部文件名和路径?

循环遍历多个服务器,找到特定的 dll,获取 dll 版本、内部文件名和路径?

我是 Powershell 新手,正在使用 PS v2。我可以看到它的巨大潜力,但我就是无法让以下代码完全发挥作用。我试图得到一个 csv 文件,其中包含 GAC_MSIL 或子目录中通配符所需的 dll,获取 dll 版本、内部文件名和路径以及服务器 IP 地址。

代码如下,它是单行格式,因为它似乎更容易远程到服务器场中的一台服务器并从该控制台运行单行,由于安全登录等。代码产生了一组结果,但只针对最后一台服务器,它可能执行第一台服务器,然后覆盖它,但我不确定。

我读了大量关于使用数组和自定义对象的资料,并尝试过这样做,但我的 PS 脚本技能还不够。

$out = "Ouput_dll_ver_results.csv";
foreach ($server in '11.222.33.123', '11.222.33.124') 
{
    $VersionInfo = 
    (
       Get-ChildItem \\$server\C$\windows\assembly\GAC_MSIL -recurse -Include abc*.dll,def*.dll,ghi*.dll,jkl*.dll 
           | Where-Object{$_.FullName -notmatch "\\windows\\assembly\\temp\\"}
    )
}; 
$VersionInfo | %{Get-Command $_.FullName} | select -expand File* |Export-Csv $out

您能否告知是否/如何更正上述代码,如果不能,我有什么其他方法可以获取我需要的信息?

答案1

嗯,每次你在循环中迭代时,你都会覆盖变量$VersionInfo。当然,最后你得到的只是最新的条目。尝试替换

$VersionInfo =

$VersionInfo +=

看看是否有帮助。这应该是附加的,而不是覆盖的。

相关内容