<# .Synopsis Skapat av Markus Jakobsson 2014-11-30 Syftet med scriptet är att schemalägga detta så att bilder laddas hem frekvent, detta för att eventuellt göra en stop motion, eller ha koll på allt som har hänt inom x antal dagar. schemalägg sedan scriptet så sköter detta sig själv, märker man att nått har hänt hemma så kan man sedan gå tillbaka och kolla detta. Syftet är att slippa att varje kamera ska ha en aktiverad FTP eller konfigueration, med scriptet så kan man i stort sett använda alla modärna kameror och logga bilder till samma struktur. .DESCRIPTION Scriptet tar följande input: -DestinationsMapp # Pekar på en mapp dit bilderna ska lagras. -CleanOldImages # Aktiverar städning av gamla bilder (default är 7 dagar) -DaysBackToKeep # Antal dagar som en bild får ligga innan den tas bort (så vida växeln -CleanOldImages används) För att ha någon nytta av detta scriptet så ska följande läggas till i slutet av scriptet innan det sparas. # Följande är exempel på en Hikvision kamera Download-WebCamImage -Websidan "http://DemoCam1/Streaming/channels/1/picture" -Destination $DestinationsMapp -filnamnet Entre -webUsername adm -webPassword password -RequiresPassword # Följande är exempel på en billig Dlink kamera. Download-WebCamImage -Websidan "http://10.1.0.39/image/jpeg.cgi" -Destination $DestinationsMapp -filnamnet Uterummet Förklaring: -Websidan # Ange länken dit din webkamera tillåter att du hämtar stillbilder. -Destination # OBS Editera inte detta utan använd $DestinationsMapp -filnamnet # Ange här vad du vill att bilderna och mappen ska döpas till. En del kameror kräver lösenord, använd då -webUsername adminkonto # om kontot du vill använda heter adminkonto -webPassword Passw0rd # lösenordet till kontot. -RequiresPassword # Aktiverar så att funktionen använder lösenord. .EXAMPLE . Följande skulle logga bilder från kameror till D:\temp\Overvakning\%Kameranamn% .\AutoDownloader.ps1 .EXAMPLE . Följande rad skulle ladda hem bilder till D:\temp\DemoMapp\CamFolder, ingen städning eller loggning skulle göras. .\AutoDownloader.ps1 -DestinationsMapp D:\temp\DemoMapp\CamFolder .EXAMPLE . Följande skulle spara bilder till samt att bilder äldre än 7 dagar skulle tas bort. .\AutoDownloader.ps1 -DestinationsMapp D:\temp\DemoMapp\CamFolder -CleanOldImages .EXAMPLE . Följande skulle spara alla bilder samt städa dessa efter 3 dagar, utöver detta så loggas alla steg som görs i en logfil, samt att information om vad som händer skrivs i promten. .\AutoDownloader.ps1 -DestinationsMapp D:\temp\DemoMapp\CamFolder -CleanOldImages -DaysBackToKeep 3 -loggning -verbose #> [cmdletbinding()] param( [string]$DestinationsMapp = "D:\temp", # Om inte annat annges så sparas bilderna till D:\temp default [switch]$CleanOldImages, [int]$DaysBackToKeep = 7, # Tar ej bort bilder äldre än 7 dagar. [switch]$loggning # Används för att skriva ut information om vad som händer i scriptet. ) # Editera inte dessa så vida du inte vet vad du gör. $DestinationsMapp = Join-Path -Path $DestinationsMapp -ChildPath "Overvakning" $BildFilter = "*.jpg" $Loggfilen = Join-Path -Path $DestinationsMapp -ChildPath "Övervakningslogg.log" $ErrorInfo = Join-Path -Path $DestinationsMapp -ChildPath "ERRORS.log" $FelandeFiler = Join-Path -Path $DestinationsMapp -ChildPath "FelandeBilder.log" if ($loggning){Out-File -InputObject "[$(get-date)][SCRIPT START]" -FilePath $Loggfilen -Append} function Download-WebCamImage { <# .Synopsis Script för att ladda hem bilder från kameror och liknande. .DESCRIPTION Scriptet används för att hämta bilder från olika enhter Skapad av Markus Jakobsson Version 1.0 - 2014-11-21 * Stöd för att hämta bilder från kameror med lösenord och utan lösenord. * sparar fil med unikt namn varje gång. .EXAMPLE Exampl på hur man laddar en bild med lösenord, ersätt "minkamera" med ditt ip eller dns namnet på din kamera .\Automatiserar-BildNerladdning.ps1 -Websidan "http://MinKamera/Streaming/channels/1/picture" -Destination D:\Loggmappen -filnamnet InneKamera -webUsername adm -webPassword password -RequiresPassword .EXAMPLE Exempel på hur man laddar hem bild utan lösenord, Ersätt "minkamera" med ditt ip eller dns namnet på din kamera .\Automatiserar-BildNerladdning.ps1 -Websidan "http://MinKamera/Streaming/channels/1/picture" -Destination D:\Loggmappen -filnamnet UteKamera #> [cmdletbinding()] param( [Parameter(Mandatory=$true)][string]$Websidan, # Exempelvis http://Mycamera/Streaming/channels/1/picture [Parameter(Mandatory=$true)][string]$Destination, # Sökväg dit bilden ska sparas. [Parameter(Mandatory=$true)][string]$filnamnet, # filnamnet. [string]$webUsername, # användere namnet på kameran. [string]$webPassword, # lösenord på kameran. [switch]$RequiresPassword # aktiverar eller inaktiveraer att kameran kräver ett lösenord för att visa bilden. ) begin { $WC = New-Object System.Net.WebClient if ($RequiresPassword){ $WC.Credentials = new-object System.Net.NetworkCredential($webUsername,$webPassword ,$null) } $TMPDestmapp = Join-Path -Path $Destination -ChildPath $filnamnet if (!(Test-Path $TMPDestmapp)) { New-Item -ItemType directory -Path $TMPDestmapp | Out-Null if ($loggning){Out-File -InputObject "[$(get-date)][Download-WebCamImage] Skapade Mappen $TMPDestmapp" -FilePath $Loggfilen -Append} } else { Write-Verbose "Mappen $TMPDestmapp finns redan" if ($loggning){Out-File -InputObject "[$(get-date)][Download-WebCamImage] Mappen $TMPDestmapp fanns redan" -FilePath $Loggfilen -Append} } } process { $filnamnet = "$filnamnet - $(Get-Date -UFormat "%Y-%m-%d _ %H %M %S").jpg" $totalpath = Join-Path -Path $TMPDestmapp -ChildPath $filnamnet try { $wc.DownloadFile($Websidan, $totalpath) # laddar hem bilden. if ($loggning){Out-File -InputObject "[$(get-date)][Download-WebCamImage] Laddade ner från $Websidan och spara $totalpath" -FilePath $Loggfilen -Append} } catch{ Write-Error "Kunde inte ladda hem bilden!" $error[1].Exception if ($loggning){Out-File -InputObject "[$(get-date)][ERROR][Download-WebCamImage] KUNDE EJ LADDA HEM FRÅN $Websidan och spara till $totalpath" -FilePath $Loggfilen -Append} Out-File -InputObject "[$(get-date)][ERROR][Download-WebCamImage] KUNDE EJ LADDA HEM FRÅN $Websidan och spara till $totalpath" -FilePath $ErrorInfo -Append Out-File -InputObject "[$(get-date)]$totalpath" -FilePath $FelandeFiler -Append } } end {$totalpath} } function Remove-OldImages { <# Funktionen städar bort bilder som är äldre än X dagar tillbaka. #> [cmdletbinding()] param( [int]$dagarTillbaka, # Antal dagar tillbaka som bilder får finnas kvar. [string]$huvudmapp # Mappen där alla filer finns som ska tas bort. ) begin { if ($loggning){Out-File -InputObject "[$(get-date)][Remove-OldImages] Påbörjar städning av filer äldre än $dagarTillbaka" -FilePath $Loggfilen -Append} } process { Write-Verbose "kommer att ta bort bilder som är äldre än $dagarTillbaka dagar" $ObjekAttTaBort = Get-ChildItem $DestinationsMapp -Filter $BildFilter -Recurse | Where-Object {$_.LastWriteTime -le ((get-date).AddDays(-$DaysBackToKeep))} Write-Verbose "[remove-OldImages]Hittade totalt $($ObjekAttTaBort.count) som är mer än $dagarTillbaka dagar gamla" if ($loggning){Out-File -InputObject "[$(get-date)][Remove-OldImages] Hittade totalt $($ObjekAttTaBort.count) som är mer än $dagarTillbaka dagar gamla" -FilePath $Loggfilen -Append} foreach ($objekt in $ObjekAttTaBort){ Write-Verbose "Tar nu bort bilden $($objekt.fullname)" try { if ($loggning){Out-File -InputObject "[$(get-date)][Remove-OldImages] Tar nu bort bilden $($objekt.fullname)" -FilePath $Loggfilen -Append} Remove-Item $($objekt.FullName) } catch{ if ($loggning){Out-File -InputObject "[$(get-date)][ERROR][Remove-OldImages] Fick fel när följand skulle tas bort: $($objekt.fullname)" -FilePath $Loggfilen -Append} if ($loggning){Out-File -InputObject "[$(get-date)][ERROR][Remove-OldImages] Fick fel när följand skulle tas bort: $($objekt.fullname)" -FilePath $ErrorInfo -Append} } } } end {} } ######################################################## ######################################################## ### Fyll här på med alla kameror du vill övervaka. ### ######################################################## ######################################################## ######################################################## #Download-WebCamImage -Websidan "http://DemoCam1/Streaming/channels/1/picture" -Destination $DestinationsMapp -filnamnet Entre -webUsername adm -webPassword password -RequiresPassword #Download-WebCamImage -Websidan "http://DemoCam2/Streaming/channels/1/picture" -Destination $DestinationsMapp -filnamnet Garaget -webUsername adm -webPassword password -RequiresPassword #Download-WebCamImage -Websidan "http://10.1.0.39/image/jpeg.cgi" -Destination $DestinationsMapp -filnamnet Uterummet ######################################################## ################ slut på kameror ####################### ######################################################## ######################################################## if ($CleanOldImages){ Write-Verbose "Startar funktionen för att ta bort gamla bilder." Remove-OldImages -dagarTillbaka $DaysBackToKeep } else {Write-Verbose "Växeln `"CleanOldImages`" har ej använts"} if ($loggning){Out-File -InputObject "[$(get-date)][SCRIPT END]" -FilePath $Loggfilen -Append} if ($loggning){Out-File -InputObject "" -FilePath $Loggfilen -Append}