powershell使用sendkey调用Invoke-Expression

时间:2012-10-21 18:27:13

标签: powershell automation sendkeys

有没有办法可以通过Powershell中的 SendKey 将参数传递给我的自定义应用

像TCL中的EXPECT

#!/usr/bin/perl -w
use Expect;
my $exp = new Expect;

my $command = 'ssh -l user 10.10.10.25';

$exp->spawn($command) or die "Cannot spawn $command: $!\n";

my $patidx = $exp->expect(30, 'Enter passphrase for key');
$exp->send("password\n");

我厌倦了使用以下内容,但它似乎没有调用我的自定义应用程序

$a = Get-Process | Where-Object {$_.Name -eq "Notepad"}
wait
[Microsoft.VisualBasic.Interaction]::AppActivate($a.ID)
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
wait
[System.Windows.Forms.SendKeys]::SendWait("{F5}{ENTER}")

我的客户申请表就像 C:\ somecli -option1 -option2 -option 3

我有一个cli命令说ping -t 10.10.10.1这里的命令是“ping”,参数是“-t 10.10.10.1”,所以当我最初调用命令时我正在使用“ping -t 10.10.10.1” “假设我需要传递另一个参数说:y执行一些执行后,这个命令,sendkey确实允许我

2 个答案:

答案 0 :(得分:0)

您可以在http://wasp.codeplex.com/

中使用WASp shap执行此操作

以下是他们网站的示例:

Select-Window notepad | Send-Keys "%(ea)Testing{Enter}{F5}"

答案 1 :(得分:0)

我不太明白你将'传递参数'传递给SendKeys是什么意思,但SendKeys只能在当前关注的窗口上工作,这意味着你无法输入任何在后台运行的应用程序的密钥。前面提到的PowerShell WASP模块只是在内部使用SendKeys,所以如果WASP不起作用,那么它们都不会输入SendKeys函数。

就“这适用于任何自定义应用程序”而言,SendKeys基于WinForms API,因此它只能与使用该API的应用程序进行交互。

编辑:

根据您的编辑,您似乎只想发送在运行时定义的键。只需将密钥分配给变量(如$keys="Keys I want to send"),然后只发送变量(如[System.Windows.Forms.SendKeys]::SendWait($keys))。如果您希望用户键入要发送的密钥,则可以使用Read-Host