From 48ab1d879bc5dc1f65ee6671e546f58ae1c67bee Mon Sep 17 00:00:00 2001 From: Juha Karjalainen Date: Fri, 22 Feb 2019 13:38:26 +0200 Subject: Fix provisioning disable defragmentation for windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If no scheduled task exist it would throw error causing provisioning to fail. Now catch when scheduling does not exist. Task-number: QTQAINFRA-2823 Change-Id: I3bf24df6116b6c978171950bf5bf954f5ddee533 Reviewed-by: Tony Sarajärvi --- .../common/windows/disable-defragment.ps1 | 42 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'coin') diff --git a/coin/provisioning/common/windows/disable-defragment.ps1 b/coin/provisioning/common/windows/disable-defragment.ps1 index 876938f8..e76f0649 100644 --- a/coin/provisioning/common/windows/disable-defragment.ps1 +++ b/coin/provisioning/common/windows/disable-defragment.ps1 @@ -1,6 +1,6 @@ ############################################################################# ## -## Copyright (C) 2018 The Qt Company Ltd. +## Copyright (C) 2019 The Qt Company Ltd. ## Contact: http://www.qt.io/licensing/ ## ## This file is part of the provisioning scripts of the Qt Toolkit. @@ -31,4 +31,42 @@ ## ############################################################################# -schtasks /Delete /TN "\Microsoft\Windows\Defrag\ScheduledDefrag" /F +# Windows 7 does not have Get-ScheduledTask and Unregister-ScheduledTask +# thus needing its own version. +Write-Host "Disabling defragmentation" +$version = Get-CimInstance Win32_OperatingSystem | Select-Object -ExpandProperty Caption +if ($version -like '*Windows 7*'){ + $pi = New-Object System.Diagnostics.ProcessStartInfo + $pi.FileName = "C:\Windows\System32\schtasks.exe" + $pi.RedirectStandardError = $true + $pi.UseShellExecute = $false + $pi.Arguments = "/Delete /TN `"\Microsoft\Windows\Defrag\ScheduledDefrag`" /F" + $prog = New-Object System.Diagnostics.Process + $prog.StartInfo = $pi + $prog.Start() | Out-Null + $err = $prog.StandardError.ReadToEnd() + $prog.WaitForExit() + if ($prog.ExitCode -eq 0){ + Write-Host "Scheduled defragmentation removed" + } else { + if ($err -like '*cannot find the file*'){ + Write-Host "No scheduled defragmentation task found" + exit 0 + } else { + Write-Host "Error while deleting scheduled defragmentation task: $err" + } + } +} +else { + try { + $state = (Get-ScheduledTask -ErrorAction Stop -TaskName "ScheduledDefrag").State + Write-Host "Scheduled defragmentation task found in state: $state" + } + catch { + Write-Host "No scheduled defragmentation task found" + exit 0 + } + Write-Host "Unregistering scheduled defragmentation task" + Unregister-ScheduledTask -ErrorAction Stop -Confirm:$false -TaskName ScheduledDefrag + Write-Host "Scheduled Defragmentation task was cancelled" +} -- cgit v1.2.1