Если вы заботитесь только о загруженных в данный момент сборках, вы можете использовать
[System.AppDomain]::CurrentDomain.GetAssemblies()
GAC Version Location
--- ------- --------
True v4.0.30319 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.PowerSh
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_
Если вы заботитесь о ссылочных сборках, это усложняется.
$loaded = [System.AppDomain]::CurrentDomain.GetAssemblies()
$referenced = $loaded.GetReferencedAssemblies() | select-object -Unique
Это позволит получить все загруженные сборки и всессылочные сборки.Проблема в том, что указанные сборки не все загружены, поэтому вы получаете только объект AssemblyName.
$referenced
Version Name
------- ----
4.0.0.0 mscorlib
4.0.0.0 System
3.0.0.0 System.Management.Automation
4.0.0.0 System.Core
4.0.0.0 System.Xml
4.0.0.0 System.Configuration
Чтобы получить остальные детали, вы можете использовать отражение.
$referenced = $loaded.GetReferencedAssemblies() | select-object -Unique | ForEach-Object {
[System.Reflection.Assembly]::ReflectionOnlyLoad($_)
}
$referenced
GAC Version Location
--- ------- --------
True v4.0.30319 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Management
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configurat
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Security\v
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.DirectoryS
Обратите внимание, что многие из них, вероятно, уже загружены, поэтому вам необходимо получить загруженные сборки и удалить их из списка ссылок.
$referenced = $loaded.GetReferencedAssemblies() | select-object -Unique | `
ForEach-Object {
[System.Reflection.Assembly]::ReflectionOnlyLoad($_)
} | Where-Object {
$loaded.FullName -notcontains $_.FullName
}
Теперь в списке ссылок есть только ссылки, которые не загружены.
$referenced
GAC Version Location
--- ------- --------
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_64\Microsoft.Manag
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.JSc
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Servic
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Re
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Design
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.Bui
Обратите внимание, что на них могут ссылаться сборки, которые также не загружены.Так что вам нужно будет создать рекурсивную функцию для их повторения, повторяя описанные выше методы, если вы хотите копать так глубоко.