Comparer simple PowerShell LastWriteTime

j'ai besoin d'un script PowerShell qui puisse accéder aux propriétés d'un fichier et découvrir le LastWriteTime comparer avec la date courante et retourner la différence de date.

j'ai quelque chose comme cela...

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

...mais je ne peux pas lancer le LastWriteTime vers un type de données" DateTime". Ça dit, "ne peut pas se convertir "@{LastWriteTime=...date...}" Système".DateTime".

16
demandé sur Peter Mortensen 2009-06-19 20:46:20

7 réponses

essayez ce qui suit.

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

ceci fait partie de l'Item propriété bizarrerie. Lorsque vous exécutez Get-ItemProperty, ce n'est pas la valeur qui est retournée, mais la propriété. Vous avez un niveau d'indirection pour obtenir de la valeur.

22
répondu JaredPar 2009-06-19 16:58:21
(ls $source).LastWriteTime

("ls", "dir", ou "gci" sont l'alias par défaut pour Get-ChildItem.)

12
répondu brianary 2011-02-28 21:45:38

j'ai un exemple que je voudrais partager

$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;
}
6
répondu richbria90 2012-09-18 19:16:27

Je ne peux pas blâmer aucune des réponses ici pour L'OP accepté l'un d'eux comme résoudre leur problème. Cependant, je les ai trouvés défectueux. Lorsque vous produisez le résultat de l'affectation à la variable, il contient de nombreuses lignes vides, pas seulement la réponse recherchée. Exemple:

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

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



PS C:\brh> 

je suis fan de deux choses en code, la concision et la justesse. brianary a le droit de lui pour la concision avec la pointe du chapeau à Roger Lipscombe mais les deux manquent la justesse dû pour les lignes supplémentaires dans le résultat. Voici ce que je pense que l'OP cherchais depuis c'est ce qui m'a franchi la ligne d'arrivée.

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

PS C:\brh> 

notez l'absence de lignes supplémentaires, seulement celle que PowerShell utilise pour séparer les invites. Maintenant cela peut être assigné à une variable pour comparaison ou, comme dans mon cas, stocké dans un fichier pour lecture et comparaison dans une session ultérieure.

5
répondu Jack Pines 2014-12-12 22:44:27

(Get-Item $source).LastWriteTime est ma façon préférée de le faire.

4
répondu Roger Lipscombe 2012-01-06 07:17:29

Utiliser

ls / % {(get-date) - $_.LastWriteTime }

Il peut fonctionner pour récupérer la diff. Vous pouvez remplacer ls avec un seul fichier.

2
répondu Raoul Supercopter 2017-05-28 09:46:55

légèrement plus facile-utilisez le new-timespan cmdlet, qui crée un intervalle de temps à partir de l'heure courante.

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

affiche tous les fichiers non écrits à ce jour.

1
répondu gbjbaanb 2015-11-30 12:56:06