Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将.Net枚举导入PowerShell脚本_Powershell_.net - Fatal编程技术网

将.Net枚举导入PowerShell脚本

将.Net枚举导入PowerShell脚本,powershell,.net,Powershell,.net,希望我能用一个清晰的问题来解释这一点,以避免混淆(因为我自己也有点困惑)。 我有一个动态链接库,我会调用它。我在此程序集中的模块中定义了一个枚举对象: MyCommonStuff\Enums\ImportEnum.cs 像这样: namespace MyCommonStuff.ImportEnum { public enum ImportType { Blah1 = 0, Blah2 = 1, Blah3 = 2 } }

希望我能用一个清晰的问题来解释这一点,以避免混淆(因为我自己也有点困惑)。
我有一个动态链接库,我会调用它。我在此程序集中的模块中定义了一个枚举对象:

MyCommonStuff\Enums\ImportEnum.cs
像这样:

namespace MyCommonStuff.ImportEnum
{
    public enum ImportType
    {
        Blah1 = 0,
        Blah2 = 1,
        Blah3 = 2
    }
}
我希望在运行时将其导入到PowerShell脚本中,以避免手动复制它,并在发生更改时对其进行同步。

有人能告诉我怎么做吗?

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

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

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

您现在应该可以像这样访问您的枚举:

[MyCommonStuff.ImportEnum.ImportType]::Blah1

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

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

Import-Module "Path to dll"

$Blah1 = [MyCommonStuff.ImportEnum.ClassName+ImportType]::Blah1

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

这正是使其工作所需的,需要“+”来引用枚举,说明“+”来自何处。