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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 476359
Url: https://administrator.de/contentid/476359
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
10 Kommentare
Neuester Kommentar
Im Taskplaner im Optimierungs Task die Zeit anpassen, feddich. Kannste per Powershell oder auch schtasks.exe erledigen.
Nö, man muss es nur hier nachlesen, Google wieder kaputt??
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/set-sc ...
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/set-sc ...
Servus @Senseless-Creature ,
kein Problem, der entsprechende Powershell-Command lautet dafür wie folgt:
Setzt den Optimierungs-Task auf alle 30 Tage um 00:00 Uhr und aktiviert ihn.
Grüße Uwe
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
Grüße Uwe
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ß!!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..
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.
Wofür gibt's wohl GPO? Genau weil die regelmäßig angewendet wird und somit das zurückstellt.
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.
Die Powershell-Funktion lässt sich dann wie folgt im Script aufrufen:
Valide Werte für den Parameter -schedule sind die Strings:
Viel Spaß
Grüße Uwe
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
}
Set-DefragTaskSchedule -schedule monthly
- daily
- weekly
- monthly
Viel Spaß
Grüße Uwe