使用“获取日期”;时间“;在一个;如果;声明PowerShell

使用“获取日期”;时间“;在一个;如果;声明PowerShell,powershell,if-statement,Powershell,If Statement,大家好,我正在练习一点我的PowerShell,遇到了一些我不太确定如何用谷歌搜索的东西,或者我需要使用什么方法才能让它正常工作的东西 我试图实现的是只显示我的方框,小时和分钟,如“12:31”。 正如你在剧本中看到的,我称之为 小时,但我不太明白如何让它以正确的方式显示时间。我使用的是“Time”操作符,但是当你在“IF”语句中比较它时,它不会识别出它是可以自我比较的,因为它不是一个真正的整数。我明白为什么,但我希望能够将.Hour与$Time2进行比较 我是新手,非常感谢您的帮助! 谢谢大家

大家好,我正在练习一点我的PowerShell,遇到了一些我不太确定如何用谷歌搜索的东西,或者我需要使用什么方法才能让它正常工作的东西

我试图实现的是只显示我的方框,小时和分钟,如“12:31”。 正如你在剧本中看到的,我称之为 小时,但我不太明白如何让它以正确的方式显示时间。我使用的是“Time”操作符,但是当你在“IF”语句中比较它时,它不会识别出它是可以自我比较的,因为它不是一个真正的整数。我明白为什么,但我希望能够将.Hour与$Time2进行比较

我是新手,非常感谢您的帮助!
谢谢大家!

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

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

如果要比较两个
DateTime
对象的时间(不考虑日期),可以比较
TimeOfDay
属性:

$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)
    }

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

您可以对格式化字符串使用
ToString()
方法:

$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"
}
格式运算符
-f

PS C:\> (Get-Date).ToString('HH:mm')
20:41
或者让
Get Date
返回格式化字符串本身:

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

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

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

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

如果要比较两个
DateTime
对象的时间(不考虑日期),可以比较
TimeOfDay
属性:

$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)
    }

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

您可以对格式化字符串使用
ToString()
方法:

$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"
}
格式运算符
-f

PS C:\> (Get-Date).ToString('HH:mm')
20:41
或者让
Get Date
返回格式化字符串本身:

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

如果需要12小时样式的时间,请使用
hh:mm

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

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

不过,这种逻辑只适用于24小时。下午1点小于12点,但在当天晚些时候。这就是HH:mm所代表的

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

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

不过,这种逻辑只适用于24小时。下午1点小于12点,但在当天晚些时候。这就是HH:mm所代表的

马西亚斯。。。。我想你只有一半的答案。不过你很接近。需要保存变量,以便在保留datetime对象的同时调用这两部分。Mathias。。。。我想你只有一半的答案。不过你很接近。需要保存变量,以便在保留datetime对象的同时调用这两个部分。正确的时间比较是一种方法。正确的时间比较是一种方法。