在 PowerShell 中使用枚举类型

cor*_*sol 3 powershell enums powershell-2.0 powershell-3.0

我在 powershell 中有点新(预期消息开始:))。我无法在这里或其他地方找到我的问题的答案,所以有人可以帮助我吗?

例如,我们想使用一些在 .NET 库中声明的枚举。我们如何在 .NET 中使用它?就像:

using System.Data.SqlClient;

public class Test {
   var x = SortOrder.Ascending;
}
Run Code Online (Sandbox Code Playgroud)

如果我需要在 powershell 中使用它,据我所知,我需要编写如下内容:

$x = [System.Data.SqlClient.SortOrder]::Ascending
Run Code Online (Sandbox Code Playgroud)

所以,问题是,是否有可能在 powershell 中使用类似 C# 中的“使用”来将语法缩短为类似:$sortOrder.Ascending[SortOrder]::Ascending

mar*_*sze 6

选项1

将枚举类型存储在变量中:

$so = [System.Data.SqlClient.SortOrder]
$so::Ascending
Run Code Online (Sandbox Code Playgroud)

选项 2

创建自定义类型加速器(仅适用于当前会话):

[PSObject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Add("so", "System.Data.SqlClient.SortOrder")
[so]::Ascending
Run Code Online (Sandbox Code Playgroud)

选项 3 (PSv5+)

在 PowerShell v5 中引入:将using添加到您的$profile

using namespace System.Data.SqlClient

# in your script:
[SortOrder]::Ascending
Run Code Online (Sandbox Code Playgroud)

选项 4

使用字符串。在大多数情况下(当目标类型已知时,例如对于方法调用、属性分配等),它将被自动识别和转换。

例如,如果您有这种类型:

using System.Data.SqlClient;

namespace Example
{
    public class MyClient
    {
       public SortOrder SortOrder { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以简单地这样做:

$myClient = New-Object Example.MyClient
$myClient.SortOrder = "Ascending"
Run Code Online (Sandbox Code Playgroud)

或者也适用于显式类型的变量:

[System.Data.SqlClient.SortOrder]$sortOrder = "Ascending"
Run Code Online (Sandbox Code Playgroud)

它区分大小写,甚至可以接受部分输入,只要它是明确的:

[System.Data.SqlClient.SortOrder]$sortOrder = "asc"
Run Code Online (Sandbox Code Playgroud)

  • 而且因为 Jeffrey Snover 有缺陷,所以您可以使用“a”。你只需要给它足够的字母,所以它不会含糊不清。:) (2认同)