希望我能在一个明确的问题中解释这一点以避免混淆(因为我自己有点困惑) 我有一个DLL,我会打电话给MyCommonStuff。我在这个程序集的模块中定义了一个枚举对象:
MyCommonStuff\Enums\ImportEnum.cs
像这样:
namespace MyCommonStuff.ImportEnum
{
public enum ImportType
{
Blah1 = 0,
Blah2 = 1,
Blah3 = 2
}
}
我想在运行时将其导入到PowerShell脚本中,以避免手动将其复制过来,并且必须在应该更改的情况下同步它。 有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:2)
我试图做类似的事情,但是在自定义cmdlet中定义我的枚举,它似乎工作方式不同。使用提供的示例(并假设枚举隐藏在扩展PSCmdlet的类中),您需要在powershell脚本/ cmd窗口中执行以下操作:
Import-Module "Path to dll"
$Blah1 = [MyCommonStuff.ImportEnum.ClassName+ImportType]::Blah1
出于某种原因,您使用“+”而不是“。”引用枚举值
答案 1 :(得分:1)
这是我预见解决方案的一种可能方式。您可以创建一个由powershell自动加载的模块,为您添加类型。
要创建模块,请打开powershell ISE并输入以下代码:
$Path = "path to dll"
Add-Type -Path $Path
将“模块”保存为.psm1文件,而不是脚本,并将其命名为简单但信息丰富的内容。然后,您将在“C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules”中创建一个新目录,并使用EXACT SAME NAME作为您的psm1文件。将psm1文件放在那里,然后启动一个新的PowerShell窗口。
您现在应该可以像这样访问您的枚举:
[MyCommonStuff.ImportEnum.ImportType]::Blah1
我建议使用这个模块来包含所有自定义类型,对象,cmdlet,函数等,这样它们就在同一个地方。如果您这样做,请查看Export-ModuleMember
cmdlet,因为您可能需要它。