[英]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.