0

我有一个在 SQL 中执行存储过程的 powershell 脚本,它返回一个大的、单一的 XML 结果。我需要将此 XML 结果保存到文件中。

不幸的是,输出被 PowerShell 破坏,试图让事情看起来很漂亮。

 $xmldataset.tables[0] | ft -wrap -hidetableheaders | out-file C:\xml_result.xml

这将使我得到完整的结果,但它会将结果包装在它会在我的屏幕上显示它的位置。这将破坏大多数 XML 解析器。

$xmldataset.tables[0] | ft -hidetableheaders | out-file C:\xml_result.xml

这只是任意将我的结果分成两行,截断每一行。

除非我使用 -wrap ,否则它会将结果放入两行,即使它只是从 SQL 返回的一行。

这是完整的代码

$SqlCmd.CommandText = "exec dbo.sp_getXML"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$xmlDataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($xmlDataSet)

我如何才能将 SQL 的输出保存到文件中,最好也保存由 SQL 结果创建的换行符。

4

2 回答 2

0

这就是最终对我最有效的方法。

$xml = ""
for ($i=0; $i -lt $xmldataset.tables[0].rows.count; $i++){
    $xml = $xml+$xmldataset.tables[0].rows[$i][0].ToString()
}
$xml | out-file -filepath C:\Users\mvrydaghs\Documents\test_copy\xml_result.xml

因为它随机地将结果分成多行,所以我需要循环。在循环中直接写入文件仍然会引入不需要和未要求的换行符,因此我不得不使用一个附加变量进行连接,然后将其写入文件。

于 2013-02-25T18:30:30.573 回答
0

您可以像这样去掉格式:

$xmldataset.tables[0] | ft -wrap -hidetableheaders | out-string | out-file C:\xml_result.xml
于 2013-02-25T15:03:37.920 回答