0

我是 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,但这只是返回上面命令返回的每个字符串的长度,就像这个问题一样:Export csv sps out length only

我已经尝试过group-object,但我正在努力让它发挥作用。如果有人可以在概念上解释我正在尝试用一些明确的指导方针做什么,那将不胜感激。

4

2 回答 2

0

我认为您正在寻找的是 -NoTypeInformation 开关。

$results | export.csv $FilePathOfCSV -NoTypeInformation

-NoTypeInformation 是一个从输出的 CSV 文件中省略类型信息的开关。CSV 的第一行包含类型,后跟它正在使用的 .NET 框架对象的全名。

这应该会给你一个结构化的 CSV 输出。

希望它有效!

于 2013-05-27T18:49:35.003 回答
0

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包含以下内容的文件:

"c","a","b"
"baz","foo","bar"

属性名称 ( a, b, c) 成为 CSV 标题,属性值 ( foo, bar, baz) 成为 CSV 值。

如果您的 SQL 查询生成一个数组列表,您可能必须执行以下操作:

Invoke-Sqlcmd ... | % {
  New-Object -Type PSCustomObject -Property @{
    "col1" = $_[0]
    "col2" = $_[1]
    "col3" = $_[2]
  }
} | Export-Csv output.csv -NoTypeInformation

不过,我手头没有 SQL 服务器,所以请谨慎对待。

于 2013-05-27T19:07:59.530 回答