Powershell - 查找下周五

dav*_*rat 4 powershell date powershell-3.0

希望这不会太困难,但我正在编写一个脚本,从域中查询用户信息并导出到CSV.

该脚本由我们的管理人员运行,他们输入脚本所需的只是用户名.

棘手的部分是我需要根据即将到来的星期五来命名CSV.

Note: I am in Australia so my date format is DD-MM-YYYY
Run Code Online (Sandbox Code Playgroud)

我目前正在考虑的方式如下:

# Grab the Script Run Timestamp
$ScriptRuntime = Get-Date -Day 4 -Month 5 -Year 2013

# Grab the next Friday (including today)
$NextFriday = $ScriptRuntime.AddDays(0 + $(0,1,2,3,4,5,6 -eq 5 - [int]$ScriptRuntime.dayofweek))

Write-Host "Script Run:  "$ScriptRuntime
Write-Host "Next Friday: "$NextFriday
Run Code Online (Sandbox Code Playgroud)

除星期六以外的所有日子都可以.

  • 如果我将当天作为第26天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将当天作为第27天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将当天作为第28天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将当天作为第29天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将当天作为第30天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将当天作为第31天,第5个月,2013年运行,则返回2013年5月31日
  • 如果我将这一天作为第1天,第6个月,2013年运行,则返回2013年5月31日(这应该是2013年7月7日)
  • 如果我将这一天作为第2天,第6个月,2013年运行,则返回07/06/2013

我究竟做错了什么?

小智 8

这发现下周五:

$date = Get-Date
while ($Date.DayOfWeek -ne "Friday") {$date = $date.AddDays(1)}
Run Code Online (Sandbox Code Playgroud)


小智 6

这里有一个单行代码也可以解决这个问题:

$Date = @(@(0..7) | % {$(Get-Date).AddDays($_)} | ? {$_.DayOfWeek -ieq "Friday"})[0]
Run Code Online (Sandbox Code Playgroud)

如果您需要特定时间:

$Date = @(@(0..7) | % {$(Get-Date "12:00").AddDays($_)} | ? {($_ -gt $(Get-Date)) -and ($_.DayOfWeek -ieq "Friday")})[0]
Run Code Online (Sandbox Code Playgroud)


Sha*_*evy 5

我不确定我是否跟着你,但下周五我会得到:

$date = Get-Date

for($i=1; $i -le 7; $i++)
{        
    if($date.AddDays($i).DayOfWeek -eq 'Friday')
    {
        $date.AddDays($i)
        break
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

无论您在哪一天运行代码,都可以使用以下命令获取本周星期五的日期:

$today = (Get-Date).Date    
$nextfriday = $today.AddDays([int][dayofweek]::Friday - $today.DayOfWeek)    
Run Code Online (Sandbox Code Playgroud)

如果你想总是得到下周五(所以,如果你在周六跑步,那么下周的周五),你只需要在最后添加一个额外的修饰符:

if ($today -ge $nextfriday) {$nextfriday = $nextfriday.AddDays(7)}
Run Code Online (Sandbox Code Playgroud)


Ber*_*hem 5

聚会有点晚了,但这是我的看法(没有循环,没有条件):

    [datetime] $MyDate =  get-date
    [DayOfWeek] $NextDayOfWeek = 'Friday'

    $MyDate.AddDays( (7 - [int] $MyDate.DayOfWeek + [int] $NextDayOfWeek )%7 )
Run Code Online (Sandbox Code Playgroud)

如果您想验证更多日期:

    [datetime] $MyDate =  get-date
    [DayOfWeek] $NextDayOfWeek = 'Friday'

    1..30 | ForEach-Object {
                            [PSCustomObject]@{ 
                                DayOfWeek = $MyDate.DayOfWeek ;
                                Date = $MyDate; 
                                $("Next$NextDayOfWeek") = $MyDate.AddDays((7 - [int] $MyDate.DayOfWeek + [int] $NextDayOfWeek )%7)   
                            }; 
                            $MyDate = $MyDate.AddDays(1)  
                        } 
Run Code Online (Sandbox Code Playgroud)