PowerShell/Scripts/export-to-serenade.ps1
2021-11-21 12:21:34 +01:00

48 lines
1.9 KiB
PowerShell
Executable File

<#
.SYNOPSIS
Exports all scripts to Serenade for voice control
.DESCRIPTION
This script exports all PowerShell scripts to Serenade to execute them by voice.
.PARAMETER WakeWord
Specifies the wake word (none by default)
.PARAMETER FilePattern
Specifies the file pattern for the scripts ("$PSScriptRoot/*.ps1" by default)
.PARAMETER Application
Specifies the application to be used
.PARAMETER TargetFile
Specifies the target file ("$HOME\.serenade\scripts\PowerShell.js" by default)
.EXAMPLE
PS> ./export-to-serenade.ps1 Computer
⏳ Exporting 496 PowerShell scripts to C:\Users\Markus\.serenade\scripts\PowerShell.js...
✔️ exported 496 scripts with wake word "Computer" to Serenade in 3 sec
.NOTES
Author: Markus Fleschutz · License: CC0
.LINK
https://github.com/fleschutz/PowerShell
#>
#requires -version 2
param([string]$WakeWord = "", [string]$FilePattern = "$PSScriptRoot/*.ps1", [string]$Application = "terminal", [string]$TargetFile = "$HOME\.serenade\scripts\PowerShell.js")
try {
$StopWatch = [system.diagnostics.stopwatch]::startNew()
$Scripts = Get-ChildItem "$FilePattern"
"⏳ Found $($Scripts.Count) scripts, exporting them to $TargetFile..."
"/* NOTE: This file has been generated automatically by export-to-serenade.ps1 */" | Set-Content "$TargetFile"
foreach ($Script in $Scripts) {
$ScriptName = $Script.basename
$Keyword = $ScriptName -replace "-"," "
"serenade.global().command(`"$($WakeWord.toLower()) $Keyword`", async (api) => { await api.focusOrLaunchApplication(`"$Application`"); await api.typeText(`"$ScriptName.ps1`"); await api.pressKey(`"return`"); });" | Add-Content "$TargetFile"
}
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
"✔️ exported $($Scripts.Count) PowerShell scripts with wake word `"$WakeWord`" to Serenade in $Elapsed sec"
exit 0 # success
} catch {
write-error "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}