当前位置: 首页 > 知识库问答 >
问题:

PowerShell将日期输入Switch语句

左丘曦
2023-03-14

我试图在PowerShell中创建一个switch语句,以根据dayofweekget-date运行不同的代码块,我认为它已经工作了,直到通过设置一个特定的日期进行测试,我发现代码并不像预期的那样工作。

在完美世界中,脚本将在周一运行。我的目标是以这些格式输出三个变量2/02/2015 1:00 am2015-02-02 Monday,基本上是从星期一到下星期一增加一天。

问题来自于我试图预期脚本在周一以外的另一天运行。因此,我想使用(Get-Date).adddays($I)来输出正确的日期,但是当我以后尝试使用Get-Date设置日期时,返回的日期是不正确的。

当我开始使用$var=(Get-date-year 2015-month 02-day 04).DayOfWeek进行测试以设置特定的日期时,switch语句没有输出正确的日期。

下面是switch语句:

#$var = (get-date).DayOfWeek
$var = [DayOfWeek]::Sunday
#$var = (get-date -Year 2015 -Month 02 -Day 04).DayOfWeek
Switch ($var){
([DayOfWeek] 'Monday'){
for ($i = 1; $i -le 7; $i++){
 $d = ((Get-Date).AddDays($i))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Monday
([DayOfWeek] 'Tuesday'){
$i= 5,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Tuesday
([DayOfWeek] 'Wednesday'){
$i= 5,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Wednesday
([DayOfWeek] 'Thursday'){
$i= 4,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Thursday
([DayOfWeek] 'Friday'){
$i= 5,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Friday
([DayOfWeek] 'Saturday'){
$i= 5,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Saturday
([DayOfWeek] 'Sunday'){
$i= 1,-1,0,1,2,3,4
foreach ($day in $i){
 $d = ((Get-Date).AddDays($day))
 $d2 = ($d.ToString("M/dd/yyyy") + " 1:00 AM")
 $d3 = ($d.ToString("yyyy-MM-dd"))
 $d4 = (($d).DayOfWeek).ToString().ToUpper()
"$d2 $d3 $d4"}#End For
}#End Sunday
}#End Switch

然后,可以通过在get-date代理函数中设置get-date来使脚本中的每个get-date实例返回所需的任意日期。

共有1个答案

彭博厚
2023-03-14

这可能会有帮助。没有开关,只是数学。您可以将格式字符串更改为您喜欢的任何格式。只需更改“yyyy-mm-dd dddd hh:mm tt”。请参见自定义日期和时间格式字符串,以了解如何准确地获得所需的输出。

function get-nextweek ([System.DateTime]$p1)
{
    #Set the time to 01:00
    $p1 = [DateTime]($p1.Date + "01:00")
    # + 1 week + 2 days (Tuesday) - Current day of week (0 based) % 7 + 0..6
    0..6 | %{
             #get number of days till Monday
             $d = (8-$p1.DayOfWeek)%7+$_
             #Add 7 if today is Monday to get next week
             if($d -eq 0){$d=7}
             #Output the days as a custom string
             $out = $p1.AddDays($d)
             "$($out.ToString('MM/dd/yyyy HH:mm tt yyyy-MM-dd')) $($out.DayOfWeek.ToString().ToUpper())"
    }
}

产出:

C:\ > get-nextweek '01-29-2015'
02/02/2015 01:00 AM 2015-02-02 MONDAY
02/03/2015 01:00 AM 2015-02-03 TUESDAY
02/04/2015 01:00 AM 2015-02-04 WEDNESDAY
02/05/2015 01:00 AM 2015-02-05 THURSDAY
02/06/2015 01:00 AM 2015-02-06 FRIDAY
02/07/2015 01:00 AM 2015-02-07 SATURDAY
02/08/2015 01:00 AM 2015-02-08 SUNDAY
 类似资料:
  • 我有两个输入字段fromDate和toDate(都是date)。我使用datepicker作为输入字段fromDate。toDate是只读的,并且依赖于fromDate。也就是说,toDate的日期是6+。例如,如果fromDate是11/30/2014,则toDate是12/6/2014。 我的jsp代码是 和js代码为: 谢谢

  • 问题内容: 我正在使用Liferay 6.2,并想使用 liferay-ui:input-date 字段。现场本身工作正常。但是我想更改显示的日期格式 毫米/日/年 至 dd.mm.yyyy 但是该怎么做呢?我看不到有什么衣服可以设置这个… 问题答案: 我查看了输入日期标记库代码,如果要更改模式,则必须修改其代码。文件的路径:\ webapps \ ROOT \ html \ taglib \ u

  • 本文向大家介绍Windows Powershell Switch 循环,包括了Windows Powershell Switch 循环的使用技巧和注意事项,需要的朋友参考一下 Switch 本是多路分支的关键字,但是在Powershell中由于Switch支持集合,所以也可以使用它进行循环处理。下面举两个例子。 第一个将Foreach循环转换成Switch循环: 有时对集合的处理,在循环中还须条件

  • 大家好,所以我有这个MYSQl代码,我插入日期,当它发送和输入的日子,可以是从1做7。我怎样才能让MYSQl在输入天之后删除一行?例如:我在2021年22.03.2021下午3:54创建了一个产品,输入的过期天数是6天。我想删除产品后正好6天。

  • 问题内容: 我有一个活动的编辑页面,我的一个字段是日期。在某些浏览器中,它看起来像纯文本框(IE8),但是在chrome中,它显示“ dd / mm / yyyy”,如果单击它,它还有一些其他选项可用于设置日期。 我的问题是在编辑页面上,它没有填充现有日期(我想是因为日期格式不正确?)。MVC控制器以“ 2014-03-08T00:00:00”格式返回数据(仅使用基本的CRUD控制器操作)。 我已

  • 您如何验证有效的 HTML JavaScript 即使我对表单中的其他字段使用相同的方法,对空字段的验证也不起作用。