Powershell Export-Clixml 对象操作

Powershell Export-Clixml 对象操作

我希望能够将对象保存到文件中,然后让另一个脚本再次获取该对象并使用它。

我跑

Export-Clixml -InputObject $object -Encoding UTF8 -Path $file

将对象保存到文件,但如果我运行

$object = Import-Clixml $file

我无法像以前一样操纵物体。

描述我的问题的示例代码:

#script 1
$objecttofromFile = new-object -com "Microsoft.Update.UpdateColl"
foreach ($herp in $derp) {
    # do stuff, then 
    $null = $objecttofromFile.Add($herp)
}
######## stop, save to file #########
#save shiny UpdateColl object to file
Export-Clixml -InputObject $objecttofromFile -Encoding UTF8 -Path $file

然后..

#script 2
$objecttofromFile = Import-Clixml $file
###### start again ######
#assuming object is now a microsoft.update.updatecoll object
$downloader = (new-object -com "Microsoft.Update.Session").CreateUpdateDownloader()
$downloader.Updates = $objecttofromFile #WRONG

我收到的错误是Exception setting "Updates": "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))",但我认为从文件导出和导入对象可以保持原来的对象类型。

如果我将上述代码放入 1 个文件中,删除哈希线之间的内容,代码就会呈现。但如果我在脚本之间保存并恢复,就会失败。

我是不是忽略了一些愚蠢的事情?

答案1

您没有遗漏任何东西。export-clixml/import-clixml 仅导出属性(即没有方法),并且导入的对象类型略有不同。

以下代码可以说明该问题:

$a=dir c:\temp\blogs.html
$a.PSObject.TypeNames
$a | Export-Clixml C:\temp\file.xml

$b=import-clixml c:\temp\file.xml
$b.PSObject.TypeNames

请注意,$a 是 System.IO.FileInfo,但 $b 是 Deserialized.System.IO.FileInfo。

相关内容