A weird and annoying thing happened to my home directory at work when it was moved from Windows to a storage appliance. The file CreationTime was lost on all the files and was set to the date of the data move. Particularly annoying was seeing the CreationTime being more recent than the LastWriteTime attribute. At one point in my IT career I thought that these attributes could not be changed by the user. I was wrong. In .NET these methods are available using System.IO. Here is the script — you will need to edit some choices a the top to use it.
#Fix-CreateAfterModifiedDate.ps1 #Alan Kaplan 8/1/2017 #If creation time of file is later than last time written, change creation time to last time written #See, generally https://ss64.com/ps/syntax-touch.html #Edit Here $startingPath = 'z:\MyFiles' $filter = '*.*' #$SearchScope = 'TopDirectoryOnly' $SearchScope = 'AllDirectories' #End Edits [System.IO.Directory]::EnumerateFiles($startingPath,$filter,$SearchScope) | Foreach-Object -Process ` { write-progress -Activity "Updating Time Stamps" -Status $_ if (test-path -type Container $_) { $fsInfo = new-object System.IO.DirectoryInfo($_) } else { $fsInfo = new-object System.IO.FileInfo($_) } $attributes = [System.IO.FileSystemInfo]$fsInfo if ($attributes.CreationTime -gt $attributes.LastWriteTime) { Try { $attributes.CreationTime = $attributes.LastWriteTime } Catch { Write-Warning $_ } } }