Publish/Copy-AppFilesToFolder.ps1
function CopyAppFilesToFolder { Param( $appFiles, [string] $folder ) $isPsCore = $PSVersionTable.PSVersion -ge "6.0.0" if ($isPsCore) { $byteEncodingParam = @{ "asByteStream" = $true } } else { $byteEncodingParam = @{ "Encoding" = "byte" } } if ($appFiles -is [String]) { if (!(Test-Path $appFiles)) { $appFiles = @($appFiles.Split(',').Trim() | Where-Object { $_ }) } } if (!(Test-Path $folder)) { New-Item -Path $folder -ItemType Directory | Out-Null } $appFiles | Where-Object { $_ } | ForEach-Object { $appFile = "$_" if ($appFile -like "http://*" -or $appFile -like "https://*") { $appUrl = $appFile $appFileFolder = Join-Path ([System.IO.Path]::GetTempPath()) ([Guid]::NewGuid().ToString()) $appFile = Join-Path $appFileFolder ([Uri]::UnescapeDataString([System.IO.Path]::GetFileName($appUrl.Split('?')[0]))) Download-File -sourceUrl $appUrl -destinationFile $appFile CopyAppFilesToFolder -appFile $appFile -folder $folder if (Test-Path $appFileFolder) { Remove-Item -Path $appFileFolder -Force -Recurse } } elseif (Test-Path $appFile -PathType Container) { Get-ChildItem $appFile -Recurse -File | ForEach-Object { CopyAppFilesToFolder -appFile $_.FullName -folder $folder } } elseif (Test-Path $appFile -PathType Leaf) { Get-ChildItem $appFile | ForEach-Object { $appFile = $_.FullName if ($appFile -like "*.app") { $destFileName = [System.IO.Path]::GetFileName($appFile) $destFile = Join-Path $folder $destFileName if (Test-Path $destFile) { Write-Host -ForegroundColor Yellow "::WARNING::$destFileName already exists, it looks like you have multiple app files with the same name. App filenames must be unique." } Copy-Item -Path $appFile -Destination $destFile -Force $destFile } elseif ([string]::new([char[]](Get-Content $appFile @byteEncodingParam -TotalCount 2)) -eq "PK") { $tmpFolder = Join-Path ([System.IO.Path]::GetTempPath()) ([Guid]::NewGuid().ToString()) $copied = $false try { if ($appFile -notlike "*.zip") { $orgAppFile = $appFile $appFile = Join-Path ([System.IO.Path]::GetTempPath()) "$([System.IO.Path]::GetFileName($orgAppFile)).zip" Copy-Item $orgAppFile $appFile $copied = $true } Expand-Archive $appfile -DestinationPath $tmpFolder -Force CopyAppFilesToFolder -appFiles $tmpFolder -folder $folder } finally { Remove-Item -Path $tmpFolder -Recurse -Force if ($copied) { Remove-Item -Path $appFile -Force } } } } } else { Write-Host -ForegroundColor Red "::WARNING::File not found: $appFile" } } } |