Это то, что я придумал для сканирования с помощью powershell. Я новичок в powershell, так что это может быть не красиво, но это работает.
$hostName = hostname
$appFilePath = "C:\Windows\Temp\DLL_$hostName.csv"
$scanPath = 'C:\'
$exefile = "*.exe"
$dllFile = "*.dll"
Следующее создает список всех DLL и EXE-файлов на c $:
$dll = dir -ErrorAction SilentlyContinue -Recurse -Path $scanPath -Include @($exefile, $dllFile)
Далее рассматривается каждый файл, чтобы увидеть, ссылается ли он на MSXML4.dll. Занимает около 30 минут на моих 149 ГБ данных:
$dll | Select-String "msxml4.dll" -ErrorAction SilentlyContinue | group $($_.name) | select name | export-csv -path $appFilePath`
Вывод не отформатирован, поэтому вы получите что-то вроде:
C:\Windows\SysWOW64\migwiz\unbcl.dll:45:Cclass UnBCL::TimeSpan __thiscall UnBCL::TimeSpan::Add(const class UnBCL::TimeSpan &) constresult of TimeSpan additio..... and so on
unbcl.dll есть на каждой машине, которую я сканировал, и ее можно игнорировать. Я думаю, что он просто ищет MSXML4.dll, даже если он не на машине.
Вы также получите отличные вещи, как это:
"C:\Users\USERX\Documents\Toad for Oracle 10.1 - R2 Commercial.exe:5045:File_Name=""msxml4.dll"" "