It’s been a while since I’ve posted any PowerShell code. I had to write a quick script today to run some SQL, save the output to CSV, then ZIP the CSV file. And I had to loop through and the run SQL multiple times, one for each month from January 2021 until today.
That forced me to look up some stuff that I didn’t know how to do in PowerShell, off the top of my head. (In fact, most of it was stuff I didn’t know off the top of my head. I don’t use PowerShell enough to remember anything…) So here’s an edited version of the script, simplified somewhat. It might come in handy some time, if I ever need to do this again.
# CustInvAll-export.ps1 #Requires -Version 7 #Requires -Modules SqlServer $dateFmt = 'yyyy-MM-dd' $sqlServer = "MyServer" $dbName = "myDB" $curDate = [DateTime]::Today $startDate = [DateTime]'01/01/2021' while ($startDate -lt $curDate) { $endDate = $startDate.AddMonths(1) $startDateFmt = $startDate.ToString($dateFmt) $endDateFmt = $endDate.ToString($dateFmt) $exportSQL = @" SELECT * FROM MyTable where [INVOICEDATE] >= '$startDateFmt' and [INVOICEDATE] < '$endDateFmt' "@ $exportFile = "CustInvAll-$startDateFmt.csv" $exportFileZip = "CustInvAll-$startDateFmt-csv.zip" echo "Exporting from $startDateFmt to $EndDateFmt to file $exportFile" # Invoke-Sqlcmd -ServerInstance $sqlServer -Database $dbName -Query $exportSQL ` # | Export-CSV -Path $exportFile -NoTypeInformation -UseQuotes AsNeeded # Compress-Archive -LiteralPath $exportFile -DestinationPath $exportFileZip $startDate = $endDate }
It can also be found in a Gist.