欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell中使用正则和ValidateSet验证参数合法性

程序员文章站 2022-03-14 07:56:18
适用于powershell 2.0或着更高版本 当你使用powershell 创建了一个函数时,要确保你告诉powershell 你的参数期望什么样的值。比如你想用户输入...

适用于powershell 2.0或着更高版本

当你使用powershell 创建了一个函数时,要确保你告诉powershell 你的参数期望什么样的值。比如你想用户输入星期

复制代码 代码如下:

function get-weekday
{
  param
  (
    $weekday
  )
  
  "you chose $weekday"
}

此时用户可以输入任何值,即使这个值不是一个合法的星期,比如星期七
复制代码 代码如下:

ps> get-weekday -weekday noweekday
you chose noweekday

也许你之前还见过正则表达式类型的验证方式:

复制代码 代码如下:

function get-weekday
{
param
(
[validatepattern('monday|tuesday|wednesday|thursday|friday|saturday|sunday')]
$weekday
)
 
"you chose $weekday"
}

现在一旦用户输入的字符串与你指定的模式不匹配时,powershell会抛出一个异常,但是这个异常信息不够友好。在输出参数时,控制台或着ise编辑器也不能智能提示:

所以更好的方式应当是使用validateset:

复制代码 代码如下:

function get-weekday
{
param
(
[validateset('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday')]
$weekday
)
 
"you chose $weekday"
}

现在用户在输出参数时被限定在你规定的值集合中,另外在ise中还会智能提示用户允许的值列表。如果你能在.net的类型中找到一个枚举值刚好描述你需要的参数,那就更易如反掌了:
复制代码 代码如下:

function get-weekday
{
param
(
[system.dayofweek]
$weekday
)
 
"you chose $weekday"
}