stefankittel
Goto Top

Windows Software, bei Änderung einer Text-Datei auf einem Webserver eine Meldung

Hallo,

ich suche eine Software für Windows.
Die soll in einem Intervalle von ca. 60 Sekunden eine Text-Datei auf einem Web-Server auf Änderungen prüfen.
Oder allgemein die Ausgabe einer URL.

Wenn sich der Inhalt geändert hat, soll ein Top-Most-Fenster mit dem Inhalt angezeigt werden die der Benutzer bestätigen muss. Man darf die Software auch nicht schliessen.

Kennt Jemand so eine fertig Software?
Sonst programmiere ich das selber... aber wenn es das schon gibt...

Stefan

Content-ID: 668873

Url: https://administrator.de/contentid/668873

Ausgedruckt am: 21.11.2024 um 20:11 Uhr

LordXearo
LordXearo 20.10.2024 um 08:40:18 Uhr
Goto Top
Hallo,

changedetection kann das wahrscheinlich.

https://github.com/dgtlmoon/changedetection.io

Gruß
Xearo
Crusher79
Crusher79 20.10.2024 um 17:42:22 Uhr
Goto Top
Hallo,

hab keien im Kopf.

https://powershell.one/tricks/filesystem/filesystemwatcher

Das hab ich mal als Alternative zum Selberbau ausgegraben. Ist so einiges los in dem Script. Der Rest fehlt natürlich.

Was ist wenn bestätigen länger dauert und die nächsten Änderungen eingehen? Müsste da nicht noch ein Eventhandler im Hintergrund laufen? Queue zum abarbeiten?
mayho33
mayho33 21.10.2024 um 11:14:56 Uhr
Goto Top
Hm... Bei gleichzeitigen Dateizugriffen hast du aber ein Problem. Willst du nur die Zugriffen überwachen, wäre es besser die Ordnerüberwachung zu aktivieren. So kannst du zumindest die Zugriffe sehen.

Grüße!
colinardo
colinardo 21.10.2024 aktualisiert um 12:53:12 Uhr
Goto Top
Servus,
kleines Powershell Skript
# url to load text content from 
$URL = "https://domain.tld/file.txt"  
# request interval
$INTERVAL_SECONDS = 60
# content to display
$DISPLAY_TEXT = "Inhalt der Datei hat sich geändert! Bitte mit OK bestätigen."    
# =============
Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
# webclient
$wc = New-Object System.Net.WebClient -P @{Encoding = [System.Text.Encoding]::UTF8}
# fullscreen form
$form = New-Object System.Windows.Forms.Form -Property @{
    Size = '200,200'    
    WindowState = 'Maximized'    
    TopMost = $true
    BackColor = [System.Drawing.Color]::Blue
    ControlBox = $false
    FormBorderStyle ='None'    
}
$txtInfo = New-Object System.Windows.Forms.Label -Property @{
    Dock = [System.Windows.Forms.DockStyle]::Fill
    TextAlign = 'MiddleCenter'    
    Font = New-Object System.Drawing.Font("Calibri",25,[System.Drawing.FontStyle]::Regular)    
    Text = $DISPLAY_TEXT
    ForeColor = [System.Drawing.Color]::White
    Size = '200,200'    
}
$btn = New-Object System.Windows.Forms.Button -Property @{
    Size = '150,50'    
    Location = '0,0'    
    Text = 'OK'    
    Font = New-Object System.Drawing.Font("Calibri",15,[System.Drawing.FontStyle]::Bold)    
    ForeColor = [System.Drawing.Color]::White
    BackColor = [System.Drawing.Color]::Green
}
$form.add_Load({
    $btn.Left = ([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width / 2) - ($btn.Width/2)
    $btn.Top = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height - 200
})
$btn.add_Click({
    $form.Close()
})
$form.Controls.AddRange(@($btn,$txtInfo))

# get content from web scriptblock
$get_url_content = {
    try{
        return $wc.DownloadString($URL)
    }catch{
        write-host "Error loading file: $($_.Exception.Message)." -F Red  
        return $null
    }
}
# get initial content
$last = .$get_url_content

write-host "Waiting for changes ..." -F Green  
while($true){
    # get current value 
    $current = .$get_url_content
    # if value changed display fullscreen message
    if($current -ne $null -and $last -ne $current){
        [void]$form.ShowDialog()
        $last = $current
    }
    sleep -Seconds $INTERVAL_SECONDS
}
Das war jetzt natürlich nur ein Beispiel. Du kannst das ganze natürlich auch regelmäßig über den Taskplaner laufen lassen dann brauchst du die Schleife nicht.

Alternativ zum Herunterladen der ganzen Datei kann man das ganze auch über das Vergleichen des last-modified Headers und einer reinen HEAD-Abfrage vergleichen falls das für deinen Fall ausreichen würde, dann entfällt das Laden des Inhalts der Textdatei.

Grüße Uwe