Powershell med SQL inkl Join = Export till Excel

Permalänk

Powershell med SQL inkl Join = Export till Excel

Hej

Lär mig lite Powershell för jobbets räkning där jag ska hämta dels från en csv fil och från vår sql databas och joina två tabellers data.

Allt går hyfsat men har två problem. Börjar med den första.

Koden för att hämta och joina samt exportera till Excel nedan:

$joinTable = "JOIN xxxx AS Stocks ON Item.[DocNBR] = xxxx" $colHeaders = "[ManufacturerItemNo], [Brand], [Description], '' AS [Order Quantity], [Available], '' AS [Order Quantity < Available?]" $getSQLRows = Invoke-Sqlcmd -Query "SELECT $($colHeaders) FROM xxxx AS Item $joinTable WHERE [ManufacturerItemNo]='$($addToWhere)' $($addOr)" -ServerInstance "xxxx" -Username "xxxx" -Password "xxxx" $count = 0 foreach ($rows in $objectsInCSV){ $getSQLRows[$count].'Order Quantity' = $objectsInCSV[$count].Quantity if($objectsInCSV[$count].Quantity -lt $getSQLRows[$count].Available){ $getSQLRows[$count].'Order Quantity < Available?' = "True" } else{ $getSQLRows[$count].'Order Quantity < Available?' = "False" } $count++ } $getSQLRows | Export-Excel -Path 'C:\Projekt_Lokalt\PS Övningar\Excel.xlsx' -Show

Modulen för Excel export är från --> https://github.com/dfinke/ImportExcel

Problemet är när jag exporterar kommer flera osynliga columner me i excel filen. Förstår att dessa kommer från sql men dessa finns ej i select resultatet?

Mvh Fredrik

Visa signatur

Computer: Windows 11, 64-bit, Intel 285k, MSI MEG Z890 Ace, 64GB RAM,
MSI GeForce RTX 5080 16GB Vanguard SOC Launch

Permalänk
Medlem

Kul att du tittar på att lära dig lite Powershell!

Det du försöker åstadkomma borde inte vara något jättesvårt. Det är inte ovanligt att man behöver tvätta data som man plockar ut.
Jag tycker själv det är enklast att tvätta data i den array man har datat i. Så mitt första tips, utan att veta mer, är att gör en output i konsollen i Powershell, gör stickprov på förväntad data osv.

Men för att gå hjälpa dig vidare så skulle jag behöva ett exempeluttag av datat från $getSQLRows innan du matchar den mot din CSV.
Jag tolkar att du har en viss uppsättning med information i CSV:n som du stoppar in i array:en som du plockat ut från Invoke-Sqlcmd?

Jag skulle spontant använda mig av variablerna för $true och $false istället för strängar för då jag upplever att det blir mer flexibelt.

Till skillnad mot vad Powershell gör bäst, att managera system och tjänster, så kan man ju också göra datahantering vilket du gör här men jag tycker det är ganska svårt att tänka mig in i vad du försöker göra med det data du har osv.
Lättare att räkna ut förväntat resultat av t ex Get-PSDrive

Visa signatur

🟢 Main: R9 9900X3D | Strix B850-I | 64GB | RX9070 | Samsung C49RG9
🔵 unRaid: Ryzen5 2700X | B450M DS3H | 32GB
🟠 Tfn: Google Pixel 7 Lime Green

-:| @ eller citera för svar |:-

Permalänk
Medlem

Lös ett problem i taget, dvs ta först ut SQL-frågan och kör den själv i lämpligt SQL-verktyg mot databasen. SSMS för SQL Server osv.

'' AS [Order Quantity]
och liknande kommer nog inte producera det du vill.

Meckla med frågan tills den fungerar och skriv sedan om scriptet så att det genererar en fungerande fråga.

Det blir nog lättare att få hjälp om du skriver ut den producerade frågan, inte något som läsaren måste parsa i huvudet eller köra genom PowerShell (som i alla fall inte finns på min dator...).