FOR XML EXPLICITで終わるストアドプロシージャがあり、xmlファイルをフォルダーに配置する必要があります。
次のPowerShellを設定し、2つのパラメーターを提供するスクリプトを実行しました。
スクリプトの名前はxml.ps1です。
./xml "xml" "c:\test.xml"
param
(
[string]$outputType,
[string]$filename
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=SLISQL;Database=Development_App;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "dbo._REX_NewSP"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
if ($outputType -eq "Text")
{
$DataSet.Tables[0] | format-table -auto > $filename
}
if ($outputType -eq "xml")
{
$DataSet.Tables[0] |Export-Clixml $filename
}
PowerShell画面にxml出力が表示されますが、text.xmlファイルが出力されません。
私はあなたのPSを関数にして、呼び出しを変更し、それをPS ISEで実行しましたが、テストで問題なく動作し、データをその場所に出力しました。 C:ドライブのルートに書き込む機能があることを確認します。通常、これには管理者権限が必要です。エラーをどこかに飲み込んでいる可能性があります。
function ProcToXmlFile {
param
(
[string]$outputType,
[string]$filename
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=localhost;Database=master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sys.databases for XML AUTO"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
if ($outputType -eq "Text")
{
$DataSet.Tables[0] | format-table -auto > $filename
}
if ($outputType -eq "xml")
{
$DataSet.Tables[0] |Export-Clixml $filename
}
}
ProcToXmlFile "xml" "c:\temp\test.xml"
次の内容で正しい場所にファイルを作成しました。
<Objs Version="1.1.0.1" xmlns="http://schemas.Microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Data.DataRow</T>
<T>System.Object</T>
</TN>
<ToString>System.Data.DataRow</ToString>
<Props>
<S N="XML_F52E2B61-18A1-11d1-B105-00805F49916B"><sys.databases name="master"/><sys.databases name="tempdb"/><sys.databases name="model"/><sys.databases name="msdb"/><sys.databases name="HealthCheck"/><sys.databases name="RestoreAttachTEST"/></S>
</Props>
</Obj>
</Objs>
これは、ヘッダーをファイルに書き込み、次に生成されるXMLデータだけを書き込む、更新されたバージョン(少しハッキーです)です。これがあなたに少し近づくかどうか見てください。
function ProcToXmlFile {
param
(
[string]$outputType,
[string]$filename
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=localhost\sql16;Database=master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sys.databases for XML AUTO"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0] | Format-Wide -AutoSize
$Headerstring = '<?xml version="1.0" encoding="UTF-8?>'
$Headerstring | Out-File $filename
if ($outputType -eq "Text")
{
$DataSet.Tables[0] | Format-Table -HideTableHeaders | out-file $filename -Width 5000 -Append
}
if ($outputType -eq "xml")
{
$DataSet.Tables[0] |Export-Clixml $filename
}
}
ProcToXmlFile "text" "c:\temp\test.xml"
これは昔のことだと思いますが、同じものを探していました。投稿された「回答」は質問に対応していなかったので、結局使用していたものと同様のものを投稿することにしました。
/xml "xml" "c:\test.xml"
param
(
[string]$outputType,
[string]$filename
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=SLISQL;Database=Development_App;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "dbo._REX_NewSP"
$SqlCmd.Connection = $SqlConnection
$SqlTable = New-Object System.Data.DataTable
$SqlTable.Load($SqlCmd.ExecuteReader())
$SqlConnection.Close()
if (0 -lt $SqlTable.Rows.Count)
{
$Headerstring = '<?xml version="1.0" encoding="UTF-8?>'
$Headerstring | Out-File $filename -Encoding UTF8
foreach ($XML in $SqlTable.Rows)
{
Out-File -FilePath $filename -Append -Width 1000000000 -NoNewline -InputObject $XML.{XML_F52E2B61-18A1-11d1-B105-00805F49916B}
}
}