diff --git a/Data/scripts.csv b/Data/scripts.csv index 60595bc4..eb16af0f 100644 --- a/Data/scripts.csv +++ b/Data/scripts.csv @@ -58,6 +58,7 @@ open-calculator.ps1, starts the calculator program open-email-client.ps1, starts the default email client play-beep.ps1, plays a beep sound poweroff.ps1, halts the local computer (needs administrator rights) +query-smart-data.ps1, queries the S.M.A.R.T. data of your HDD/SSD's and saves it to the current/given directory new-email.ps1, starts the default email client to write a new email reboot.ps1, reboots the local computer (needs administrator rights) reboot-fritzbox.ps1, reboots the FRITZ!box device diff --git a/README.md b/README.md index 8ac7bc3e..cd196376 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ The following PowerShell scripts can be found in the [Scripts/](Scripts/) subfol * [open-email-client.ps1](Scripts/open-browser.ps1) - starts the default email client * [play-beep.ps1](Scripts/play-beep.ps1) - plays a beep sound * [poweroff.ps1](Scripts/poweroff.ps1) - halts the local computer (needs administrator rights) +* [query-smart-data.ps1](Scripts/query-smart-data.ps1) - queries the S.M.A.R.T. data of your HDD/SSD's * [new-email.ps1](Scripts/new-email.ps1) - starts the default email client to write a new email * [next-joke.ps1](Scripts/next-joke.ps1) - gets the next random Juck Norris joke * [reboot.ps1](Scripts/reboot.ps1) - reboots the local computer (needs administrator rights) diff --git a/Scripts/query-smart-data.ps1 b/Scripts/query-smart-data.ps1 new file mode 100755 index 00000000..cc639582 --- /dev/null +++ b/Scripts/query-smart-data.ps1 @@ -0,0 +1,54 @@ +#!/snap/bin/powershell +<# +.SYNTAX ./query-smart-data.ps1 [] +.DESCRIPTION queries the S.M.A.R.T. data of your HDD/SSD's and saves it to the current/given directory +.LINK https://github.com/fleschutz/PowerShell +.NOTES Author: Markus Fleschutz / License: CC0 + requires smartctl from smartmontools + it's recommended to call this script once per day +#> + +#Requires -RunAsAdministrator + +param([string]$Directory = "") + + +function CheckIfInstalled { + try { + $null = $(smartctl --version) + } catch { + write-error "smartctl is not installed - make sure smartmontools are installed" + exit 1 + } +} + +try { + if ($Directory -eq "") { + $Directory = "$PWD" + } + + write-output "(1) Checking for 'smartctl'..." + CheckIfInstalled + + write-output "(2) Scanning for S.M.A.R.T. devices..." + $Devices = $(smartctl --scan-open) + + [int]$DevNo = 1 + foreach($Device in $Devices) { + write-output "(3) Querying data from S.M.A.R.T. device $Device..." + + $Time = (Get-Date) + $Filename = "$Directory/SMART-dev$($DevNo)-$($Time.Year)-$($Time.Month)-$($Time.Day).json" + write-output "(4) Saving data to $Filename..." + + $Cmd = "smartctl --all --json " + $Device + + Invoke-Expression $Cmd > $Filename + $DevInfo++ + } + write-output "DONE." + exit 0 +} catch { + write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" + exit 1 +}