senseless-creature
Goto Top

Geplante Optimierung - Zeitplan per Script anpassen

Hallo liebe Profis,

ich möchte gerne per VBS die "geplante Optimierung" unter "Laufwerke optimieren" auf "monatlich" setzen. Leider finde ich dazu keinen anderen Registry-Eintrag als HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction\Enable, der mich hier aber nicht weiter bringt.

Falls Jemand eine Idee haben sollte, bin ich sehr dankbar.

LG

Content-ID: 476359

Url: https://administrator.de/forum/geplante-optimierung-zeitplan-per-script-anpassen-476359.html

Ausgedruckt am: 22.12.2024 um 19:12 Uhr

140447
140447 22.07.2019 aktualisiert um 15:32:43 Uhr
Goto Top
Im Taskplaner im Optimierungs Task die Zeit anpassen, feddich. Kannste per Powershell oder auch schtasks.exe erledigen.
Senseless-Creature
Senseless-Creature 22.07.2019 um 15:42:05 Uhr
Goto Top
In etwa so?
objShell.Run ("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command hilf mir mal bitte weiter"), 1, True   

LG
140447
140447 22.07.2019 aktualisiert um 15:46:45 Uhr
Goto Top
Nö, man muss es nur hier nachlesen, Google wieder kaputt??
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/set-sc ...
Senseless-Creature
Senseless-Creature 23.07.2019 um 13:32:49 Uhr
Goto Top
Ich geb´s auf ist einfach zu hoch für mich - trotzdem danke für die Hilfestellung.

LG
colinardo
Lösung colinardo 23.07.2019 aktualisiert um 17:40:19 Uhr
Goto Top
Servus @Senseless-Creature ,
kein Problem, der entsprechende Powershell-Command lautet dafür wie folgt:
Set-ScheduledTask -Taskname "\Microsoft\Windows\Defrag\ScheduledDefrag" -Trigger (New-ScheduledTaskTrigger -DaysInterval 30 -At 00:00 -Daily) | Enable-ScheduledTask  
Setzt den Optimierungs-Task auf alle 30 Tage um 00:00 Uhr und aktiviert ihn.

Grüße Uwe
Senseless-Creature
Senseless-Creature 24.07.2019 um 07:20:58 Uhr
Goto Top
Vielen Dank für deine freundliche Hilfe - wenn ich den Zeitpunkt wie beschrieben so auf monatlich ändere, habe ich aber ein problem, wenn ich die Defragmentierung manuell öffne - die Fehlermeldung lautet dann wie folgt:

Möchten Sie die Standarteinstellung für die Optimierung wiederherstellen?
Die Speicheroptimierung verwendet derzeit angepasste Einstellungen , die von einem anderen Programm erstellt wurden. Sie müssen die benutzerdefinierten Einstellungen entfernen, um den Zeitplan ändern zu können.

Hier muß ich dann die Einstellung entfernen, da ich ansonsten manuell nicht mehr die Defragmentierung starten kann. Die Auswahl unter "geplante Optimierung" steht dann wieder auf "wöchentlich". Wie kann ich die Auswahl unter "geplante Optimierung" auf "monatlich" stellen, ohne daß die beschriebene Fehlermeldung erschein? Innerhalb der DefragUI funktioniert das doch auch..

LG
140447
Lösung 140447 24.07.2019 aktualisiert um 07:32:01 Uhr
Goto Top
Zitat von @Senseless-Creature:

Vielen Dank für deine freundliche Hilfe - wenn ich den Zeitpunkt wie beschrieben so auf monatlich ändere, habe ich aber ein problem, wenn ich die Defragmentierung manuell öffne - die Fehlermeldung lautet dann wie folgt:

Möchten Sie die Standarteinstellung für die Optimierung wiederherstellen?
Die Speicheroptimierung verwendet derzeit angepasste Einstellungen , die von einem anderen Programm erstellt wurden. Sie müssen die benutzerdefinierten Einstellungen entfernen, um den Zeitplan ändern zu können.
Das ist keine Fehlermeldung sondern eine normale Meldung wenn man selbst den Zeitpunkt festlegt, steht ja da schwarz auf weiß!!
Hier muß ich dann die Einstellung entfernen, da ich ansonsten manuell nicht mehr die Defragmentierung starten kann. Die Auswahl unter "geplante Optimierung" steht dann wieder auf "wöchentlich". Wie kann ich die Auswahl unter "geplante Optimierung" auf "monatlich" stellen, ohne daß die beschriebene Fehlermeldung erschein? Innerhalb der DefragUI funktioniert das doch auch..
Das hat MS in der Registry aus Sicherheitsgründen randomisiert, weil es da eine Sicherheitslücke gab, geht also nicht.
Du willst es ja gerade monatlich automatisieren, wozu dann noch manuell??
Und wenn doch, einfach hinterher nochmal das Skript anwenden.
Senseless-Creature
Senseless-Creature 24.07.2019 um 07:34:58 Uhr
Goto Top
Ah, ok es wäre halt schön, wenn jemand auf die Idee kommt, die Optimierung zu starten, daß die Einstellung nicht wieder verworfen wird.
Danke
140447
140447 24.07.2019 um 07:56:18 Uhr
Goto Top
Wofür gibt's wohl GPO? Genau weil die regelmäßig angewendet wird und somit das zurückstellt.
colinardo
colinardo 24.07.2019 aktualisiert um 10:43:48 Uhr
Goto Top
Servus nochmal,
wie @140447 gesagt hat die Meldung ist in dem Sinne keine Fehlermeldung, aber wenn die Bedienung weiterhin über die GUI gewünscht ist, lässt sich das mit folgendem Code umsetzen (habe mal schnell eine Funktion draus gemacht.
function Set-DefragTaskSchedule {
    param(
        [string][ValidateSet("daily","weekly","monthly")]$schedule  
    )
    $settings = @{
        "daily" = @{Period = "P1D";Deadline = "P4D"}  
        "weekly" = @{Period = "P7D";Deadline = "P1M"}  
        "monthly" = @{Period = "P1M";Deadline = "P4M"}  
    }
    $xml = New-Object XML
    $taskfile = "C:\Windows\System32\Tasks\Microsoft\Windows\Defrag\ScheduledDefrag"  
    if (!(Test-Path $taskfile)){
        $xml = [xml]'<?xml version="1.0" encoding="UTF-16"?>  
<Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  
  <RegistrationInfo>
    <Source>$(@%systemroot%\system32\defragsvc.dll,-800)</Source>
    <Author>$(@%systemroot%\system32\defragsvc.dll,-801)</Author>
    <Description>$(@%systemroot%\system32\defragsvc.dll,-802)</Description>
    <URI>\Microsoft\Windows\Defrag\ScheduledDefrag</URI>
    <SecurityDescriptor>D:AI(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)(A;;FR;;;AU)</SecurityDescriptor>
  </RegistrationInfo>
  <Triggers />
  <Principals>
    <Principal id="LocalSystem">  
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
      <LogonType>InteractiveToken</LogonType>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <MaintenanceSettings>
      <Period>P7D</Period>
      <Deadline>P1M</Deadline>
      <Exclusive>false</Exclusive>
    </MaintenanceSettings>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="LocalSystem">  
    <Exec>
      <Command>%windir%\system32\defrag.exe</Command>
      <Arguments>-c -h -o -$</Arguments>
    </Exec>
  </Actions>
</Task>'  
    }else{
        $xml.Load($taskfile)
    }
    $xml.Task.Settings.MaintenanceSettings.Period = $settings[$schedule].Period
    $xml.Task.Settings.MaintenanceSettings.Deadline = $settings[$schedule].Deadline
    $xml.Task.Settings.Enabled = "true"  
    Unregister-ScheduledTask -TaskName ScheduledDefrag -TaskPath "\Microsoft\Windows\Defrag\" -Confirm:$false -EA SilentlyContinue  
    Register-ScheduledTask  -TaskName ScheduledDefrag -TaskPath "\Microsoft\Windows\Defrag\" -Xml $xml.OuterXml -Force | out-null  
}
Die Powershell-Funktion lässt sich dann wie folgt im Script aufrufen:
Set-DefragTaskSchedule -schedule monthly
Valide Werte für den Parameter -schedule sind die Strings:
  • daily
  • weekly
  • monthly

Viel Spaß
Grüße Uwe