2015-11-19 82 views
0
$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的一点点,并横跨东西跑我不太清楚如何为谷歌,或我需要使用什么方法才能使其正常工作。使用Get-日期“时间”在“if”语句的PowerShell

我试图完成的是我的箱子只显示,小时和分钟像“12:31”。 正如您在脚本中所看到的,我打电话给 小时,但我无法弄清楚如何让它以正确的方式显示时间。我使用的是“时间”运算符,但是当您比较“IF”语句中的运算符时,它不会将它识别为可以比较自身的东西,因为它不是真正的整数。我理解为什么,但我希望能够比较.hour到$时间2

我是新来的,并感谢您可以提供任何帮助! 谢谢!

+0

Mathias ....我想你只有一半的答案。你虽然接近。需要保存变量,以便在保留日期时间对象的同时调用两个部分。 – Matt

回答

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

+0

适当的时间比较是这里的方法。 – Matt

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代表。