繁体   English   中英

验证参数 powershell 中没有使用空格

[英]Validate that no spaces have been used in parameter powershell

所以我正在努力寻找解决方案。 我正在研究一些不同的功能,并正在实施一些验证步骤。

我正在寻找的是一个解决方案,以便我可以验证我的两个参数中没有使用空格,因为底层属性不接受它。

我知道我可以检查并删除空格,但希望它能删除错误并通知用户不允许使用空格并更改值。 我试图这样做的价值观是:

$GroupMailSuffix $ValidatedDomainName

function Add-DistributionGroup {  
 param (

        [Parameter(Mandatory=$true)]
        [ValidateLength(5,256)]
        $DistributionGroupName,

        [Parameter(Mandatory=$true)]
        $GroupMailSuffix,

        [Parameter(Mandatory=$true)]
        $ValidatedDomainName

    )
    New-DistributionGroup -Name $DistributionGroupName -PrimarySmtpAddress "$GroupMailSuffix@$($ValidatedDomainName)"
}

使用[ValidateScript()]参数属性来验证参数作为参数绑定的一部分。 如果提供的脚本块返回$false ,则调用失败并出现语句终止错误。

# IMPORTANT: ErrorMessage only supported in PowerShell (Core) 7+
[ValidateScript({ $_ -notmatch ' ' }, ErrorMessage = 'Value must not contain spaces.')]

需要注意的是,在Windows PowerShell中,您无法提供用户友好的错误消息- 用户将看到用于验证的脚本块( {... } ) 的源代码。

但是,有一个解决方法(适用于 PowerShell 两个版本):如果验证失败,请在脚本块内使用throw和所需的错误消息:

[ValidateScript({ if ($_ -notmatch ' ') { return $true }; throw 'Value must not contain spaces.' })]

把它们放在一起:

# NOTE: PowerShell (Core) 7+, due to use of the ErrorMessage property
#       See Windows PowerShell alternative above.
function Add-DistributionGroup {  
  param (
         [Parameter(Mandatory)]
         [ValidateLength(5,256)]
         [string] $DistributionGroupName,
 
         [Parameter(Mandatory)]
         [ValidateScript({ $_ -notmatch ' ' }, ErrorMessage = 'Value must not contain spaces.')]
         [string] $GroupMailSuffix,
         
         [Parameter(Mandatory)]
         [ValidateScript({ $_ -notmatch ' ' }, ErrorMessage = 'Value must not contain spaces.')]
         [string] $ValidatedDomainName
 
     )
  New-DistributionGroup -Name $DistributionGroupName -PrimarySmtpAddress "$GroupMailSuffix@$($ValidatedDomainName)"
 }

请注意,为概念清晰起见,参数类型为[string] ,并且在$DistributionGroupName的情况下,还允许使用[ValidateLength()]属性。

如果用户传递带空格的值,他们将看到如下错误:

Add-DistributionGroup: Cannot validate argument on parameter 'ValidatedDomainName'. 
Value must not contain spaces

请注意,因为错误是语句终止错误,所以[1]默认情况下继续执行下一条语句。

中止脚本,要么(可能是暂时的)先设置$ErrorActionPreference = 'Stop' ,要么使用try / catch语句或trap语句退出。


[1] 这甚至适用于使用throw的解决方法,即使throw通常会产生脚本终止(致命)错误。 但是,在这种情况下,捕获底层 .NET 异常的是 PowerShell 本身(参数绑定器),这有效地将其转换为语句终止错误。
有关 PowerShell 令人眼花缭乱的复杂错误处理的全面概述,请参阅GitHub 文档问题 #1583

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM