我正在尝试比较两个日期,并根据小时数来决定,但比较似乎不起作用。我试图将TotalHours
投射到[int]
,但没有运气。让我感到惊讶的是,我使用-gt
或-lt
获得相同的结果....:?
它必须是简单的东西,但我没有看到它。
这里是代码
$stamp = "14/11/2015 14:20:57"
$rightNow = Get-Date
$stampDateTime = [datetime]::ParseExact($stamp,'dd/MM/yyyy HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture)
$difference = NEW-TIMESPAN –Start $stampDateTime –End $rightNow
if ([int]$difference.TotalHours -gt 24 ) { $ok = "OK" }
if ($ok){
Write-Host "VALID"
}else{
Write-Host "BAD"
}
答案 0 :(得分:2)
您的if ($ok)
就是问题所在。评估为布尔值时的所有字符串都将返回true。
更改它以便您使用布尔值将是解决它的一种方法。
if ([int]$difference.TotalHours -gt 24 ) { $ok = $true }
if ($ok){
Write-Host "VALID"
}else{
Write-Host "BAD"
}
您还应该在脚本的开头设置一个已知值以用作标志。这很重要,因为变量状态将在PowerShell会话中的执行之间保持不变。
# assume false
$ok = $false
根据您的需要,您不需要保持这种逻辑。您可以一起绕过第二个if
,因为如上所述它是多余的。
if ([int]$difference.TotalHours -gt 24 ) {
Write-Host "VALID"
}else{
Write-Host "BAD"
}
我知道这可能只是你用来提出问题的简单例子。
请考虑以下内容以了解发生的情况。当转换为布尔值时,任何非零长度字符串都将解析为$。
PS C:\> [boolean]"OK"
True
PS C:\> [boolean]"VeryBad"
True
PS C:\> [boolean]""
False