我以这种方式在PowerShell脚本中使用开关参数。
param(
[switch] $Word,
[switch] $Excel,
[switch] $powerpoint,
[switch] $v2007,
[switch] $v2010,
[switch] $x86,
[switch] $x64,
)
我正在试着想办法让它更有枚举风格。正如任何人可能猜测的那样,我希望用户在Word、Excel和PowerPoint之间进行选择。以及2007年第2007年和第2010年版之间。
有没有一种巧妙的方法来获得输入参数枚举样式?
我是PowerShell的新手。因此,如果这听起来像是我不知道一些显而易见的事情,那么请给我一些链接,我可以在那里读到它。
4条答案
按热度按时间axkjgtzd1#
我将改用
ValidateSet
参数属性。发信人:about_Functions_Advanced_Parameters
ValiateSet属性为参数或变量指定一组有效的值。如果参数或变量值与集合中的值不匹配,Windows PowerShell将生成错误。
示例函数:
产出:
test-value : Cannot validate argument on parameter 'Application'. The argument "foo" does not belong to the set "word,excel,powerpoint" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
qni6mghb2#
您可以使用
ValidateSet
属性:产出:
axkjgtzd3#
此blog post by the PowerShell team定义了如何在PowerShell 1.0中执行此操作。在PowerShell 2.0中,您可以使用Add-Type,如下所示:
**更新:**枚举使用方法如下:
您需要将参数括在圆括号中才能将参数解析为类型。这是必需的,因为参数或多或少被视为字符串。了解了这一点后,您还可以以简单的字符串形式向它们传递枚举,PowerShell会解决这个问题:
Error-F不是枚举值之一-有效值包括A、B、C、D*
u3r8eeie4#
从PowerShell5开始,您实际上可以在本地使用/创建
Enum
。然后,这也将显示为其类型。
也许4sysops提供了一个有用的链接。
要在函数中使用它,我会创建一个单独的
.psm1
文件并添加您需要的所有枚举--请参阅我的注解,其中引用了一个类似的问题--或者您可以将此枚举设置在.psm1
文件的顶部并在同一文件中使用。例如,我创建了文件
test.psm1
并添加了以下代码:我导入文件
Import-Module .\test.psm1
并运行它: