2016-09-19 9 views
1

私は毎月第3火曜日を計算するために私がインターネット上で見つけたこのスクリプトを持っていますが、私はそれを修正して月の7日目と同じ任意の日数を加えたもの)。Powershell月のn日目を取得

  $FindNthDay=3 
      $WeekDay='Tuesday' 
      [datetime]$Today=[datetime]::NOW 
      $todayM=$Today.Month.ToString() 
      $todayY=$Today.Year.ToString() 
      [datetime]$StrtMonth=$todayM+'/7/'+$todayY 
      while ($StrtMonth.DayofWeek -ine $WeekDay) { $StrtMonth=$StrtMonth.AddDays(1) } 
      $StrtMonth.AddDays(7*($FindNthDay-1)) 
      $NextUpdate = $StrtMonth.AddDays(7*($FindNthDay-1)) 

私はここで論理を理解していませんが、私は$平日は必要ないと思います。何か案は?他のスクリプトとの一貫性を保つために、可能な限り同様の構造と変数名を使用したいと思います。

ありがとうございました

+0

私はあなたの質問に答えたと思います。私はあなたがこの作品で何を求めているのか理解していないので、もしそれがまだ必要ならば、コメントに展開してください: 'それを修正して、月の7日目と同じであれば任意の日数' – FoxDeploy

答えて

2

これは実際にあまり悪くはありません。

まず、今日の日付へのポインタを変数に格納して、$ dateとしましょう。

$date = Get-Date 

次に、月の何桁(数値部分のようなものか)を把握する必要があります。我々は$date.Dayを使ってそれを行うことができます。

$date.day 

19

さて、月の最初に私たちのポインタを与えることを、日付から今日の日付を減算する.AddDays()メソッドを使用してみましょう。

$date.AddDays(-($date.Day-1)) 
>Thursday, September 1, 2016 11:46:36 AM 

最後に、我々はチェーンこの長い文字列の最後に別の.AddDays()は、あなたがしたい、それまでの日数を追加することができます。あなたの場合は、その月の7日目を探しています。我々はさらに6日を追加することでそれを行います。

$date.AddDays(-($date.Day-1)).AddDays(6) 
>Wednesday, September 7, 2016 11:48:15 AM 
+0

これは簡単!私が取った元の例のように多くのコーディングを期待していました!ありがとう、私はそこから残りをすることができます。 – JDGEEK

1

Get-Date-Day引数を受け入れ、それは価値が日付で日として使用されるのです。

PS> Get-Date -Day 7 

Wednesday, September 07, 2016 17:47:36 

それとも、真夜中をしたい場合:

PS> Get-Date '00:00:00' -Day 7 

Wednesday, September 07, 2016 00:00:00 

(でもあなたかかわらず上記の出力ではそれを見ることができません。また、小数点以下の秒も0に設定されます)。

31日以上経過しないうちに月末を過ぎて外出すると、奇妙な行動が起こります。例えば、9月は30日を持って、そしてあなたが31に渡した場合、これは結果である:結果は、将来のコピー/ペースターの現在の時間に敏感でないように

PS> Get-Date -Month 9 -Day 31 

Saturday, October 01, 2016 17:53:31 

-Month 9は上記だけです。 )

ですから、出力月現在のものと一致することを検証することがあります。

PS> (Get-Date -Month 9 -Day 31).Month -eq (Get-Date -Month 9).Month 
False 

あなたが32以上で合格した場合、それはエラーになります:

PS> Get-Date -Day 32 
Get-Date : Cannot validate argument on parameter 'Day'. The 32 argument is greater than the maximum allowed range of 31. Supply an argument that is less than or equal to 31 and then try the command again. 
関連する問題