schloegel-edv
Goto Top

Task bei Logout (zB. über GPO) aber nur alle bestimmte Tage ausführen

Hallo,

Frage an die Profis unter Euch: Die User arbeiten im Terminalserverbetrieb mit einer Software, die nach etwa 1 Monat einen Cache vollaufen lässt. Per Hand kann ich mit einem Powerscriptbefehl als angemeldeter User den Cache manuell bereinigen.

Meine Idee war jetzt, dass das doch auch automatisch gehen müsste. Ein Script, was beim Logout über GPO gestartet wird. Script prüft zB. welcher Wochentag heute ist.
Ist es beispielsweise Montag, wird das Script ausgeführt, ansonsten wird der Logout sofort durchgeführt. Man könnte es auch aller x Tage ausführen (aller 20 oder 30 Tage würde ja reichen) oder auch zufällig (aber was ist das dann genau...).

Jeden Tag soll es aber nicht laufen, weil das Ausführen des Scriptes etwas dauert (würde dann ja auch über den Taskplaner gehen).

Hat da jemand eine Idee? Vielleicht könnte man hieraus etwas bauen: tasks zufällig ausführen
Aber ich habe da keinerlei Erfahrungen.

Danke im Voraus!

Content-ID: 385000

Url: https://administrator.de/forum/task-bei-logout-zb-ueber-gpo-aber-nur-alle-bestimmte-tage-ausfuehren-385000.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

SeaStorm
SeaStorm 30.08.2018 um 17:28:34 Uhr
Goto Top
Hi

in Powershell
if ((get-date).DayOfWeek -eq "Thursday")   
{
"Machwas"  
}
DerWoWusste
DerWoWusste 30.08.2018 um 17:33:47 Uhr
Goto Top
Jeden Tag soll es aber nicht laufen, weil das Ausführen des Scriptes etwas dauert (würde dann ja auch über den Taskplaner gehen).
Aber der Task kann doch mühelos so eingestellt warden, dass er nur an bestimmten Tagen läuft.
schloegel-edv
schloegel-edv 30.08.2018 um 17:58:00 Uhr
Goto Top
Ja, aber nicht beim Logout.
DerWoWusste
DerWoWusste 30.08.2018 um 18:08:10 Uhr
Goto Top
Richtig, Denkfehler bei mir.
schloegel-edv
schloegel-edv 30.08.2018 aktualisiert um 18:16:11 Uhr
Goto Top
Die erste Antwort funktioniert schon mal gut. Danke!

Gäbe es denn noch eine Möglichkeit aller 20 Logouts? Ich hatte mal was gelesen, wie jemand dazu bei jeder Ausführung einer Datei einen Buchstaben zugefügt hat.
Hat die Datei dann irgendwann die endgültige Form, wie zum Beispiel "aaaaaaaaaaaaaaaaaaaaa.txt" wird der Befehl ausgeführt und diese Datei weggelöscht. Beim nächsten Logout beginnt alles wieder von vorn. Wäre auch die Frage, wo man die Datei dann hinspeichert. Wäre ja pro User eine eigene Datei...
DerWoWusste
DerWoWusste 30.08.2018 um 18:30:04 Uhr
Goto Top
Noch eine andere Idee: lass das Koppeln an den Logoff und mach es des Nachts, und zwar so:
for /f %%a in ('dir c:\users /b') do del c:\users\%%a\...Cacheordner\*.*  

Dann brauchst Du dir um alles Weitere keine Gedanken mehr zu machen.
schloegel-edv
schloegel-edv 30.08.2018 um 18:45:40 Uhr
Goto Top
Das würde vermutlich auch nicht gehen.

Der Befehl zum Ausführen lautet:

C:\Program Files (x86)\Kerio\Outlook Connector (Offline Edition)\DbBackup.exe s <Outlook-Profilename>

Er würde mit der obigen Variante vermutlich nicht das Outlookprofil des Users finden, oder?
DerWoWusste
DerWoWusste 30.08.2018 um 19:03:28 Uhr
Goto Top
Um das zu beantworten, müsstest Du verraten, was dbbackup.exe den effektiv tut.
137084
137084 30.08.2018, aktualisiert am 19.09.2018 um 11:56:56 Uhr
Goto Top
# Registry-Pfad
$key = 'HKCU:\Software\DBBackup'  
# Wenn Key nicht existiert
If (!(Test-Path $key)){
    # Neue Property im Key hinzufügen und den Counter gleichzeitig in der Variablen $val initialisieren
    [int]$val = New-ItemProperty -Path $key -Name counter -PropertyType REG_DWORD -Value 0 -Force | select -Expand counter
}else{
    # Key existiert, lese die Property aus und speichere den Wert in der Variablen $val
    [int]$val = Get-ItemProperty -Path $key -Name counter | select -Expand counter
}
# Variable um eins erhöhen
$val++
# Wenn Wert größer oder gleich 20 ist dann ...
If ($val -ge 20){
     # Führe Programm aus
     & 'C:\Program Files (x86)\Kerio\Outlook Connector (Offline Edition)\DbBackup.exe' s '<Outlook-Profilename>'  
     # setze Counter wieder auf 0
     $val = 0
}
# Setze Property in der Registry
Set-ItemProperty -Path $key -Name counter -Value $val -Force
Gruß Werner
schloegel-edv
schloegel-edv 03.09.2018 aktualisiert um 22:07:57 Uhr
Goto Top
Hallo Werner,

entschuldige, ich bin erste heute wieder dazu gekommen, zu lesen.

Herzlichen Dank für so viel Mühe.

Kannst Du mal die Zeilen etwas kommentieren, so dass ich "Dummie" das besser verstehe? Soweit ich das lese, legts Du einen Schlüssel in der Registry an, was ja sozusagen für jeden User funktionieren würde.

Besten Dank!
schloegel-edv
schloegel-edv 29.10.2018 aktualisiert um 23:28:32 Uhr
Goto Top
Herzlichen Dank nochmals.

Es muss noch ein Fehler drin gewesen sein, denn zu erst funktionierte das Script nicht. Er brach immer ab, mit der Meldung, dass der Schlüssel nicht vorhanden sei. Ich habe dann aus einem anderen Script noch etwas eingebaut. Nun legtn er zwar zwei Schlüssel an, lässt man das Script dann im Fenster laufen, kommt auch noch eine Fehlermeldung im Falle, dass der Schlüssel noch gar nicht da ist. Das Script legt ihn aber dennoch an. Ist der Schlüssel dann einmal da, funktioniert das Script tadellos. Counter zählt hoch, Befehl wird ausgeführt, Counter zurückgesetzt und alles beginnt von vorn.

Warum noch dieser Fehler kommt (der nicht stört) kann ich aber nicht klären, das ist sozusagen ein Schönheitsfehler. Hier nochmal das bei mir jetzt funktionierende Script:

# Registry-Pfad 
$registryPath = "HKCU:\Software\DBBackup"  
$Name = "Version"  
$value = "1"  
$key = 'HKCU:\Software\DBBackup'   

# Wenn Key nicht existiert 
If (!(Test-Path $registryPath))
{ 
	New-Item -Path $registryPath -Force | Out-Null
	New-ItemProperty -Path $registryPath -Name $name -Value $value `
	-PropertyType DWORD -Force | Out-Null
        [int]$val = New-ItemProperty -Path $key -Name counter -PropertyType REG_DWORD -Value 0 -Force | select -Expand counter 

}else{ 

   # Key existiert, lese die Property aus und speichere den Wert in der Variablen $val 
   [int]$val = Get-ItemProperty -Path $key -Name counter | select -Expand counter 
} 



# Variable um eins erhöhen 

$val++ 

# Wenn Wert größer oder gleich 20 ist dann ... 

If ($val -ge 20){ 

     # Führe Programm aus 
     & 'C:\Program Files\Kerio\Outlook Connector (Offline Edition)\DbBackup.exe' s 'Outlook'   
     # setze Counter wieder auf 0 
     $val = 0 
} 


# Setze Property in der Registry 
Set-ItemProperty -Path $key -Name counter -Value $val -Force