Powershell中导入/导出时对象类型更改

时间:2012-09-24 16:26:56

标签: powershell powershell-v2.0

我现在已经打了好几个小时了,我希望有人可以帮助我指出正确的方向。

我正在开发一些自定义PowerShell cmdlet,其中一个支持类是User对象。我的几个cmdlet会发出或使用List。

到目前为止,这一点非常顺利,但是当我尝试序列化其中一个列表时,我遇到了严重的问题。出口似乎运作良好;我查看文件(csv,clixml等),它看起来像我期望的类型用户。但是,当我重新导入它时,类型似乎更改为CSV:Class.User或Deserialized.Class.User。显然,当它被送入需要标准User类的cmdlet时会导致问题。

如果有好办法解决这个问题?我怀疑更改我的cmdlet以期望一些接口而不是List可能会做到这一点,但我无法弄清楚应该是什么接口。我找不到切换到导入方法来指定类名。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

欢迎使用PowerShell的扩展类型系统。 :-)顺便说一句,当您的对象通过远程会话传递时,您还将返回仅限状态的反序列化对象。您可以查询PSObject的TypeNames集合,查找Deserialized.Class.User以确定您是否具有类型的反序列化版本。 Sames适用于CSV版本。您可以在User类上创建几个工厂方法或克隆样式构造函数,这些构造函数接受某种类型的用户(CSV或反序列化)的PSObject,然后创建常规的Class.User对象。请注意,在反序列化的情况下,某些操作可能没有意义。例如,使用Process对象作为示例,您可以在Process对象上调用Kill,如果该对象来自可以工作的同一台机器(假设正确的privs)。但是,如果你要从另一台机器上调用Kill一个进程对象,那就不行了 - 因此特殊的deserialized对象主要只是数据(属性)容器。