2017-10-12 8 views
0

Erster Beitrag überhaupt. Keine Ahnung, was ich mache. Einfach nur mit mir ..Vergleichen Sie die creationtime von mkv -powershell

Ich wurde beauftragt, ein Skript zu erstellen, das überprüft, ob die Office-Kameras, die wir eingerichtet haben, ihre Feeds auf die Freigabe "Kamera" auf unserem Windows 2016 Storage Server hochgeladen haben . Wenn die NEUESTE .mkv im Vergleich zur aktuellen Zeit (get-date) mehr als eine Stunde alt ist, muss die "Problem" -Kamera manuell neu gestartet werden. (. Keine Notwendigkeit, Skript, dass ein Teil)

Hier ist, was mein Director bisher geschrieben hat:

#Variable Definitions start here 

$numhours = 1 

Get-ChildItem "d:\Shares\Cameras" | Foreach {  

$folderToLookAt = ($_.FullName + "\*.mkv") 
$result = Get-ChildItem -Recurse $folderToLookAt | Sort-Object CreationTime -Descending 


echo $result[0].FullName 
echo $result[0].CreationTime 

} 

Die erste Variable wirklich noch nicht verwendet wird, aber ich bin ein bisschen dumm-geschlagen wie das, was als nächstes tun. Das obige gibt die vollständigen Namen und Erstellungszeiten erfolgreich der neuesten .mkvs zurück

Vorschläge für den nächsten Teil? Vielen Dank im Voraus für Anregungen.

+0

Wow! Danke für alle Vorschläge Herren/Damen. Ich werde sicher mehr in der Zukunft veröffentlichen. Freut mich zu sehen, dass die Community super reagiert. – Roachmen

Antwort

0

ich deine Pfade aussehen wie ich davon aus:

D:\Shares\Cameras\Camera1\file1.mkv 
D:\Shares\Cameras\Camera1\file2.mkv 
D:\Shares\Cameras\Camera2\file1.mkv 
D:\Shares\Cameras\Camera2\file2.mkv 
D:\Shares\Cameras\Camera3\file1.mkv 
. 
. 
. 

Wenn ja, würde ich etwas tun wie folgt:

# The path to your files 
$CameraShareRoot = 'D:\Shares\Cameras'; 

# Number of Hours 
$NumberOfHours = 1; 

# Date and time of significance. It's $NumberOfHours in the past. 
$MinFileAge = (Get-Date).AddHours(- $NumberOfHours); 

# Get all the folders at the camera share root 
Get-ChildItem -Path $CameraShareRoot -Directory | ForEach-Object { 
    # Get the most recently created file in each folder 
    $_ | Get-ChildItem -Recurse -Filter '*.mkv' -File | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 
} | Where-Object { 
    # Remove any files that were created after our datetime 
    $_.CreationTime -lt $MinFileAge; 
} | Select-Object -Property FullName, CreationTime 

Dies wird nur den vollständigen Dateinamen und die Erstellungszeit für veraltete Kameras ausgeben.

Sie könnten etwas tun Sie sich selbst einen Bericht per E-Mail, wenn die Ergebnisse alle Dateien haben:

# The path to your files 
$CameraShareRoot = 'D:\Shares\Cameras'; 

# Number of Hours 
$NumberOfHours = 1; 

# Date and time of significance. It's $NumberOfHours in the past. 
$MinFileAge = (Get-Date).AddHours(- $NumberOfHours); 

# Get all the folders at the camera share root, save the results to $StaleCameraFiles 
$StaleCameraFiles = Get-ChildItem -Path $CameraShareRoot -Directory | ForEach-Object { 
    # Get the most recently created file in each folder 
    $_ | Get-ChildItem -Recurse -Filter '*.mkv' -File | Sort-Object -Property CreationTime -Descending | Select-Object -First 1; 
} | Where-Object { 
    # Remove any files that were created after our datetime 
    $_.CreationTime -lt $MinFileAge; 
} 

# If there are any stale camera files 
if ($StaleCameraFiles) { 
    # Send an email 
    $MailMessage = @{ 
     SmtpServer = 'mail.example.com'; 
     To = '[email protected]'; 
     From = '[email protected]'; 
     Subject = 'Stale Camera Files'; 
     Body = $StaleCameraFiles | Select-Object -Property FullName, CreationTime | ConvertTo-Html -Fragment | Out-String; 
     BodyAsHtml = $true; 
    } 
    Send-MailMessage @MailMessage; 
} 

Im Allgemeinen werden Sie LastWriteTime statt CreationTime zu verwenden, da diese durch eine Datei bewegen aktualisiert werden oder kopieren, aber vielleicht wollen Sie das hier.

0

Sie müssen das CreationTime Datum mit (Get-Date).AddHours(-1) vergleichen. Mit der Methode AddHours können Sie der DateTime Stunden hinzufügen, aber auch subtrahieren.

können Sie das folgende Beispiel verwenden:

$Path = 'd:\Shares\Cameras' 
$CreationTime = Get-ChildItem -Path $Path -Filter *.mkv | 
    Sort-Object -Property CreationTime -Descending | 
    Select-Object -First 1 -ExpandProperty CreationTime 
if ($CreationTime -lt (Get-Date).AddHours(-1)) { 
    # your action here (restart, send mail, write output, ...) 
} 

Es Ihren Code ein wenig auch optimiert. ;)

+0

Es macht auch nicht dasselbe, der ursprüngliche Code sucht einmal pro Kameraunterverzeichnis, deins sucht nach einer mkv-Datei im Stammverzeichnis – TessellatingHeckler

+0

Wenn das eine Voraussetzung ist, kann ein Wildcard zu '$ Path' hinzugefügt werden, wie' d: \ Shares \ Cameras \ * \ 'oder' -Recurse' hinzugefügt zu 'Get-ChildItem', abhängig von der Szenario/Ordnerstruktur – vrdse

0
$LatestFile = Get-ChildItem C:\Users\Connor\Desktop\ | Sort CreationTime | Select -Last 1 
if ($LatestFile.CreationTime -gt (Get-Date).AddHours(-1)){ 
    #It's Currently Working 
} else { 
    #Do Other Stuff 
} 
0

try this:

Get-ChildItem "c:\temp" -Filter *.mkv -File | sort CreationTime -Descending | 
    select -First 1 | where CreationTime -lt (Get-Date).AddHours(-1) | 
     %{Write-Host "Alert !!" -ForegroundColor Red} 
1

invertieren die Logik - stattdessen alle Dateien zu suchen, zu sortieren, eine der letzten zu finden, und das Datum überprüft, um sie herum in die andere Richtung zu tun.

Suchen Sie nach Dateien, die seit dem Cutoff erstellt und Alarm, wenn keine gefunden wurden:

$cutOffTime = [datetime]::Now.AddHours(-1) 

Get-ChildItem "d:\Shares\Cameras" | Foreach {  

    $folderToLookAt = ($_.FullName + "\*.mkv") 
    $result = Get-ChildItem -Recurse $folderToLookAt | Where-Object { $_.CreationTime -gt $cuttoffTime } 

    if (-not $result) 
    { 
     "$($_.Name) has no files since the cutoff time" 
    } 
} 
+1

Das ist perfekt. Ich danke dir sehr!Jetzt muss ich nur noch eine IF-Anweisung erhalten, um E-Mails mit g-apps zu versenden, wenn es einen "No files since cutoff" -Vorfall gibt. Ich denke, das ist innerhalb meiner Fähigkeitsstufe. Prost! – Roachmen

Verwandte Themen