param( [Parameter(Mandatory=$true)][string]$OutDir ) $ErrorActionPreference = 'Stop' New-Item -ItemType Directory -Force -Path $OutDir | Out-Null $items = @( @{ Path = 'build/Release/libprivatebin.dll'; Optional = $false } @{ Path = 'build/Release/libprivatebin.lib'; Optional = $true } @{ Path = 'build/Release/privatebinapi.pdb'; Optional = $true } @{ Path = 'build/example/Release/example.exe'; Optional = $true } ) foreach ($it in $items) { $p = Resolve-Path -LiteralPath $it.Path -ErrorAction SilentlyContinue if ($null -ne $p) { Copy-Item -LiteralPath $p.Path -Destination $OutDir -Force Write-Host ("Collected: " + [IO.Path]::GetFileName($p.Path)) } elseif (-not $it.Optional) { throw "Required artifact not found: $($it.Path)" } else { Write-Host ("Skip missing optional: " + $it.Path) } } Get-ChildItem -LiteralPath $OutDir -File | Format-Table Name,Length -AutoSize