为 Invoke-Command 序列化 PsObject
Serializing PsObject for Invoke-Command
我正在寻找使用 Invoke-Command 将 PsObject 传递给远程函数的最佳或正确方法。 ConvertTo-Xml 适用于序列化,但没有内置的反向 cmdlet。我在网上找到的解决方案都是针对特定内容的。
我实现了以下功能,这些功能适用于我测试过的几个对象,但看起来很老套。这是要咬我吗?有更好但仍然简单的解决方案吗?
function Get-TmpFileName () {...}
function Serialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
Export-Clixml -InputObject $obj -Path $tmpFile
$serializedObj = Get-Content $tmpFile
Remove-Item $tmpFile
$serializedObj
}
function Deserialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
$obj > $tmpFile
$deserializedObj = Import-Clixml $tmpFile
Remove-Item $tmpFile
$deserializedObj
}
你试过了吗ConvertTo-JSON?
您是否知道 PowerShell 已经序列化了通过 Invoke-Command
发送的对象?
如果出于某种原因这还不够或不适合您,那么您可以自己直接使用内置序列化:
$clixml = [System.Management.Automation.PSSerializer]::Serialize($object)
$object = [System.Management.Automation.PSSerializer]::Deserialize($clixml)
.Serialize
有一个重载,您可以在其中指定深度(对于对象中的对象)。
这些是用于实施 Export-Clixml
和 Import-Clixml
的相同方法(但这些 cmdlet 直接使用文件而不是字符串)。
我正在寻找使用 Invoke-Command 将 PsObject 传递给远程函数的最佳或正确方法。 ConvertTo-Xml 适用于序列化,但没有内置的反向 cmdlet。我在网上找到的解决方案都是针对特定内容的。
我实现了以下功能,这些功能适用于我测试过的几个对象,但看起来很老套。这是要咬我吗?有更好但仍然简单的解决方案吗?
function Get-TmpFileName () {...}
function Serialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
Export-Clixml -InputObject $obj -Path $tmpFile
$serializedObj = Get-Content $tmpFile
Remove-Item $tmpFile
$serializedObj
}
function Deserialize-PsObject($obj) {
$tmpFile = Get-TmpFileName
$obj > $tmpFile
$deserializedObj = Import-Clixml $tmpFile
Remove-Item $tmpFile
$deserializedObj
}
你试过了吗ConvertTo-JSON?
您是否知道 PowerShell 已经序列化了通过 Invoke-Command
发送的对象?
如果出于某种原因这还不够或不适合您,那么您可以自己直接使用内置序列化:
$clixml = [System.Management.Automation.PSSerializer]::Serialize($object)
$object = [System.Management.Automation.PSSerializer]::Deserialize($clixml)
.Serialize
有一个重载,您可以在其中指定深度(对于对象中的对象)。
这些是用于实施 Export-Clixml
和 Import-Clixml
的相同方法(但这些 cmdlet 直接使用文件而不是字符串)。