mirror of
https://github.com/fleschutz/PowerShell.git
synced 2024-12-27 17:19:16 +01:00
74 lines
2.2 KiB
Markdown
74 lines
2.2 KiB
Markdown
## The *check-moon-phase.ps1* Script
|
|
|
|
This PowerShell script determines the Moon phase and answers by text-to-speech (TTS).
|
|
|
|
## Parameters
|
|
```powershell
|
|
/home/mf/Repos/PowerShell/Scripts/check-moon-phase.ps1 [<CommonParameters>]
|
|
|
|
[<CommonParameters>]
|
|
This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction,
|
|
WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
|
|
```
|
|
|
|
## Example
|
|
```powershell
|
|
PS> ./check-moon-phase
|
|
|
|
```
|
|
|
|
## Notes
|
|
Author: Markus Fleschutz | License: CC0
|
|
|
|
## Related Links
|
|
https://github.com/fleschutz/PowerShell
|
|
|
|
## Source Code
|
|
```powershell
|
|
<#
|
|
.SYNOPSIS
|
|
Checks the Moon phase
|
|
.DESCRIPTION
|
|
This PowerShell script determines the Moon phase and answers by text-to-speech (TTS).
|
|
.EXAMPLE
|
|
PS> ./check-moon-phase
|
|
.LINK
|
|
https://github.com/fleschutz/PowerShell
|
|
.NOTES
|
|
Author: Markus Fleschutz | License: CC0
|
|
#>
|
|
|
|
try {
|
|
$LunarCycle = 29.53058868 # synodic period in days, time between successive new moons
|
|
$LunarHalfCycle = $LunarCycle / 2.0
|
|
$Phases = @("New moon", "Waxing crescent moon", "First quarter moon", "Waxing gibbous moon", "Full moon", "Waning gibbous moon", "Last quarter moon", "Waning crescent moon")
|
|
$PhaseLength = $LunarCycle / 8.0
|
|
$PhaseHalfLength = $PhaseLength / 2.0
|
|
|
|
$RefDate = get-date -Year 2021 -Month 12 -Day 4 -Hour 6 -Minute 43 # Dec 4, 2021 06:43 UTC [New Moon]
|
|
$Now = get-date
|
|
$TimeInterval = New-TimeSpan -Start $RefDate -End $Now
|
|
$Days = $TimeInterval.TotalDays
|
|
|
|
$MDays = $Days % $LunarCycle
|
|
$PhaseIndex = [int]($MDays * (8.0 / $LunarCycle))
|
|
|
|
$Visibility = [math]::Round((($Days % $LunarHalfCycle) * 100) / $LunarHalfCycle)
|
|
$Reply = "$($Phases[$PhaseIndex]) with $($Visibility)% visibility"
|
|
|
|
$MoonAge = [math]::Round($Days % $LunarCycle)
|
|
if ($MoonAge -eq "0") { $Reply += " today"
|
|
} elseif ($MoonAge -eq "1") { $Reply += " since yesterday"
|
|
} else { $Reply += ", last new moon was $MoonAge days ago"
|
|
}
|
|
|
|
& "$PSScriptRoot/speak-english.ps1" "$Reply"
|
|
exit 0 # success
|
|
} catch {
|
|
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
|
|
exit 1
|
|
}
|
|
```
|
|
|
|
*Generated by convert-ps2md.ps1 using the comment-based help of check-moon-phase.ps1*
|