我有一个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)
假设从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.
| 归档时间: |
|
| 查看次数: |
6136 次 |
| 最近记录: |