Pfade aus CSV mit Powershell überwachen
Hallo zusammen,
ich soll mehrere Pfade mit PowerShell überwachen. Die Pfade sind in einer CSV Datei enthalten:
Ich hätte das jetzt via PowerShell in ein Array gepackt und dann in einer Schleife überwachen wollen, nur leider sind meine PowerShell Skills ungefähr so wie meine Skills als Sushikoch ;)
Jemand einen Tipp wie man damit am besten umgehen kann und soll?
Freue mich über Tipps.
Danke und schönen Abend.
ich soll mehrere Pfade mit PowerShell überwachen. Die Pfade sind in einer CSV Datei enthalten:
Aufbau CSV
Path
C:\Test
C:\Test2
etc.
Ich hätte das jetzt via PowerShell in ein Array gepackt und dann in einer Schleife überwachen wollen, nur leider sind meine PowerShell Skills ungefähr so wie meine Skills als Sushikoch ;)
Jemand einen Tipp wie man damit am besten umgehen kann und soll?
Freue mich über Tipps.
Danke und schönen Abend.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2762337614
Url: https://administrator.de/contentid/2762337614
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo,
ja so ungefähr. Was überwachen? Datei Änderung? Neue Dateien? Was soll damit passieren?
Was ist wenn niemand angemeldet ist? Als Dienst gewünscht?
Lock mit einbauen? Wenn Script läuft, quasi mit running.lck verhindern, dass es erneut gestartet wird? Kannn auch mal Probleme machen. Lock dann manuell entfernen oder via Function weglöschen und neu erstellen lassen? Damit es sich nicht totrennt....
Was aber ist das Ziel? Bei Datum auf Modify und Creation Date achten. Nicht immer ändert sich letzteres -NTFS Tunnel.
https://www.msxfaq.de/code/filsystemtunnel.htm
Dat Ding nennt sich auf den Markt auch mal "Hotfolder". Kannst das ja mal in die Suche einbeziehen.
ja so ungefähr. Was überwachen? Datei Änderung? Neue Dateien? Was soll damit passieren?
Was ist wenn niemand angemeldet ist? Als Dienst gewünscht?
Lock mit einbauen? Wenn Script läuft, quasi mit running.lck verhindern, dass es erneut gestartet wird? Kannn auch mal Probleme machen. Lock dann manuell entfernen oder via Function weglöschen und neu erstellen lassen? Damit es sich nicht totrennt....
Was aber ist das Ziel? Bei Datum auf Modify und Creation Date achten. Nicht immer ändert sich letzteres -NTFS Tunnel.
https://www.msxfaq.de/code/filsystemtunnel.htm
Dat Ding nennt sich auf den Markt auch mal "Hotfolder". Kannst das ja mal in die Suche einbeziehen.
Achso. Ja kein Ding. Hat ich selber mal gebaut um eingescannte Dokument zu prüfen. Ob sie vom Mirth Server auch brav ins DMS gebeamt werden.
Alle paar Minuten geprüft und dann ist gut.
10 - 15 min. heisst aber auch, dass wir hier auf eine Dauer Schleife verzichten können. Also iterieren der CSV JA, aber nicht im Script bleiben. Reicht wenn man es über Taskplaner dann erneut alle x min. aufruft.
Nagios länger nicht gehabt. Was verlangt die Schnittstelle? Antwort von der PS als Parameter? Also wie pumpen wir unser Ergebnis rein? Da müsstest mir mal kurz helfen.
Hier mal Snippet von mir! Nicht volltändig! -9 min und Datei wird für E-Mail Versand (Attachmend) vorbereitet. Du kannst also damit in der inneren Schleife dann auch pro Datei was auslösen. In deinen Fall aber wohl nicht gewünscht.
Alle paar Minuten geprüft und dann ist gut.
10 - 15 min. heisst aber auch, dass wir hier auf eine Dauer Schleife verzichten können. Also iterieren der CSV JA, aber nicht im Script bleiben. Reicht wenn man es über Taskplaner dann erneut alle x min. aufruft.
Nagios länger nicht gehabt. Was verlangt die Schnittstelle? Antwort von der PS als Parameter? Also wie pumpen wir unser Ergebnis rein? Da müsstest mir mal kurz helfen.
Hier mal Snippet von mir! Nicht volltändig! -9 min und Datei wird für E-Mail Versand (Attachmend) vorbereitet. Du kannst also damit in der inneren Schleife dann auch pro Datei was auslösen. In deinen Fall aber wohl nicht gewünscht.
$heute = (Get-Date ).AddMinutes(-9).ToString('MM\/dd\/yyyy HH:mm:ss')
$timestamp = (Get-Date ).ToString('yyyyMMdd_HHmmss_')
$files=Get-ChildItem "F:\convert2epa\" | Where-Object {-not $_.PSIsContainer -and $_.CreationTime -lt $heute }
Foreach($file in $files)
{
$SourceFile=$file.FullName
$ErrorFolder=$file.DirectoryName + "\Error2Mail\"
$ErrorFolderFile=$file.DirectoryName + "\Error2Mail\"+$timestamp+$file.Name
Write-Host “Attaching File :- ” $ErrorFolderFile
Move-Item $SourceFile $ErrorFolder -Force
$alt =$ErrorFolder + $file.Name
$neu = $timestamp + $file.Name
Rename-Item -Path $alt -NewName $neu
$attachment = New-Object System.Net.Mail.Attachment –ArgumentList $ErrorFolderFile
$msg.Attachments.Add($attachment)
}
Servus.
Hatten wir hier zwar schon diverse Threads zu, aber ist halt wie immer ...
Ausgehend von eine so formatierten Datei
In den Taskplaner gepackt (Pfade und Ausgabe natürlich an deine Bedürfnisse anpassen)
Oder als Dauerschleife (schlechter zu managen und abzufragen).
Grüße Uwe
Hatten wir hier zwar schon diverse Threads zu, aber ist halt wie immer ...
Ausgehend von eine so formatierten Datei
Path
C:\Test
C:\Test2
$csv = Import-CSV 'E:\pfade.csv' -Delimiter ";"
$csv.Path | ?{Get-ChildItem $_ -File -EA SIlentlyContinue | ?{$_.LastWriteTime -lt (get-date).AddMinutes(-10)}} | %{
"'$_' hat Dateien älter als 10 Minuten."
}
Oder als Dauerschleife (schlechter zu managen und abzufragen).
$csv = Import-CSV 'E:\pfade.csv' -Delimiter ";"
while($true){
$csv.Path | ?{Get-ChildItem $_ -File -EA SilentlyContinue | ?{$_.LastWriteTime -lt (get-date).AddMinutes(-10)}} | %{
write-host "'$_' hat Dateien älter als 10 Minuten."
}
sleep -Seconds 60
}
Sinn macht es einen Task zu erstellen, der Powershell aufruft und das einmal durchlaufen lässt. Das Ergebnis kann dann Richtung Nagios geschickt werden.
Wenn da nur eine Liste mit Pfaden drin steht, braucht es keine CSV dafür
Ist jetzt nicht getestet oder optimiert:
Wenn da nur eine Liste mit Pfaden drin steht, braucht es keine CSV dafür
Ist jetzt nicht getestet oder optimiert:
$Pfade=Get-Content "c:\Pfade.csv"
$Datum=Get-Date
foreach($Pfad in $Pfade){
Get-Childitem -recurse $Pfad |%{
if($_.LastWriteTime -lt ($Datum.AddMinutes(-10))){
$aelter=$true
break
}
}
}
if($aelter){
return 1
}else{return 0}
Jepp das geht so nicht, das sollte das machen was du vorhast, wenn die Überschrift der CSV tatsächlich "Pfad" und nicht "Path" wie oben geschrieben ist und der Pfad auch stimmt.
$csv = Import-CSV '.\Scripts\test.csv'
$pathes = $csv.Pfad | ?{Get-ChildItem $_ -File -EA SilentlyContinue | ?{$_.LastWriteTime -lt (get-date).AddMinutes(-10)}}
if ($pathes) {
Write-Host "Warning: In the following pathes are files oder than 10 minutes:`n$($pathes -join "`n")"
$host.SetShouldExit(1)
}else{
Write-Host "OK."
$host.SetShouldExit(0)
}
Zitat von @IT-Capitain:
Wie bekomme ich denn noch untergebracht, dass nur spezielle Filetypes geprüft werden sollen und keine Ordner?
Wie bekomme ich denn noch untergebracht, dass nur spezielle Filetypes geprüft werden sollen und keine Ordner?
Bei mehreren Endungen und bei nicht rekursiver Suche muss ein Wildcard zum Pfad hinzugefügt werden.
$pathes = $csv.Pfad | ?{Get-ChildItem "$_\*" -File -Include *.xml,*.zip -EA SilentlyContinue | ?{$_.LastWriteTime -lt (get-date).AddMinutes(-10)}}
$pathes = $csv.Pfad | ?{Get-ChildItem $_ -File -Filter *.xml -EA SilentlyContinue | ?{$_.LastWriteTime -lt (get-date).AddMinutes(-10)}}
$pathes = $csv.Pfad | ?{Get-ChildItem $_ -File -Filter *.xml -EA SilentlyContinue | ?{$_.Extension -eq '.xml' -and $_.LastWriteTime -lt (get-date).AddMinutes(-10)}}
Powershell Leitfaden für Anfänger