我想强制用户使用特定日期字符串在我的函数中使用。是否有办法在Powershell中使用ValidatePattern执行此操作。我试过这个并且它似乎无法工作:
function Test-Date {
Param(
[ValidatePattern('MM-DD-YYYY-HH-mm-ss')]
[DateTime]$date
)
Write-Output $date
}
答案 0 :(得分:0)
好的,我想我找到了自己问题的答案。我想验证我是否以特定的方式从用户那里得到了一个日期,所以我可以告诉他们如何按照我的预期输入日期。我希望日期格式一般是短日期和短时间,所以我使用了' g'作为我的模式。我找到的其他模式here
function Test-Date
{param(
[ValidateScript(
{
try{[datetime]::ParseExact($psitem ,'g' ,[System.Globalization.CultureInfo](Get-Culture))}catch{throw "Datetime is in the wrong format ($_) Use this format 8/30/2007 11:20 AM"}
})]
[string]$date
)
Write-Output $date
}
答案 1 :(得分:0)
为了强制执行参数值的特定格式,我不建议解析ValidateScript()
块中的值并在不匹配时抛出异常。通过ValidatePattern()
验证字符串,并仅解析函数体中的有效参数。
function Test-Date {
Param(
[ValidatePattern('^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{2} [AP]M$')]
[string]$date
)
$culture = [Globalization.CultureInfo]::InvariantCulture
[DateTime]::ParseExact($date, 'g', $culture)
}
话虽如此,我希望函数Test-Date
返回一个布尔值,表明该字符串是否是有效日期,所以我可能不会在{{}}中进行验证{1}}首先阻止。我更喜欢这样的事情:
Param()
或者像这样,如果你想与文化无关:
function Test-Date {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$Date
)
$Date -match '^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{2} [AP]M$'
}