Private/Csv.ps1
|
#Requires -Version 5.1 function Get-SMBeatExportStamp { param( [datetime]$When ) if ($PSBoundParameters.ContainsKey('When') -eq $false) { $When = Get-Date } $When.ToString('yyyy-MM-dd-HHmmss', $script:SMBeatInvariant) } function ConvertTo-SMBeatCsvText { param( [AllowEmptyCollection()] [object[]]$InputObject, [Parameter(Mandatory = $true)] [ValidateSet('de', 'en')] [string]$CsvCulture ) if ($null -eq $InputObject -or $InputObject.Count -eq 0) { return '' } $culture = $script:SMBeatInvariant $delimiter = ',' if ($CsvCulture -eq 'de') { $culture = [System.Globalization.CultureInfo]::GetCultureInfo('de-DE') $delimiter = ';' } else { $culture = [System.Globalization.CultureInfo]::GetCultureInfo('en-US') } $old = [System.Threading.Thread]::CurrentThread.CurrentCulture try { [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture $InputObject | ConvertTo-Csv -NoTypeInformation -Delimiter $delimiter | Out-String } finally { [System.Threading.Thread]::CurrentThread.CurrentCulture = $old } } function Write-SMBeatCsvFile { param( [Parameter(Mandatory = $true)] [string]$Path, [AllowEmptyCollection()] [object[]]$InputObject, [ValidateSet('de', 'en')] [string]$CsvCulture ) $text = ConvertTo-SMBeatCsvText -InputObject $InputObject -CsvCulture $CsvCulture $utf8Bom = New-Object System.Text.UTF8Encoding $true $dir = Split-Path -Parent $Path if ($dir -and -not (Test-Path -LiteralPath $dir)) { New-Item -ItemType Directory -Path $dir -Force | Out-Null } [System.IO.File]::WriteAllText($Path, $text, $utf8Bom) } |