PowerShellではスクリプト中でキーボードのストロークを行うことができます。
これを利用すれば、コマンドラインに対応していないようなアプリケーションの操作でも基本的に自動化ができることになります。
今回のコードではメモ帳を実行してテキストを打ち込み保存するという動作になっています。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#Windowsキーを押す [System.Windows.Forms.SendKeys]::SendWait("^{ESC}") #"run"と入力 [System.Windows.Forms.SendKeys]::SendWait("run") Start-Sleep -s 1 #Enterキーを押す [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") Start-Sleep -s 1 #"notepad"と入力 [System.Windows.Forms.SendKeys]::SendWait("notepad") [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") Start-Sleep -s 1 #"This is a test script"と入力 [System.Windows.Forms.SendKeys]::SendWait("This is a test script.") #Control+Sキーを押す [System.Windows.Forms.SendKeys]::SendWait("^s") Start-Sleep -s 1 [System.Windows.Forms.SendKeys]::SendWait("newtext.txt") [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") Start-Sleep -s 1 #Alt+F4キーを押す [System.Windows.Forms.SendKeys]::SendWait("%{F4}") |
説明
ただ単にSendKeysでキーボードのキーを打っているだけなので非常に簡単です。
キーについては以下のページに説明があります。
https://msdn.microsoft.com/ja-jp/library/cc364423.aspx
Windowsキーだけは他のキーと組み合わせて押せないため、最初でControl+ESCで押してから"run"を実行しています。
また、操作を行ってからGUIのダイアログが表示されるまでに多少遅れがあるため、文字列の入力を行うような場面では、1秒待ってから入力を開始しています。
動画
実行してみると動作がかなり速いです。
そもそもテキストを書いて保存であればわざわざメモ帳を実行せずともPowerShellだけで完結しますが、今回は実験として作ってみました。