1

我已经反对这个几个小时了,我希望有人能帮助我指出正确的方向。

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

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

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

任何帮助将不胜感激。

4

1 回答 1

3

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

于 2012-09-24T20:05:15.633 回答