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".
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.
(ls $source).LastWriteTime
("ls", "dir", ou "gci" sont l'alias par défaut pour Get-ChildItem.)
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;
}
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.
(Get-Item $source).LastWriteTime
est ma façon préférée de le faire.
Utiliser
ls / % {(get-date) - $_.LastWriteTime }
Il peut fonctionner pour récupérer la diff. Vous pouvez remplacer ls
avec un seul fichier.
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.