96 lines
2.9 KiB
PowerShell
96 lines
2.9 KiB
PowerShell
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$repoRoot = Split-Path -Parent $PSScriptRoot
|
|
$pluginsRoot = Join-Path $repoRoot "plugins"
|
|
$toolRoot = Join-Path $repoRoot ".tools"
|
|
$recoveryRoot = Join-Path $repoRoot ".recovery"
|
|
$extractRoot = Join-Path $recoveryRoot "extract"
|
|
$decompileRoot = Join-Path $recoveryRoot "decompiled"
|
|
$inventoryPath = Join-Path $recoveryRoot "inventory.csv"
|
|
$toolExe = Join-Path $toolRoot "ilspycmd.exe"
|
|
|
|
function Ensure-Directory([string]$Path) {
|
|
if (-not (Test-Path -LiteralPath $Path)) {
|
|
New-Item -ItemType Directory -Path $Path | Out-Null
|
|
}
|
|
}
|
|
|
|
function Reset-Directory([string]$Path) {
|
|
if (Test-Path -LiteralPath $Path) {
|
|
Remove-Item -LiteralPath $Path -Recurse -Force
|
|
}
|
|
|
|
New-Item -ItemType Directory -Path $Path | Out-Null
|
|
}
|
|
|
|
function Get-RuntimeTarget([string]$DepsPath) {
|
|
if (-not (Test-Path -LiteralPath $DepsPath)) {
|
|
return $null
|
|
}
|
|
|
|
try {
|
|
$deps = Get-Content -LiteralPath $DepsPath -Raw | ConvertFrom-Json
|
|
return $deps.runtimeTarget.name
|
|
}
|
|
catch {
|
|
return $null
|
|
}
|
|
}
|
|
|
|
Ensure-Directory $toolRoot
|
|
Ensure-Directory $recoveryRoot
|
|
Ensure-Directory $extractRoot
|
|
Ensure-Directory $decompileRoot
|
|
|
|
if (-not (Test-Path -LiteralPath $toolExe)) {
|
|
dotnet tool install --tool-path $toolRoot ilspycmd | Out-Host
|
|
}
|
|
|
|
$inventory = New-Object System.Collections.Generic.List[object]
|
|
|
|
Get-ChildItem -LiteralPath $pluginsRoot -Directory | Sort-Object Name | ForEach-Object {
|
|
$pluginDir = $_
|
|
$zipPath = Join-Path $pluginDir.FullName "latest.zip"
|
|
|
|
if (-not (Test-Path -LiteralPath $zipPath)) {
|
|
return
|
|
}
|
|
|
|
$extractPath = Join-Path $extractRoot $pluginDir.Name
|
|
Reset-Directory $extractPath
|
|
Expand-Archive -LiteralPath $zipPath -DestinationPath $extractPath -Force
|
|
|
|
$dlls = Get-ChildItem -LiteralPath $extractPath -Filter "*.dll" -File
|
|
|
|
foreach ($dll in $dlls) {
|
|
$assemblyName = [System.IO.Path]::GetFileNameWithoutExtension($dll.Name)
|
|
$projectPath = Join-Path $decompileRoot $assemblyName
|
|
Reset-Directory $projectPath
|
|
|
|
& $toolExe -p -o $projectPath $dll.FullName | Out-Host
|
|
|
|
$depsPath = Join-Path $extractPath ($assemblyName + ".deps.json")
|
|
$pdbPath = Join-Path $extractPath ($assemblyName + ".pdb")
|
|
|
|
$inventory.Add([pscustomobject]@{
|
|
PluginFolder = $pluginDir.Name
|
|
AssemblyName = $assemblyName
|
|
RuntimeTarget = Get-RuntimeTarget $depsPath
|
|
ZipPath = $zipPath
|
|
DllPath = $dll.FullName
|
|
HasPdb = Test-Path -LiteralPath $pdbPath
|
|
ExtractPath = $extractPath
|
|
ProjectPath = $projectPath
|
|
})
|
|
}
|
|
}
|
|
|
|
$inventory |
|
|
Sort-Object PluginFolder, AssemblyName |
|
|
Export-Csv -LiteralPath $inventoryPath -NoTypeInformation
|
|
|
|
$inventory |
|
|
Sort-Object PluginFolder, AssemblyName |
|
|
Format-Table PluginFolder, AssemblyName, RuntimeTarget, HasPdb, ProjectPath
|