Checking Time Variance on multiple files

Welcome Forums General PowerShell Q&A Checking Time Variance on multiple files

Viewing 0 reply threads
  • Author
    Posts
    • #5270
      Participant
      Topics: 1562
      Replies: 0
      Points: 1
      Rank: Member

      by Lahru at 2012-11-12 12:15:54

      I have process in place in my network where files are moved from 1 directory to another via script(s).
      Then there is a service that looks at that other directory and imports either .pdf, .tif, or .jpg files into a program.
      This process of importing occurs once per minute during a specified period of time, something like 16 hours.
      Once the files are successfully imported they are auto-removed from this "IMPORT" directory

      Sometimes the service hangs or otherwise fails to complete an import, but remains in a ‘running’ state.

      If I can check the LastWriteTime of the files in the "import" directory and compare to the current system time I can launch an email at admins notifying them that something is wrong, IF the variance is outside of a specified time frame.

      Problem is] Multiple files. There are sometimes multiple files being dealt with so I might have 2 or more PDFs that got moved into here, but the service didn’t do the actual import and as a result they might remain behind. Also, the name of the file(s) will never be the same.

      Is there a way for me to handle multiple files like this?
      Multiple file Types as well? Like pdf &/OR jpg?

      I have tried the following, but to no avail:
      $dir = "\\Some\path"
      $pdf = Get-ChildItem $dir\*.pdf
      $Variance = ((Get-Date) - $pdf.LastWriteTime).TotalMinutes

      I tried to work this out by entering each line of code 1×1 into a console, but got this on the last:
      Cannot find an overload for "op_Subtraction" and the argument count: "2".
      At line:1 char:1
      + $Variance = ((Get-Date) - $tif.LastWriteTime).TotalMinutes

      by MattG at 2012-11-12 15:35:26

      You need to iterate over each file returned. The following should do the trick for you:
      $pdfs = Get-ChildItem "C:\Some\Path\" -Recurse -Include '*.pdf'
      foreach ($pdf in $pdfs) { ((Get-Date) - $pdf.LastWriteTime).TotalMinutes }
      That should get you going.

      by Lahru at 2012-11-13 08:53:04

      Ok so I can see how that works. It doesn’t need to be recursive since files in the subfolders shouldn’t trigger any action.
      I need to include some kind of If-Else statement though. I also need to include more than one type of file. Can I do 2 foreach loops? Like so]$dir = \\Some\Path
      $pdfs = Get-ChildItem $dir -Include *.pdf
      $tifs = Get-ChildItem $dir -Include *.tif

      foreach ($pdf in $pdfs) { ((Get-Date) – $pdf.LastWriteTime).TotalMinutes }
      foreach ($tif in $tifs) { ((Get-Date) – $tif.LastWriteTime).TotalMinutes }[/powershell]Here is the Logic I am trying to follow$path = \\some\path
      $pdfs = Get-ChildItem $dir -Include *.pdf
      $tifs = Get-ChildItem $dir -Include *.tif
      $TimeFrame = 2

      foreach ($pdf in $pdfs) { ((Get-Date) - $pdf.LastWriteTime).TotalMinutes }
      If 'Time variance for any Pdf is -gt $TimeFrame {do something} else {do nothing}'

      foreach ($tif in $tifs) { ((Get-Date) - $tif.LastWriteTime).TotalMinutes }
      If 'Time variance for any Tif is -gt $TimeFrame {do something} else {do nothing}'
      I hope that makes sense. How do I work in the if statements?

      by MattG at 2012-11-13 09:05:20

      No need to do that twice. The -Include option takes an array of strings (check out Get-Help Get-ChildItem). The following will handle both pdf and tif files:
      $path = \\some\path\*
      $files = Get-ChildItem $path -Include '*.pdf','*.tif'
      $TimeFrame = 2

      foreach ($file in $files) { ((Get-Date) - $file.LastWriteTime).TotalMinutes }Also, I would have Get-ChildItem only return files:

      v2 Syntax: Get-ChildItem $path -Include '*.pdf','*.tif' | ? { ! $_.PSIsContainer }v3 Syntax: Get-ChildItem $path -Include '*.pdf','*.tif' -File

      by Lahru at 2012-11-13 09:25:37

      DOH! Should have seen that.
      What about the IF portion(s)?

      by Lahru at 2012-11-13 11:18:42

      Does this look right?$dir = "\\Some\Path"
      $TimeFrame = 2
      $files = Get-ChildItem $dir -Include '*.pdf', '*.tif' | ? { ! $_.PSIsContainer }

      foreach ($file in $files)
      {
      if (((Get-Date) - $file.LastWriteTime).TotalMinutes -gt $TimeFrame)
      { Send-MailMessage -From [email protected] -To "Recipient <[email protected]>" -Subject "Subject" -Body "Body of the email message" -SmtpServer ThisSmtpServer.Somewhere.net } }

Viewing 0 reply threads
  • The topic ‘Checking Time Variance on multiple files’ is closed to new replies.