modules/Utilities/private/Export-ObjectToFile.ps1
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. function Export-ObjectToFile { <# .SYNOPSIS Save an object to a file in a consistent format. #> [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [Object[]]$Object, [Parameter(Mandatory = $true)] [System.IO.FileInfo]$FilePath, [Parameter(Mandatory = $false)] [System.String]$Prefix, [Parameter(Mandatory = $true)] [System.String]$Name, [Parameter(Mandatory = $false)] [ValidateSet("json","csv","txt")] [System.String]$FileType = "json", [Parameter(Mandatory = $false)] [ValidateSet("Table","List")] [System.String]$Format ) begin { $arrayList = [System.Collections.ArrayList]::new() } process { foreach ($obj in $Object) { [void]$arrayList.add($obj) } } end { try { # build the file directory and name that will be used to export the object out if($Prefix){ [System.String]$formattedFileName = "{0}\{1}_{2}.{3}" -f $FilePath.FullName, $Prefix, $Name, $FileType } else { [System.String]$formattedFileName = "{0}\{1}.{2}" -f $FilePath.FullName, $Name, $FileType } [System.IO.FileInfo]$fileName = $formattedFileName # create the parent directory structure if does not already exist if(!(Test-Path -Path $fileName.Directory -PathType Container)){ "Creating directory {0}" -f $fileName.Directory | Trace-Output -Level:Verbose $null = New-Item -Path $fileName.Directory -ItemType Directory } "Creating file {0}" -f $fileName | Trace-Output -Level:Verbose switch($FileType){ "json" { $arrayList | ConvertTo-Json -Depth 10 | Out-File -FilePath $fileName } "csv" { $arrayList | Export-Csv -NoTypeInformation -Path $fileName } "txt" { switch($Format){ 'Table' { $arrayList | Format-Table -AutoSize | Out-String -Width 4096 | Out-File -FilePath $fileName } 'List' { $arrayList | Format-List -Property * | Out-File -FilePath $fileName } default { $arrayList | Out-File -FilePath $fileName } } } } } catch { "{0}`n{1}" -f $_.Exception, $_.ScriptStackTrace | Trace-Output -Level:Error } } } |