Private/Out-PASFile.ps1
function Out-PASFile { <# .SYNOPSIS Writes a Byte Array to a file .DESCRIPTION Takes a Byte Array from a web response and writes it to a file. Suggested filename from Content-Disposition Header is used for naming. .PARAMETER InputObject Content and Header properties from a web response .PARAMETER Path Output folder for the file. Defaults to $ENV:TEMP .EXAMPLE Out-PASFile -InputObject $result #> [CmdletBinding(SupportsShouldProcess)] param( [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true )] $InputObject, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true )] [string]$Path ) Begin { } Process { If (-not ($Path)) { #Default to TEMP if path not provided $Path = [Environment]::GetEnvironmentVariable("Temp") } #Get filename from Content-Disposition Header element. $FileName = ($InputObject.Headers["Content-Disposition"] -split "filename=")[1] -replace '"' #Define output path $OutputPath = Join-Path $Path $FileName if ($PSCmdlet.ShouldProcess($OutputPath, "Save File")) { try { #Command Parameters $output = @{ Path = $OutputPath Value = $InputObject.Content Encoding = "Byte" } If (Test-IsCoreCLR) { #amend parameters for splatting if we are in Core $output.Add("AsByteStream", $true) $output.Remove("Encoding") } #write file Set-Content @output -ErrorAction Stop #return file object Get-Item -Path $OutputPath } catch { #throw the error $PSCmdlet.ThrowTerminatingError( [System.Management.Automation.ErrorRecord]::new( "Error Saving $OutputPath", $null, [System.Management.Automation.ErrorCategory]::NotSpecified, $PSItem ) ) } } } End { } } |