我有一个powershell脚本,它在SQL中执行存储过程,返回一个大的单个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结果创建的换行符。
答案 0 :(得分:0)
你可以删除这样的格式:
$xmldataset.tables[0] | ft -wrap -hidetableheaders | out-string | out-file C:\xml_result.xml
答案 1 :(得分: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
由于它将结果随机分成多行,我需要循环。直接写入循环中的文件仍然会引入不需要的和未挂起的换行符,所以我不得不使用一个额外的变量进行连接,然后将其写入文件。