「Acronym を PowerShell に喋らせる」後「ヤスタカ」たら、元の「Acronym を PowerShell に喋らせる」が出来なくなっちゃった、というのは内緒だ。
fortuneの喋る版、ですが、「自分の PC の powershell に喋らせる」ので、fortuneみたいに WEB ベースではでけんですの。
まずお菓子を入手しますよ。一行に一名言、なテキストにしとこうな、簡単のために。例えばこんなから持ってくるとか。quotes.txt て名前にしようね。
powershell スクリプトはこんだけなの:
1 $quotes = Get-Content $pwd/quotes.txt
2 $feelsolucky = Get-Random -InputObject $quotes
3 $logo = [Reflection.Assembly]::LoadWithPartialName("Microsoft.Speech")
4 $speak = New-Object Microsoft.Speech.Synthesis.SpeechSynthesizer
5 #Add-Type -AssemblyName System.speech
6 #$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
7 $speak.Rate = -3
8 $speak.SetOutputToDefaultAudioDevice()
9 $speak.SelectVoice('Microsoft Server Speech Text to Speech Voice (en-GB, Hazel)')
10 $feelsolucky
11 $speak.Speak("$feelsolucky")
12 $speak.Dispose()
ま、目新しいのはテキストファイルから読み込む Get-Content と Get-Random で一行選ぶとこ、それと Unix 的シェルで言うところの「コマンドの結果の引用(borne-shell系ではバッククオート)」だけよね。
「ヤスタカ」「和英混在の文章を PowerShell に喋らせる」で Microsoft Speech Platform (Version 11) 有効にしたので、と思うけど、元の「System.Speech」が(多分デバイスの奪い合いに負けて)使えなくなるみたい。ので、Microsoft.Speech が動作出来るか System.Speech で動作出来るかは、環境次第です。
さて。この fortune_speak.ps1、せっかくの幸運菓子なので、ログオン時に祝詞おくれよ、と。
うーん、それよりも。ps1 の置き場、どうしとこうか…。なんか標準マナーとかあんのかな、と思いつつも、ここんとこの「標準個人ブツ置き場」と思われる %Users%/AppData/Roaming/ に .site-powershell なんてフォルダを作り、そこに置くことにしてみた。どうせ個人のものだからな、まぁ良かろ。
で、「起動時に」と、「-ExecutionPolicy」のために、ショートカットを作る:
あとはこのショートカットを「スタートアップ」に置くだけ。なんだか起動が遅いのが難点だけど、「ありがたや…」という気分になれます。
あっ、やべ。Windows 機はスリープで眠らせてばかりで、滅多にログオフ・ログインしないじゃねーか、どうしてくれる。
ところで、Get-Random なんですけど、なんかね、こうするとダメなの:
1 Get-Content $pwd/quotes.txt | Get-Random
これについてはここに似た情報がありました。
In PS 3.0, ‘Get-random’ doesn’t return an error value for a $null variable without the use of ‘-inputobject’.
アタシの遭遇してる問題とはなんか違う気はするけど、とにかく「パイプライン」ではダメ(というかなんでパイプラインに $null が「流れてく」のか謎なの)。-InputObject に明示的に渡せばうまくいく。釈然としないけど、まぁいいか、今は。そのうち理解出来る日も来るであろ。