我是Powershell的初学者,它尝试查询SQL Server数据库并以组织行和列的文件形式输出csv。我可以使用以下命令部分实现此目的:
sqlps -Command Invoke-Sqlcmd -ServerInstance "xxx.xx.xxx.xxx" -Database "xxxx" -InputFile "xxx" | out-file -filepath "xxxx"
我的问题是查询的输出不会出现在行和列中,而是将每一行作为字符串列表分组在一起,每个单元格一个字符串。例如:
column a: value 1 column b: value 1 column c: value 1 column a: value 2 column b: value 2 column c: value 2
我也尝试过使用export-csv,但是这只是返回上述命令返回的每个字符串的长度,就像这个问题一样:导出csv仅吐出长度
export-csv
我尝试了group-object,但是我正在努力使其正常运行。如果有人可以从概念上解释我正在尝试使用一些明确的准则做什么,将不胜感激。
group-object
Export-Csv期望输入是对象。字符串输入被视为只有一个属性(Length)的字符串对象,因此仅导出此属性。如果您的输入是字符串数组,则需要使其成为一个对象,例如:
Export-Csv
Length
$array = "foo", "bar", "baz" New-Object -Type PSCustomObject -Property @{ "a" = $array[0] "b" = $array[1] "c" = $array[2] } | Export-Csv output.csv -NoTypeInformation
上面的代码将创建一个output.csv包含以下内容的文件:
output.csv
"c","a","b" "baz","foo","bar"
属性名(a,b,c)都成为CSV头,属性值(foo,bar,baz)成为CSV值。
a
b
c
foo
bar
baz
如果您的SQL查询生成数组列表,则可能必须执行以下操作:
Invoke-Sqlcmd ... | % { New-Object -Type PSCustomObject -Property @{ "col1" = $_[0] "col2" = $_[1] "col3" = $_[2] } } | Export-Csv output.csv -NoTypeInformation
不过,我手头没有SQL Server,因此请耐心等待。