PowerShell 2模块中的类型

Joe*_*oey 4 powershell types module

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

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

在卸载模块时,有什么东西可以挂钩去除某种类型的类型?或者我应该忽略潜在的错误Add-Type,至少能够在从会话中删除后重新添加模块?我宁愿避免在那里放一个DLL(无论如何对于那个小模块来说可能有点过分).

Kei*_*ill 6

文档Remove-Module还说组件没有卸载.这是.NET和CLR的基本问题.将程序集加载到AppDomain后,就无法卸载它.因此,创建自己的DLL(托管程序集)无济于事.

我不确定你能做多少事情就是避免Add-Type并使用new-object psobject -prop @{...}和创建自定义类型$obj.psobject.typenames.insert(0, 'newtypename').