Ben*_*est 3 powershell serialization powershell-core
我有以下代码,它将一个对象导出到 XML 文件,然后将其读回并打印在信息流上。
try{
# Sample object
$Person = @{
Name = 'Bender'
Age = 'At least 1074'
}
$Person | Export-CliXml obj.xml
$cliXml = Get-Content -Raw ./obj.xml
Write-Host $cliXml
} finally {
if( Test-Path ./obj.xml ) {
Remove-Item -Force ./obj.xml -EV rError -EA SilentlyContinue
if( $rError ) {
Write-Warning "Failed to remove ./obj.xml: $($rError.Exception.Message)"
}
Remove-Variable -Force $rError -EA Continue
}
}
Run Code Online (Sandbox Code Playgroud)
有一个系统本地父会话,它监视其 STDOUT 以获取此输出,并将其重建为自己会话中的对象。
注意:我知道本地PSRemoting会话可以工作,但我需要它也可以在尚未配置或不会配置PSRemoting的系统上工作。
我想去掉中间人,而不是将对象写入磁盘。不幸的是,Import-CliXMl和Export-CliXml是名称中唯一带有 和 的 cmdlet CliXml,到目前为止,进行一些 .NET 文档调查还没有发现任何结果。
有没有一种方法可以简单地将对象序列化为 CliXml 字符串,而无需先写入磁盘?我考虑过使用,$Person | ConvertTo-Json -Compress -Depth 100但这有两个问题:
仅捕获最多 100 层的嵌套对象。这是一个边缘情况,但仍然是我想避免的限制。我总是可以使用另一个库或其他格式,但是;
我希望将它们重建为与序列化之前相同类型的 .NET 对象。使用 CliXml 重新创建对象是我知道可以做到这一点的唯一方法。
Mat*_*sen 10
[PSSerializer]CliXml 序列化器通过类公开:
$Person = @{
Name = 'Bender'
Age = 'At least 1074'
}
# produces the same XML ouput as `Export-CliXml $Person`
[System.Management.Automation.PSSerializer]::Serialize($Person)
Run Code Online (Sandbox Code Playgroud)
要反序列化 CliXml,请使用以下Deserialize方法:
$cliXml = [System.Management.Automation.PSSerializer]::Serialize($Person)
$deserializedPerson = [System.Management.Automation.PSSerializer]::Deserialize($cliXml)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |