希望我能在一个明确的问题中解释这一点以避免混淆(因为我自己也有点困惑)。
我有一个 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 脚本中,以避免必须手动复制它,并且在它应该更改时必须同步它。
有人可以启发我如何解决这个问题吗?
我试图做类似的事情,但是在自定义 cmdlet 中定义了我的枚举,它的工作方式似乎有所不同。使用提供的示例(并假设枚举隐藏在扩展 PSCmdlet 的类中),您需要在 powershell 脚本/cmd 窗口中执行以下操作:
Import-Module "Path to dll"
$Blah1 = [MyCommonStuff.ImportEnum.ClassName+ImportType]::Blah1
Run Code Online (Sandbox Code Playgroud)
出于某种原因,您使用“+”而不是“。” 引用枚举值
这是我预见解决您的解决方案的一种可能方法。您可以创建一个由 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,因为您可能会需要它。
| 归档时间: |
|
| 查看次数: |
4983 次 |
| 最近记录: |