<# .SYNOPSIS Checks the weather for critical values .DESCRIPTION Checks the current weather for critical values. .PARAMETER location Specifies the location to use (determined automatically per default) .EXAMPLE PS> ./check-weather .LINK https://github.com/fleschutz/PowerShell .NOTES Author: Markus Fleschutz · License: CC0 #> param([string]$location = "") # empty means determine automatically function Check { param([int]$Value, [int]$NormalMin, [int]$NormalMax, [string]$Unit) if ($Value -lt $NormalMin) { return "$Value $Unit ! " } if ($Value -gt $NormalMax) { return "$Value $Unit ! " } return "" } try { $Weather = (Invoke-WebRequest http://wttr.in/${location}?format=j1 -UserAgent "curl" ).Content | ConvertFrom-Json $Temp = $Weather.current_condition.temp_C $Precip = $Weather.current_condition.precipMM $Humidity = $Weather.current_condition.humidity $Pressure = $Weather.current_condition.pressure $WindSpeed = $Weather.current_condition.windspeedKmph $WindDir = $Weather.current_condition.winddir16Point $UV = $Weather.current_condition.uvIndex $Visib = $Weather.current_condition.visibility $Clouds = $Weather.current_condition.cloudcover $Desc = $Weather.current_condition.weatherDesc.value $Area = $Weather.nearest_area.areaName.value $Region = $Weather.nearest_area.region.value "Now: $($Temp)°C $($Precip)mm $($Humidity)% $($WindSpeed)km/h from $WindDir $($Pressure)hPa UV$($UV) $($Visib)km $($Clouds)% $Desc at $Area ($Region)" $Result+=Check $Weather.current_condition.windspeedKmph 0 48 "km/h" $Result+=Check $Weather.current_condition.visibility 1 1000 "km visibility" $Result+=Check $Weather.current_condition.temp_C -20 40 "°C" $Result+=Check $Weather.current_condition.uvIndex 0 6 "UV" if ($Result -eq "") { "Calm weather" } else { "WEATHER ALERT: $Result" } exit 0 # success } catch { "⚠️ Error: $($Error[0]) ($($MyInvocation.MyCommand.Name):$($_.InvocationInfo.ScriptLineNumber))" exit 1 }