在“if”语句中使用Get-Date“time”PowerShell

时间:2015-11-19 19:37:05

标签: powershell if-statement

$WshShell = New-Object -ComObject wscript.shell
$Time = (Get-Date).hour
$Time2 = Get-Date -DisplayHint Time
$Message ="Test for $Env:username at: " + $Time2
$fail = "ERROR:It is $Time2, which is past 12PM"
$PopUp = $WshShell.popup("$Message",0,"Task Scheduler Pop-up",1)
    if ($Time2 > 12)
            {
            $PopUp = $wshShell.popup("$Message",0,"Task Scheduler Pop-up",1)
            }
    else {
    $PopUp = $wshShell.popup("$fail",2,"Task Scheduler Pop-up",1)
    }

大家好,我正在练习一些我的PowerShell并遇到了一些我不太确定如何使用Google的方法,或者我需要使用哪种方法才能使其正常工作。

我想要完成的只是我的盒子显示,小时和分钟如“12:31”。 正如你在脚本中看到的那样,我正在调用 小时,但我不知道如何让它以正确的方式显示时间。我正在使用“时间”运算符,但是当你在“IF”语句中比较它时,它不会将它识别为它可以比较的东西,因为它不是真正的整数。我理解为什么,但我希望能够将.Hour与$ Time2

进行比较

我是新手,感谢您提供的任何帮助! 谢谢!

2 个答案:

答案 0 :(得分:2)

在实际需要之前,不要考虑输出字符串。

>无法进行比较,您需要使用-lt(小于)和-gt(大于)

如果要比较两个DateTime个对象的时间(无论日期如何),您可以比较TimeOfDay属性:

$DateTimeNow = Get-Date 
$DateTimeEarly = Get-Date -Hour 1 -Minute 5

if($DateTimeNow.TimeOfDay -lt $DateTimeEarly.TimeOfDay){
    "It is very early right now!"
} else {
    "It is at least past 01:05"
}

如果要在输出中显示时间,您可以使用多个选项来格式化DateTime字符串:

您可以将ToString()方法与格式化字符串一起使用:

PS C:\> (Get-Date).ToString('HH:mm')
20:41

格式化运算符-f

PS C:\> '{0:HH:mm}' -f (Get-Date)
20:41

或让Get-Date返回格式化的字符串:

PS C:\> Get-Date -Format 'HH:mm'
20:41

如果您想要12小时的时间,请使用hh:mm

答案 1 :(得分:0)

如果您需要显示时间,可以使用多种方法之一。那些都将结果转换为字符串。我认为您需要将$time2保存为[datetime]个对象。这样,您可以将其格式化以便显示,并使用.Hour作为比较逻辑。

$Time2 = Get-Date
$Message ="Test for $Env:username at: " + $Time2.ToString("HH:mm")
$PopUp = $WshShell.popup("$Message",0,"Task Scheduler Pop-up",1)
if ($Time2.Hour -gt 12){
    #Do Stuff
}

这种逻辑只能在24小时内工作。 1(pm)小于12但在当天晚些时候。这是HH:mm所代表的。