2013-02-25 41 views
0

我有一個PowerShell腳本,它執行SQL中的存儲過程,它將返回一個大的單一XML結果。我需要將這個XML結果保存到一個文件中。PowerShell,格式化來自SQL的大型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保存到一個文件,preferrably保存在SQL結果創建以及換行符。

回答

0

可以去掉的格式是這樣的:

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

不幸的是,這仍然增加了linebreaks。如果在控制檯中顯示結果(它根據窗口大小而變化),它似乎會將它們添加到通常添加它們的地方。 – coreno 2013-02-25 15:16:40

+0

這就是格式表所做的。如果您只想將輸出保存到文件中,請直接將其輸出到設置內容,而不需要間隔。 – mjolinor 2013-02-25 15:22:16

+0

我正在做格式表,因爲否則它包括頭部並將數據結果分成兩行。 – coreno 2013-02-25 15:52:38

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 

由於它隨機地將結果分解成多行,我需要循環。直接寫入循環中的文件仍然引入了不需要的和不需要的換行符,所以我必須使用一個額外的變量進行連接,然後將其寫入文件。