在使用月份格式比较文件的最后写入时间时,我遇到了一个奇怪的问题。当文件日期非常不同时,该比较似乎适用于某些文件日期,但是如果相隔数月之久则比较无效。我想知道是否有人提出建议?一如既往,我们将不胜感激。
[datetime]$UpdateFileDate = (Get-ItemProperty -Path $FileUpdatePath).LastWriteTime
[datetime]$InstalledVersion = (Get-ItemProperty -path $FilePath).LastWriteTime
$file = Get-Date $UpdateFileDate -Format Y
$version = Get-Date $InstalledVersion -Format Y
if ($version -lt $file) {
$Process = Start-Process -FilePath $FileUpdatePath -PassThru
Wait-process -InputObject $Process
}
答案 0 :(得分:0)
由于您不想在要比较的日期中包括日期部分,因此建议您执行以下操作。
它将日期始终转换为该月的第一天。使用[datetime]
进行强制转换可确保您确实在比较日期对象,而不是字符串。
# of use something like this:
# $fileDate = [datetime]('{0:MM/01/yyyy}' -f (Get-Item -Path $FileUpdatePath).LastWriteTime)
$fileDate = [datetime](Get-Date ((Get-Item -Path $FileUpdatePath).LastWriteTime) -Format 'MM/01/yyyy')
$installDate = [datetime](Get-Date ((Get-Item -Path $FilePath).LastWriteTime) -Format 'MM/01/yyyy')
if ($installDate -lt $fileDate) {
$Process = Start-Process -FilePath $FileUpdatePath -PassThru
Wait-process -InputObject $Process
}
答案 1 :(得分:0)
谢谢Lee_Dailey和Theo的帮助。我使用了混合解决方案,使用了两个答案的一部分。我将字符串更改为双精度。这使其成为简单的数学比较。容易得多。
[datetime]$UpdateFileDate = (Get-ItemProperty -Path $FileUpdatePath).LastWriteTime
[datetime]$InstalledVersion = (Get-ItemProperty -path $FilePath).LastWriteTime
[double]$file = Get-Date $UpdateFileDate.ToString('yyyy.MM')
[double]$version = Get-Date $InstalledVersion.ToString('yyyy.MM')
if ($version -lt $file) {
$Process = Start-Process -FilePath $FileUpdatePath -PassThru
Wait-process -InputObject $Process
}