简单的PowerShell LastWriteTime比较

时间:2009-06-19 16:46:21

标签: file powershell

我需要一个PowerShell脚本,可以访问文件的属性并发现 LastWriteTime 属性,并将其与当前日期进行比较并返回日期差异。

我有这样的事情......

$writedate = Get-ItemProperty -Path $source -Name LastWriteTime

...但我无法将 LastWriteTime 转换为“DateTime”数据类型。它说,“无法将@ {LastWriteTime = ... date ...}”转换为“System.DateTime”。

7 个答案:

答案 0 :(得分:26)

尝试以下方法。

$d = [datetime](Get-ItemProperty -Path $source -Name LastWriteTime).lastwritetime

这是物品属性怪异的一部分。当您运行Get-ItemProperty时,它不会返回值,而是返回属性。您必须使用一个更多级别的间接来获取值。

答案 1 :(得分:14)

(ls $source).LastWriteTime

(“ls”,“dir”或“gci”是Get-ChildItem的默认别名。)

答案 2 :(得分:6)

我有一个我想分享的例子

$File = "C:\Foo.txt"
#retrieves the Systems current Date and Time in a DateTime Format
$today = Get-Date
#subtracts 12 hours from the date to ensure the file has been written to recently
$today = $today.AddHours(-12)
#gets the last time the $file was written in a DateTime Format
$lastWriteTime = (Get-Item $File).LastWriteTime

#If $File doesn't exist we will loop indefinetely until it does exist.
# also loops until the $File that exists was written to in the last twelve hours
while((!(Test-Path $File)) -or ($lastWriteTime -lt $today))
{
    #if a file exists then the write time is wrong so update it
    if (Test-Path $File)
    {
        $lastWriteTime = (Get-Item $File).LastWriteTime
    }
    #Sleep for 5 minutes
    $time = Get-Date
    Write-Host "Sleep" $time
    Start-Sleep -s 300;
}

答案 3 :(得分:5)

我不能错过这里的任何答案,因为OP接受其中一个解决他们的问题。但是,我发现它们在某方面存在缺陷。当您将赋值的结果输出到变量时,它包含许多空行,而不仅仅是所寻求的答案。例如:

PS C:\brh> [datetime](Get-ItemProperty -Path .\deploy.ps1 -Name LastWriteTime).LastWriteTime

Friday, December 12, 2014 2:33:09 PM



PS C:\brh> 

我喜欢代码,简洁和正确的两件事。 brianary有权对Roger Lipscombe采取简洁的措辞,但由于结果中的额外线条,两者都错过了正确性。这就是我认为OP正在寻找的东西,因为它让我超越终点线。

PS C:\brh> (ls .\deploy.ps1).LastWriteTime.DateTime
Friday, December 12, 2014 2:33:09 PM

PS C:\brh> 

请注意,缺少额外的行,只有PowerShell用于分隔提示的行。现在可以将其分配给变量进行比较,或者在我的情况下,将其存储在文件中,以便在以后的会话中进行读取和比较。

答案 4 :(得分:4)

(Get-Item $source).LastWriteTime是我的首选方式。

答案 5 :(得分:3)

稍微容易一些 - 使用new-timespan cmdlet,它会创建一个与当前时间相隔的时间间隔。

ls | where-object {(new-timespan $_.LastWriteTime).days -ge 1}

显示今天未写入的所有文件。

答案 6 :(得分:2)

使用

ls | %{(get-date) - $ _。LastWriteTime}

它可以检索差异。您可以将ls替换为单个文件。