Windows Powershell v4.0 确认当前时间为 08,但 $hour > 1 的计算结果为 "False"

Windows Powershell v4.0 confirms current hour is 08, but $hour > 1 evaluates to "False"

下面的代码是一个 PowerShell 脚本,它没有按预期执行。我添加了一些回声来测试每个条件语句,如您所见,由于某种原因它无法识别条件语句中的小时是 8(或 08)。有谁知道为什么?

$hour = get-date -UFormat %H
$min = get-date -UFormat %M

If ( ($hour -eq 7 -and $min -gt 45) -or ($hour -eq 8 -and $min -lt 55) ) {
start ["filename"]}

echo $hour                     \returns "08"
echo ($hour -gt .999)           \returns "True"
echo ($hour -gt 1)               \returns "False" 
echo ($hour -gt 02)               \returns "False"

EXIT

感谢您的帮助。

您的 $hour 变量包含一个字符串,而不是一个数字。您可以通过更改

将其强制为数字
$hour = get-date -UFormat %H
$min = get-date -UFormat %M

[int]$hour = get-date -UFormat %H
[int]$min = get-date -UFormat %M

或者最好不强制转换任何内容并使用 [DateTime] 对象提供的函数

$hour = (get-date).Hour
$min = (get-date).Minute

您似乎是在将字符串与整数进行比较。

这里有一个例子和解决方案

PS H:\> get-date -UFormat %H
09

PS H:\> (get-date -UFormat %H).GetType()

IsPublic IsSerial Name                                     BaseType            
-------- -------- ----                                     --------            
True     True     String                                   System.Object       



PS H:\> (get-date -UFormat %H) > 1

PS H:\> ([int]( get-date -UFormat %H))
9

PS H:\> ([int]( get-date -UFormat %H)).GetType()

IsPublic IsSerial Name                                     BaseType            
-------- -------- ----                                     --------            
True     True     Int32                                    System.ValueType    



PS H:\> ([int]( get-date -UFormat %H)) -gt 1
True

更好(感谢 LotPings)

PS H:\> ((Get-Date).Hour).GetType()

IsPublic IsSerial Name                                     BaseType            
-------- -------- ----                                     --------            
True     True     Int32                                    System.ValueType    



PS H:\> (Get-Date).Hour -gt 1
True