Hallo allseits,
ich konnte mein Problem zwar selbst lösen, warum aber meine ersten Versuche dazu nicht klappten, kann ich nicht sagen, da hab ich rundherum noch einige Verständnisprobleme - wäre nett, wenn mir da jemand etwas weiterhelfen könnte. Der Reihe nach:
Ich habe ein Script geschrieben, welches Daten aus einer DB (Netezza, eine Fremd-DB von IBM) ausliest, und diese Daten in ein Excel schreibt. Mein erster Versuch, der die Daten mal nur in ein CSV schreibt, sieht so aus:
[code]function Get-ODBC-Data{
param(
[string]$query=$(throw 'sql-query is required.'),
[string]$dsn
)
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DSN=$dsn;"
try
{
$conn.open()
$cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)
$ds = New-Object system.Data.DataSet
(New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
$conn.close()
}
catch
{
$fehler = $_
Write-Host ("### ABGEFANGENER FEHLER: " + $_.Exception.Message) -ForegroundColor yellow
}
# Zurückgegeben wird das DataSet
$ds.Tables[0]
}
# Daten von Netezza abholen und in CSV-File schreiben ...
$sqlCommand="select * from bdv.BAD_DATA_REPORT_V order by 1,2,3"
Get-ODBC-Data $sqlCommand "NZSQL" | Export-CSV -Path "C:\File01.csv" -NoTypeInformation[/code]
Das geschriebene CSV sieht gleich wirklich gut aus, ich bekomme die Daten genau so, wie ich sie dann auch im Excel haben will. Hier ein kurzer Auszug der erzeugten Datei file01.csv
[code]"STP","MDIF","FELD","WERT","KOMMENTAR","MDIF_PAKET","IMPORTZEIT"
"INPVS","VSSTAMMJAHR","vsPersID","","Mandatory Felder nicht bef?llt","INPVS_VSStammJahr_HVB_1_1_32_20200626_20200626.mdif","02.07.2020 12:25:07"
"INPVS","VSSTAMMJAHR","vsPersID","","Mandatory Felder nicht bef?llt","INPVS_VSStammJahr_HVB_1_1_32_20200703_20200703.mdif","08.07.2020 12:58:13
......."[/code]
Die erste Zeile ist die HeaderZeile mit den DB-Feldnamen, dann kommen die Daten, genau so will ich das auch. Also nur noch "Export-CSV" durch "Export-Excel" ersetzen, dann müsste ja alles richtig funktionieren. Also so:
Get-ODBC-Data $sqlCommand "NZSQL" | Export-Excel -Path "C:\File01.xlsx"
Das erzeugt mir aber einige *zusätzliche* Spalten (RowError, RowState, Table, ItemArray, HasErrors). Ich sehe diese zusätzlichen Spalten auch NICHT, wenn ich folgendes ausprobiere:
(Get-ODBC-Data $sqlCommand "NZSQL")[0]
Ich habe dann versucht, nur mehr die benötigten Spalten (woher kommen RowError usw.??) mittels "Format-Table" zu selektieren, also so:
Get-ODBC-Data $sqlCommand "NZSQL" | ft STP, MDIF, FELD | Export-Excel -Path "C:\File01.xlsx"
Das aber dürfte komplett falsch sein, da bekomme ich in's generierte Excel nur mehr "interne Klasseninformationen" und nichts von meinen Daten ...
Die Lösung dieses Problems hab ich dann im Netz gefunden, richtig funktioniert's mit "Select-Object", also so:
[code]Get-ODBC-Data $sqlCommand "NZSQL" |
Select-Object * -ExcludeProperty RowError, RowState, Table, ItemArray, HasErrors |
Export-Excel -Path "C:\\File01.xlsx"[/code]
Die Fragen die ich da habe:
- Woher kommen die überzähligen Felder, die ich beispielsweise bei (Get-ODBC-Data $sqlCommand "NZSQL")[0] NICHT habe, her?
- Warum funktioniert mein erster Ansatz mit "Format-Table" nicht, bzw. was bekomme ich da eigentlich angezeigt?