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?
选项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)