From 222bac5c74ea8347b58b48ec00b79f9854af1dc6 Mon Sep 17 00:00:00 2001 From: Luke Sampson Date: Fri, 21 Apr 2017 19:02:17 +1000 Subject: [PATCH] Add 'checkup' command. --- lib/diagnostic.ps1 | 29 +++++++++++++++++++++++++++++ libexec/scoop-checkup.ps1 | 19 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 lib/diagnostic.ps1 create mode 100644 libexec/scoop-checkup.ps1 diff --git a/lib/diagnostic.ps1 b/lib/diagnostic.ps1 new file mode 100644 index 000000000..aec2fc914 --- /dev/null +++ b/lib/diagnostic.ps1 @@ -0,0 +1,29 @@ +<# +Diagnostic tests. +Return $true if the test passed, otherwise $false. +Use 'warn' to highlight the issue, and follow up with the recommended actions to rectify. +#> + + +function check_windows_defender($global) { + $defender = get-service -name WinDefend -errorAction SilentlyContinue + if($defender -and $defender.status) { + if($defender.status -eq [system.serviceprocess.servicecontrollerstatus]::running) { + $hasGetMpPreference = gcm get-mppreference -errorAction SilentlyContinue + if($hasGetMpPreference) { + $installPath = $scoopdir; + if($global) { $installPath = $globaldir; } + + $exclusionPath = (Get-MpPreference).exclusionPath + if(!($exclusionPath -contains $installPath)) { + warn "Windows Defender may slow down or disrupt installs with realtime scanning." + write-host " Consider running:" + write-host " sudo Add-MpPreference -ExclusionPath '$installPath'" + write-host " (Requires 'sudo' command. Run 'scoop install sudo' if you don't have it.)" + return $false + } + } + } + } + return $true +} diff --git a/libexec/scoop-checkup.ps1 b/libexec/scoop-checkup.ps1 new file mode 100644 index 000000000..efadcf02d --- /dev/null +++ b/libexec/scoop-checkup.ps1 @@ -0,0 +1,19 @@ +# Usage: scoop checkup +# Summary: Check for potential problems +# Help: Performs a series of diagnostic tests to try to identify things that may +# cause problems with Scoop. + +. "$psscriptroot\..\lib\core.ps1" +. "$psscriptroot\..\lib\diagnostic.ps1" + +$issues = 0 + +$issues += !(check_windows_defender $false) +$issues += !(check_windows_defender $true) + +if($issues) { + warn "`nFound $issues potential $(pluralize $issues problem problems)." +} else { + success "No problems identified!" +} +