Enrique yesterday at 07:35. 1 answers, 0 views

I have the following PowerShell script I am looking to add a header to this results without having a duplicate per each iteration but I am not familiar enough with Powershell if anyone can point me in the right direction it would be helpful.

$servers = 'E:\DBA\servers.txt'$outfile = 'E:\DBA\out.csv' $queryfile = 'E:\DBA\query.sql' Get-Content$servers -First 1 | ForEach-Object {Invoke-SqlCmd -inputfile $queryfile -ServerInstance$_ -Database master | ConvertTo-CSV -NoTypeInformation | Select-Object -First 1 | Out-File $outFile -Force} Get-Content$servers | ForEach-Object {Invoke-SqlCmd -inputfile $queryfile -ServerInstance$_ -Database master | ConvertTo-CSV -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append $outFile} The error is ### 1 Answers Scott Hodgin 07/25/2017. If you just want to hard-code the header, you can use the Powershell New-Item cmdlet. I used the -Force parameter to initialize the outfile with the single header row and the rest of your script uses -Append to add the detail information. New-Item$outfile -value "Header,Header,Header,Headern" -Force
Get-Content $servers | ForEach-Object {Invoke-SqlCmd -inputfile$queryfile -ServerInstance $_ -Database master | ConvertTo-CSV -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append$outFile}

If you want dynamic columns generated based on the actual query, you can run an initial Get-Content using -First 1 (to only get the first server) and limit the output to the first row only by using -First 1. Then, follow up with your usual Powershell script.

Get-Content $servers -First 1 | ForEach-Object {Invoke-SqlCmd -inputfile$queryfile -ServerInstance $_ -Database master | ConvertTo-CSV -NoTypeInformation | Select-Object -First 1 | Out-File$outFile -Force}
Get-Content $servers | ForEach-Object {Invoke-SqlCmd -inputfile$queryfile -ServerInstance $_ -Database master | ConvertTo-CSV -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append$outFile}`