1. ホーム
  2. powershell

[解決済み] powershell内でキーストロークを実行する方法は?

2022-03-09 20:53:46

質問

vmwareクラスタ環境からいくつかの情報を取得するためのps1スクリプトを持っています。

ps1 スクリプトのいくつかの場所で ENTER ボタンのキー操作です。

では、どうすればいいのでしょうか?

-ありがとうございます。

解決方法は?

私の理解が正しければ、PowerShell に ENTER のキーストロークを何らかの対話型アプリケーションに送るのですか?

$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')

その対話型アプリケーションがPowerShellスクリプトである場合、PowerShellウィンドウのタイトルバーにあるものをそのまま AppActivate (デフォルトでは、powershell.exeへのパス)。曖昧さを避けるために、スクリプトに自身のウィンドウのタイトルを変更させるために title 'new window title' コマンドを使用します。

ちょっとした注意点

  • チルダ(~)は ENTER のキーストロークがあります。また {ENTER} しかし、これはキーパッドの ENTER キーです。全リストはこちらでご覧いただけます。 http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx .
  • の理由は Sleep 1 文は、ウィンドウがアクティブになるのに時間がかかるので、1秒待つようにします。 キー送信 をすぐに実行すると、PowerShell ウィンドウにキーが送信されるか、どこにも送信されなくなります。
  • もし、待機中に何か入力したりマウスをクリックしたりすると、この動作に支障をきたす可能性があることに注意してください。 アプリアクティベート をアクティブにします。あなたのシステムで確実に十分な最小限の時間を見つけるために、時間を減らすことを実験することができます ( スリープ は小数を受け付けるので、0.5で0.5秒を試すことができます)。私の2.6GHz Core i7 Win7ノートパソコンでは、0.8秒以下ではかなりの確率で失敗することが分かっています。私は安全のために1秒を使用しています。
  • 重要な警告 このメソッドを使ってパスワードを送信する場合は、特に注意してください。 AppActivate を起動し キー送信 を実行すると、パスワードがプレーンテキストでその別のウィンドウに送信されます!

時々 wscript.shell 's 送信キー メソッドは少し癖があるため、問題が発生した場合は、上記の4行目を以下のように置き換えてください。

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');