# encoding: ascii
# api: powershell
# title: Combine-CSV Function
# description: Function will combine common .CSV files into one large file. CSV files expect to have same header.
# version: 1.0
# type: function
# author: Josh Atwell
# license: CC0
# function: Combine-CSV
# x-poshcode-id: 3676
# x-archived: 2014-05-19T02:30:24
# x-published: 2014-10-02T07:59:00
#
# This function is intended to aid when doing large reports across a large environment.
#
function Combine-CSV{
<#
.Synopsis
Combines similar CSV files into a single CSV File
.Description
Function will combine common .CSV files into one large file. CSV files should have same header.
This script is intended to aid when doing large reports across a large environment.
.Parameter SourceFolder
Specifies the folder location for the .CSV files. If no filter is applied it will combine all
.CSV files in that directory.
.Parameter Filter
Specifies any filtering used for Get-ChildItem when grabbing the list of files to be combined.
.Parameter ExportFileName
Specifies the file to have the combined .CSV files exported. The combined file will be placed
into the same directory as the SourceFolder
.Example
Combine-CSV -SourceFolder "C:\Temp\" -Filter "vcm*.csv" -ExportFileName "All-VCM.csv"
This will combine all .CSV files in directory C:\Temp\ that begin with "vcm" and
export those files to file All-VCM.csv in the same directory.
.Example
Combine-CSV -SourceFolder "C:\Temp\" -Filter "vcm*.csv"
This will combine all .CSVs that start with "vcm" and output results to screen only
since the -ExportFileName parameter is not used.
.Link
http://www.vtesseract.com
.Notes
====================================================================
Author(s):
Josh Atwell <josh.c.atwell@gmail.com> http://www.vtesseract.com/
Date: 2012-10-02
Revision: 1.0
====================================================================
Disclaimer: This script is written as best effort and provides no
warranty expressed or implied. Please contact the author(s) if you
have questions about this script before running or modifying
====================================================================
#>
param(
[Parameter(Position=0,Mandatory=$true,HelpMessage="Please provide the folder which contains your .CSV files.")]
$SourceFolder,
[Parameter(Position=1,Mandatory=$false,HelpMessage="Please provide any Get-ChildItem filter you would like to apply")]
[String]$Filter,
[Parameter(Position=2,Mandatory=$false,HelpMessage="Please provide exported CSV filename")]
[String]$ExportFileName
)
Begin{
If ($SourceFolder.EndsWith("\") -eq $false){
$SourceFolder = $SourceFolder + "\"
}
Write-Verbose "Source Folder is $SourceFolder"
If ((Test-Path $SourceFolder) -eq $True){
$files = Get-childitem -Path $SourceFolder -Filter $Filter | Sort
$count = ($files).Count
Write-Verbose "Combining $count .CSV files"
$FullText = Get-Content ($files | Select -First 1).FullName
}Else{
Write-Output "Path $SourceFolder does not exist"
}
}
Process{
foreach($file in ($files | Select -Skip 1)){
$FullText = $FullText + (Get-Content $file.FullName | Select -Skip 1)
}
}
End{
If($ExportFileName -ne ""){
$DestinationFullPath = $SourceFolder + $ExportFileName
Write-Verbose "Writing output to file $DestinationFullPath"
Set-Content -Path $DestinationFullPath -Value ($FullText)
} Else {
return $FullText
}
}
}