Простое сравнение PowerShell LastWriteTime
Мне нужен PowerShell script, который может получить доступ к свойствам файла и узнать свойство LastWriteTime и сравнить его с текущей датой и вернуть разницу дат.
У меня есть что-то вроде этого...
$writedate = Get-ItemProperty -Path $source -Name LastWriteTime
... но я не могу использовать LastWriteTime для типа данных DateTime. В нем говорится: "Невозможно преобразовать" @{LastWriteTime =... date...} "в" System.DateTime ".
Ответы
Ответ 1
Попробуйте следующее.
$d = [datetime](Get-ItemProperty -Path $source -Name LastWriteTime).lastwritetime
Это часть странности свойств элемента. Когда вы запустите Get-ItemProperty, он не возвращает значение, а вместо этого свойство. Вы должны использовать еще один уровень косвенности, чтобы добраться до значения.
Ответ 2
(ls $source).LastWriteTime
( "ls", "dir" или "gci" являются псевдонимами по умолчанию для Get-ChildItem.)
Ответ 3
У меня есть пример, который я хотел бы поделиться
$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;
}
Ответ 4
(Get-Item $source).LastWriteTime
- мой предпочтительный способ сделать это.
Ответ 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>
Я поклонник двух вещей в коде, лаконичности и правильности. Брианари имеет право на это, чтобы сцепиться с кончиком шляпы Роджеру Липскомб, но оба ошибаются в правильности из-за дополнительных линий в результате. Вот что я думаю, что OP искал, так как это привело меня к финишу.
PS C:\brh> (ls .\deploy.ps1).LastWriteTime.DateTime
Friday, December 12, 2014 2:33:09 PM
PS C:\brh>
Обратите внимание на отсутствие дополнительных строк, только тот, который PowerShell использует для разделения запросов. Теперь это может быть присвоено переменной для сравнения или, как в моем случае, сохранено в файле для чтения и сравнения в более позднем сеансе.
Ответ 6
Использование
ls | % {(get-date) - $_. LastWriteTime}
Он может работать, чтобы получить diff. Вы можете заменить ls
на один файл.
Ответ 7
Чуть проще - используйте командлет new-timespan
, который создает временной интервал с текущего времени.
ls | where-object {(new-timespan $_.LastWriteTime).days -ge 1}
показывает все файлы, не написанные на сегодняшний день.