从PowerShell格式化XML

Cor*_*068 2 xml powershell

我有一个PowerShell脚本,它运行一个返回XML的存储过程.然后我将XML导出到一个文件中,但是当我打开文件时,每行在结尾处有3个点,并且该行未完成.这是使用out-file.

当我使用Export-Clixml从查询返回的XML被转储到一个<props>不是我的标签之一的标签中.

我不确定从哪里开始以原始格式保存我的XML.

我使用的PowerShell脚本与此类似:

$Date = Get-Date -format "yyyyMMdd_HHmm" 
$File = "C:\Temp\MyFile"+$Date+".xml"

$Query = "exec dbo.usp_MyProc"

Invoke-Sqlcmd -Query $Query -database MyDatabase -ServerInstance MyServer | out-file $File -Encoding utf8 
Run Code Online (Sandbox Code Playgroud)

Tec*_*pud 7

假设从SQL命令返回的XML是格式良好的XML,您还可以将XML字符串推送到.net的格式(基本上是XML的漂亮打印).

function Format-XML {
  [CmdletBinding()]
  Param ([Parameter(ValueFromPipeline=$true,Mandatory=$true)][string]$xmlcontent)
  $xmldoc = New-Object -TypeName System.Xml.XmlDocument
  $xmldoc.LoadXml($xmlcontent)
  $sw = New-Object System.IO.StringWriter
  $writer = New-Object System.Xml.XmlTextwriter($sw)
  $writer.Formatting = [System.XML.Formatting]::Indented
  $xmldoc.WriteContentTo($writer)
  $sw.ToString()
}

$Date = Get-Date -format "yyyyMMdd_HHmm" 
$File = "C:\Temp\MyFile"+$Date+".xml"

$Query = "exec dbo.usp_MyProc"

Invoke-Sqlcmd -Query $Query -database MyDatabase -ServerInstance MyServer `
  | Format-XML `
  | Set-Content -Path $File -Force
Run Code Online (Sandbox Code Playgroud)

Export-CliXml 导出PowerShell XML,包括类型信息,可以从磁盘加载以补充变量 - 因此是额外的信息.

Out-File具有默认宽度,由主机PowerShell环境设置.见Get-Help Out-File -Full.

没有XML格式的示例,存储DataRow结果并选择XML列.

$Date = Get-Date -format "yyyyMMdd_HHmm" 
$File = "C:\Temp\MyFile"+$Date+".xml"

$Query = "exec dbo.usp_MyProc"

$resultRow = Invoke-Sqlcmd -Query $Query -database MyDatabase -ServerInstance MyServer


$resultRow['XMLColumn'] | Set-Content -Path $File -Force
Run Code Online (Sandbox Code Playgroud)

您显然需要使用存储过程中的列名重命名XMLColumn.