将 .Net 枚举导入到 PowerShell 脚本中

Man*_*que 7 .net powershell

希望我能在一个明确的问题中解释这一点以避免混淆(因为我自己也有点困惑)。
我有一个 dll,我将调用 MyCommonStuff。我在此程序集中的模块中定义了一个枚举对象:

MyCommonStuff\Enums\ImportEnum.cs
Run Code Online (Sandbox Code Playgroud)

像这样:

namespace MyCommonStuff.ImportEnum
{
    public enum ImportType
    {
        Blah1 = 0,
        Blah2 = 1,
        Blah3 = 2
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在运行时将它导入到 PowerShell 脚本中,以避免必须手动复制它,并且在它应该更改时必须同步它。
有人可以启发我如何解决这个问题吗?

Zac*_*ach 7

我试图做类似的事情,但是在自定义 cmdlet 中定义了我的枚举,它的工作方式似乎有所不同。使用提供的示例(并假设枚举隐藏在扩展 PSCmdlet 的类中),您需要在 powershell 脚本/cmd 窗口中执行以下操作:

Import-Module "Path to dll"

$Blah1 = [MyCommonStuff.ImportEnum.ClassName+ImportType]::Blah1
Run Code Online (Sandbox Code Playgroud)

出于某种原因,您使用“+”而不是“。” 引用枚举值


Col*_*337 3

这是我预见解决您的解决方案的一种可能方法。您可以创建一个由 powershell 自动加载的模块,该模块会为您添加类型。

要创建模块,请打开 powershell ISE 并输入以下代码:

$Path = "path to dll"
Add-Type -Path $Path
Run Code Online (Sandbox Code Playgroud)

将“模块”另存为 .psm1 文件,而不是脚本,并将其命名为简单但信息丰富的名称。然后,您将在“C:\Windows\System32\WindowsPowerShell\v1.0\Modules”中创建一个与 psm1 文件名称完全相同的新目录。将 psm1 文件放入其中,然后启动一个新的 powershell 窗口。

您现在应该能够像这样访问您的枚举:

[MyCommonStuff.ImportEnum.ImportType]::Blah1
Run Code Online (Sandbox Code Playgroud)

我建议使用这一模块来包含所有自定义类型、对象、cmdlet、函数等,以便它们都位于同一位置。如果这样做,请检查Export-ModuleMembercmdlet,因为您可能会需要它。