Filter by Week Incriments

I am using import-csv and creating a ps custom object.

There is a date property.

I am looking to group all the objects by the Week Begining Date

id like to use the below approach just not sure how i can include the weekly time span

heres what i got so far

$grouped = { 
Switch ($_.WS) {
{$_ -ge 300MB} {"Large" ;break}
{$_ -ge 100MB} {"Medium" ;break}
{$_ -le 2MB} {"Small" ; break}
Default { "Normal"}
} #close switch  
} 
$MyObject | Sort $Grouped

First thing to understand is that importing from a CSV imports everything as a string. Depending on the date format, it has to be a sortable date\time.

#Sortable
PS C:\Users\rsimmers> [Get-Date].Tostring["s"]
2015-04-09T09:03:30

#Not Sortable
PS C:\Users\rsimmers> [Get-Date].ToShortDateString[]
4/9/2015

#Not Sortable
PS C:\Users\rsimmers> [Get-Date].ToLongDateString[]
Thursday, April 9, 2015

If you want to check the difference between dates or perform any date math, you’ll need to convert the string to a datetime data type. As an example, say the date is in this format: 1-10-2015

PS C:\Users\rsimmers> Get-Date "1-10-2015"

Saturday, January 10, 2015 12:00:00 AM

You stated you want to sort it by week beginning, so it sounds like you are trying to sort by the week that something occurred. Unfortunately, there isn’t a default property like WeekOfYear like DayOfWeek and other default date properties:

PS C:\Users\rsimmers> [Get-Date "1-10-2015"] | Get-Member -MemberType Properties


   TypeName: System.DateTime

Name        MemberType     Definition                                                                                                                                            
----        ----------     ----------                                                                                                                                            
DisplayHint NoteProperty   Microsoft.PowerShell.Commands.DisplayHintType DisplayHint=DateTime                                                                                    
Date        Property       datetime Date {get;}                                                                                                                                  
Day         Property       int Day {get;}                                                                                                                                        
DayOfWeek   Property       System.DayOfWeek DayOfWeek {get;}                                                                                                                     
DayOfYear   Property       int DayOfYear {get;}                                                                                                                                  
Hour        Property       int Hour {get;}                                                                                                                                       
Kind        Property       System.DateTimeKind Kind {get;}                                                                                                                       
Millisecond Property       int Millisecond {get;}                                                                                                                                
Minute      Property       int Minute {get;}                                                                                                                                     
Month       Property       int Month {get;}                                                                                                                                      
Second      Property       int Second {get;}                                                                                                                                     
Ticks       Property       long Ticks {get;}                                                                                                                                     
TimeOfDay   Property       timespan TimeOfDay {get;}                                                                                                                             
Year        Property       int Year {get;}                                                                                                                                       
DateTime    ScriptProperty System.Object DateTime {get=if [[] -ieq  "Date"]...

If you take your CSV and use calculated properties you could get some sortable data to work with:

$myObject = Import-CSV C:\data.csv  | Select Name, @{Label="Date";Expression{$[Get-Date -Date $_.Date]}}, @{Label="WeekOfYear";Expression{$[Get-Date -Date $_.Date -UFormat %W]}}
$myObject | Sort-Object -Property WeekOfYear

You'll need to test that your stored date in the CSV can be parsed by Get-Date. If not, you will need to possibly create a function to parse the date string. I've personally never used the WeekOfYear and the [a href="https://social.technet.microsoft.com/Forums/scriptcenter/es-ES/57663cae-5c0b-4718-889d-5d76cba6eb04/powershell-week-of-the-year?forum=ITCG"] first thread I read[/a] stated that the weeks might start on Wednesday versus Sunday or Monday, so you may want to test and read through this thread.

Thank you ! Great Info