PowerShell 2模块中的类型

PowerShell 2模块中的类型,powershell,module,types,Powershell,Module,Types,我已经实现了一个小的PowerShell模块,它带来了一个自定义类型。我将.psm1文件中的类型定义为C类,并使用addtype添加了它。现在,当我添加模块并再次删除它时,类型仍然存在,这可能不太正确(例如,它阻止重新添加模块)。Remove Module的文档说明,在模块加载的程序集中定义的类型也将被卸载。但我的模块并没有引入程序集,只是源代码形式中的一种很小的类型 我可以将该类型放入自己的DLL中,并将其标记为要加载到模块清单中的程序集,但我喜欢当前所有源代码都是可见的。将DLL与模块一起分

我已经实现了一个小的PowerShell模块,它带来了一个自定义类型。我将
.psm1
文件中的类型定义为C类,并使用
addtype
添加了它。现在,当我添加模块并再次删除它时,类型仍然存在,这可能不太正确(例如,它阻止重新添加模块)。
Remove Module
的文档说明,在模块加载的程序集中定义的类型也将被卸载。但我的模块并没有引入程序集,只是源代码形式中的一种很小的类型

我可以将该类型放入自己的DLL中,并将其标记为要加载到模块清单中的程序集,但我喜欢当前所有源代码都是可见的。将DLL与模块一起分发可能会让人怀疑它为什么需要一个可执行文件


在卸载模块时,是否有什么东西可以挂在上面以某种方式删除类型?或者我应该忽略
Add Type
的潜在错误,以便在从会话中删除模块后至少能够重新添加模块?我宁愿避免将DLL放在那里(对于那个小模块来说,可能有点过头了)。

关于
删除模块的文档也说程序集没有卸载。这是.NET和CLR的一个基本问题。程序集加载到AppDomain后,将无法卸载。因此,创建自己的DLL(托管程序集)不会有帮助


我不确定除了避免添加类型和使用
新对象psobject-prop@{…}
$obj.psobject.typenames.insert(0,'newtypename')创建自定义类型之外,您还能做什么。我不知道
PSObject
s有那种魔力。我创建一个新类型的主要原因是控制格式(通过
ps1xml
文件),并且具有比
PSObject
更好的类型名。但很明显,这也很有效,只是感觉有点不舒服:-)谢谢。