How do I parse a date in PowerShell?

powershell, powershell-2.0

Solution

Try to calculate the difference between `[DateTime]::Today` and the result of parsing the directory name:

foreach ($myDir in $myDirs)
{
    # Variable for directory date
    [datetime]$dirDate = New-Object DateTime

    # Check that directory name could be parsed to DateTime
    if ([DateTime]::TryParseExact($myDir.Name, "dd-MM-yyyy",
                                  [System.Globalization.CultureInfo]::InvariantCulture,
                                  [System.Globalization.DateTimeStyles]::None,
                                  [ref]$dirDate))
    {
        # Check that directory is 5 or more day old
        if (([DateTime]::Today - $dirDate).TotalDays -ge 5)
        {
            remove-item $myPath\$dirName -recurse
        }
    }
}

Problem

I write a script that removes backups older than five days. I check it by the name of the directory and not the actual date. How do parse the directory name to a date to compare them? Part of my script: ``` ... foreach ($myDir in $myDirs) { $dirName=[datetime]::Parse($myDir.Name) $dirName= '{0:dd-MM-yyyy}' -f $dirName if ($dirName -le "$myDate") { remove-item $myPath\$dirName -recurse } } ... ``` Maybe I do something wrong, because it still does not remove last month's directories. The whole script with Akim's suggestions is below: ``` Function RemoveOldBackup([string]$myPath) { $myDirs = Get-ChildItem $myPath if (Test-Path $myPath) { foreach ($myDir in $myDirs) { #variable for directory date [datetime]$dirDate = New-Object DateTime #check that directory name could be parsed to DateTime if([datetime]::TryParse($myDir.Name, [ref]$dirDate)) { #check that directory is 5 or more day old if (([DateTime]::Today - $dirDate).TotalDays -ge 5) { remove-item $myPath\$myDir -recurse } } } } Else { Write-Host "Directory $myPath does not exist!" } } RemoveOldBackup("E:\test") ``` Directories names are, for example, 09-07-2012, 08-07-2012, ..., 30-06-2012, and 29-06-2012.

Original source