О, я вижу, что вы спрашиваете, вы ищете ConvertTo-CliXml, похожий на то, как ConvertTo-Csv работает вместо Export-Csv. На первый взгляд кажется, что вы пытаетесь полностью избежать CliXml.
В этом случае есть один на PoshCode: ConvertTo-CliXml ConvertFrom-CliXml
Вот стенографическая копия, чтобы дать вам идею (я не проверил это на правильность):
function ConvertTo-CliXml {
param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
[ValidateNotNullOrEmpty()]
[PSObject[]]$InputObject
)
begin {
$type = [PSObject].Assembly.GetType('System.Management.Automation.Serializer')
$ctor = $type.GetConstructor('instance,nonpublic', $null, @([System.Xml.XmlWriter]), $null)
$sw = New-Object System.IO.StringWriter
$xw = New-Object System.Xml.XmlTextWriter $sw
$serializer = $ctor.Invoke($xw)
$method = $type.GetMethod('Serialize', 'nonpublic,instance', $null, [type[]]@([object]), $null)
$done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance')
}
process {
try {
[void]$method.Invoke($serializer, $InputObject)
} catch {
Write-Warning "Could not serialize $($InputObject.GetType()): $_"
}
}
end {
[void]$done.Invoke($serializer, @())
$sw.ToString()
$xw.Close()
$sw.Dispose()
}
}