## Run enhanced DISM for Windows 8 and higher endpoints If ( IsWindowsVersion -ge "6.2" ) { LogMsg "Fix-WindowsHealth.ps1" $BeginDISMRun = $(Get-Date).AddSeconds(-1) ## Scan the Windows Component Store for problems LogMsg "Beginning Windows Component Store scan" Start-Process "dism.exe" -ArgumentList "/online /cleanup-image /scanhealth" -Wait LogMsg "Completed Windows Component Store scan" ## Check to see if the previous command recorded any problems that need repairing LogMsg "Beginning Windows Component Store health check" $CheckHealthOutput = $(dism /online /cleanup-image /checkhealth) | Out-String If ( $CheckHealthOutput -match "repairable" ) { LogMsg "Completed Windows Component Store health check: Problems found" ## Repair problems with the Windows Component Store LogMsg "Beginning Windows Component Store restoration" Start-Process "dism.exe" -ArgumentList "/online /cleanup-image /restorehealth" -Wait LogMsg "Completed Windows Component Store restoration" } Else { LogMsg "Completed Windows Component Store health check: No problems found" } $EndDISMRun = $(Get-Date).AddSeconds(1) ## Parse DISM log file for recent activity $DISMLogFile = "${MSPLogs}\Fix-WindowsHealth_DISM.log" If ( Test-Path $DISMLogFile ) { Remove-Item $DISMLogFile -Force } New-Item -Path $DISMLogFile -ItemType File LogMsg "Beginning Windows Component Store log data collection" Get-Content -Path "${Env:WinDir}\Logs\DISM\dism.log" | Select-String -Pattern '^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})' | % { If ( ((Get-Date $_.Line.Substring(0,19)) -gt $BeginDISMRun) -and ((Get-Date $_.Line.Substring(0,19)) -le $EndDISMRun) ) { Add-Content -Path $DISMLogFile -Value $_.Line } } LogMsg "Completed Windows Component Store log data collection" } Else { LogMsg "Online image cleanup and restoration is only supported on Windows 8 and higher" }