【发布时间】:2015-01-30 02:10:05
【问题描述】:
我正在尝试在 PowerShell 中创建一个 SWITCH 语句,以运行基于来自 Get-Date 的 DayOfWeek 的不同代码块,我认为在我通过设置特定日期进行测试之前,它一直在工作,我找到了代码没有按预期工作。
在完美世界中,脚本将在星期一运行。我的目标是以这些格式输出三个变量2/02/2015 1:00 AM 2015-02-02 MONDAY,基本上是从星期一到下星期一添加一天。
问题来自于我试图预测脚本将在星期一以外的另一天运行。所以我想使用(Get-Date).AddDays($i) 输出正确的日期,但是当我尝试使用Get-Date 设置未来的日期时,返回的日期不正确。
当我开始使用$var = (get-date -Year 2015 -Month 02 -Day 04).DayOfWeek 设置特定日期进行测试时,switch 语句没有输出正确的日期。
总而言之,PowerShell Switch 语句为 Get-Date 并在一个范围内输出 7 个日期。周二、周三、周四、周五、周六、周日、周一(下周)
下面是 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 实例返回您想要的任意日期。
【问题讨论】:
标签: date powershell switch-statement