我希望能够将对象保存到文件中,然后让另一个脚本再次获取该对象并使用它。
我跑
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。