将.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
出于某种原因,您使用“+”而不是“.”来引用枚举值这正是使其工作所需的,需要“+”来引用枚举,说明“+”来自何处。