在PowerShell中使用枚举类型

时间:2018-12-18 09:25:07

标签: powershell enums powershell-v2.0 powershell-v3.0

我对Powershell有点陌生(预计消息开始:)。 我在这里或其他地方找不到我的问题的答案,所以有人可以帮我吗?

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

using System.Data.SqlClient;

public class Test {
   var x = SortOrder.Ascending;
}

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

$x = [System.Data.SqlClient.SortOrder]::Ascending

因此,问题是,在Powershell中是否可以使用C#中的“ using”之类的语法来简化语法,例如:$sortOrder.Ascending[SortOrder]::Ascending

1 个答案:

答案 0 :(得分:4)

选项1

将枚举类型放入变量:

$so = [System.Data.SqlClient.SortOrder]
$so::Ascending

选项2

创建自定义type accelerator(仅适用于当前会话):

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

选项3 (PSv5 +)

在PowerShell v5中引入。将using放入您的$profile

using namespace System.Data.SqlClient

# in your script:
[SortOrder]::Ascending

选项4

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

例如,如果您具有以下类型:

using System.Data.SqlClient;

namespace Example
{
    public class MyClient
    {
       public SortOrder SortOrder { get; set; }
    }
}

您可以简单地执行以下操作:

$myClient = New-Object Example.MyClient
$myClient.SortOrder = "Ascending"

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

[System.Data.SqlClient.SortOrder]$sortOrder = "Ascending"

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

[System.Data.SqlClient.SortOrder]$sortOrder = "asc"