Załóżmy, że w swoim skrypcie potrzebujesz rozpoznać, czy dany dzień jest dniem wolnym (sobota lub niedziela) czy roboczym… Proste!
$d = [datetime]::Now $d.dayofweek
No i świetnie. Wynikiem może na przykład być:
Tuesday
Hmmm, ale czy aby zawsze? Na komputerze z polskimi ustawieniami regionalnymi może zostać zwrócone:
Wtorek
Jeśli chcesz sprawdzić czy dzień jest niedzielą czy sobotą czy innym dniem tygodnia lepszym wyborem byłoby korzystanie z jakiejś wartości liczbowej, gdzie np Niedziela to 0, Poniedziałek to wtorek itp. Da sie coś takiego zrobić. Zrzutuj właściwość DayOfWeek do [int]:
$d = [datetime]::Now [int]$d.dayofweek
W moim przypadku (wtorek) zwracana wartość to 2. Czy jednak nie będzie tak, że zależnie od ustawień kultury, 0 będzie oznaczać Niedzielę, a w innych warunkach Poniedziałek? Otóż nie!. Jak czytamy na
https://msdn.microsoft.com/pl-pl/library/system.datetime.dayofweek(v=vs.110).aspx
The value of the constants in the DayOfWeek enumeration ranges from DayOfWeek.Sunday to DayOfWeek.Saturday. If cast to an integer, its value ranges from zero (which indicates DayOfWeek.Sunday) to six (which indicates DayOfWeek.Saturday).
The DayOfWeek property returns an enumerated constant; it does not reflect a system’s regional and language settings. To retrieve a string representing a localized weekday name for a particular date, call one of the overloads of the ToString method that includes a format parameter and pass it either the ddd or dddd custom format strings. For details, see How to: Extract the Day of the Week from a Specific Date.
A więc niezależnie od ustawień językowych, regionalnych itp. 0 to zawsze Niedziela a 6 to zawsze Sobota. Wartość stałych można sprawdzić wpisując:
[int][dayofweek]::Sunday [int][dayofweek]::Monday [int][dayofweek]::Tuesday [int][dayofweek]::Wednesday [int][dayofweek]::Thursday [int][dayofweek]::Friday [int][dayofweek]::Saturday
Wynik to oczywiście
0 1 2 3 4 5 6
Jeśli wiec trzeba sprawdzić czy data jest weekendowa wykonaj:
$d = [datetime]::Now if (($d.DayOfWeek -eq [dayofweek]::Sunday) -or ($d.DayOfWeek -eq [dayofweek]::Saturday)) { Write-Output "this is weekend" } else { Write-output "this is NOT a weekend" }