【问题标题】:Types in PowerShell 2 modulesPowerShell 2 模块中的类型
【发布时间】:2011-01-14 16:27:41
【问题描述】:

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

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

在卸载模块时,我可以用某种方式删除类型吗?或者我应该忽略Add-Type 的潜在错误,以便至少能够在从会话中删除后重新添加模块?我宁愿避免在其中放置一个 DLL(对于那个小模块来说,无论如何可能是矫枉过正)。

【问题讨论】:

    标签: powershell module types


    【解决方案1】:

    Remove-Module 上的文档还说程序集未卸载。这是 .NET 和 CLR 的一个基本问题。一旦程序集被加载到 AppDomain 中,它就不能被卸载。因此,创建自己的 DLL(托管程序集)不会有帮助。

    我不确定除了避免使用 Add-Type 和使用 new-object psobject -prop @{...}$obj.psobject.typenames.insert(0, 'newtypename') 创建自定义类型之外,您还能做些什么。

    【讨论】:

    • 嗯,至少学到了一些新东西。不知道PSObjects 有这种魔力。我创建一个新类型的主要原因是控制格式(通过ps1xml 文件)并具有比PSObject 更好的类型名称。但显然这同样有效,只是感觉有点 hackish :-) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多