PowerShellの使用方法は?

Q&Aからの着想:Windows 7でコマンドラインからmp3を再生する方法は?



「追加ソフトウェアのダウンロードとインストール」に要約される提案された回答に少しショックを受けました...そして、システムにはすでにオペレーティングシステムと呼ばれるいくつかのたわごとがあります...すみません、私は勃発しました。



一度Windows XPでこのタスクに最も簡単なmplayユーティリティを使用しました。ただし、GUIではなくタスクスケジューラは正常に起動しますが、Windows 7では削除され、sndrec32さえも削除されました。 巨大なwmplayerを実行するのはバカだと考えられているので、スクリプト言語に頼らなければなりません。



Windowsスクリプティングホスト用のvbsの単一行スクリプトの例は、インターネットで見つけることができます。最も簡単な例を次に示します。
Set oVoice = CreateObject( "SAPI.SpVoice" )

set oSpFileStream = CreateObject( "SAPI.SpFileStream" )

oSpFileStream.Open "c:\Windows\Media\tada.wav"

oVoice.SpeakStream oSpFileStream

oSpFileStream.Close







ちなみに、Windows 7でコードが機能したのは奇跡です。WindowsXPと比較して、多数のactivexオブジェクト(WMPlayerClassなど)が消え、SAPIクラスがいつ消えるのか、クラスがどのように変わるのか誰も知らず、顕微鏡で釘を打つ問題ではないためです したがって、この決定は論理的ではなく誤ったものであり、ActiveXはゆっくりと消滅し、論理的に.NET環境に殺されていると考えています。



私は新しいfangshellされたPowerShellで問題を解決しようとしました(私は料理することはできませんが、ドキュメントでは故意に大騒ぎしています) たとえば、ファイルを作成したり署名したりせずにコマンドラインからスクリプトを実行する通常の機会はありません(質問の結果、セキュリティは何よりも重要です)。



最も簡単なコードは次のとおりです。
$s=new-Object System.Media.SoundPlayer;$s.SoundLocation='C:\Windows\Media\tada.wav';$s.Play();



手動で挿入して実行すると、powershell内でうまく機能します!



しかし、このように:
powershell -Command $s=new-Object System.Media.SoundPlayer;$s.SoundLocation='C:\Windows\Media\tada.wav';$s.Play();



各コマンドは独自のコンテキストで実行されるため(つまり、各ステップで$ sが定義されていないため)、何も起こりません。



リダイレクトを使用してみました:
echo $s=new-Object System.Media.SoundPlayer;$s.SoundLocation='C:\Windows\Media\tada.wav';$s.Play(); | powershell -command -



そして、その結果にショックを受けました-登録されたプレーヤーはデフォルトでwavファイルで起動されました(winampが見つかりました)。 一体どうして?



-command-を使用せずに:
echo $s=new-Object System.Media.SoundPlayer;$s.SoundLocation='C:\Windows\Media\tada.wav';$s.Play(); | powershell



PowerShellの単純な起動が発生し、コマンドの入力を待機します。



さて、私はあきらめて、署名されていないスクリプトを解決しようとします(特権シェルで実行します):
powershell Set-ExecutionPolicy Unrestricted



上記のコードでファイルを作成して実行します(c:\ a.ps1に配置します):
powershell c:\a.ps1



そして、何も得られません! 沈黙、エラーメッセージなし(未署名のスクリプトの起動を許可しない場合、対応するメッセージが表示されます)。



尊敬されるhabrasocietyがこの問題を単純かつ合理的に正しい方法で解決するのに役立つかどうか? 私が理解しているように、最後のテストでは、問題はどこかにあるため、証明書を使用した叙事詩は開始する価値がないことが示されました。



TheBitsPaulの UPD:象にさえ気づかず、スクリプトはゲームを終了せず、グループ化と&記号を使用してコマンドラインからコードを起動できます。
powershell -Command "& {$s=new-Object System.Media.SoundPlayer; $s.SoundLocation='C:/Windows/Media/tada.wav'; $s.Play(); Sleep -Seconds 9}"







多くのコメントに基づくUPD2:ファイルの継続時間の自動決定と$ s変数の例外を考えると、もちろん、最終的な解決策は次のようになります。
powershell -Command (new-object Media.SoundPlayer "C:\Windows\Media\notify.wav").playsync();



しかし、最も重要なことは、それが最初の問題を解決しないことです-System.Media.SoundPlayerはmp3ファイルを再生できません。 もっと難しいものを作る必要がありますが、元の問題の解決策を設定するためにこの投稿の目的についてさえ考えませんでした。



All Articles