使用PowerShell在弹出框中自动选择okay按钮

时间:2014-03-26 18:40:59

标签: powershell user-interface

我正在创建一个PowerShell脚本来访问Sybase IQ服务器。通常使用普通数据库,我将通过isql执行此操作,从而消除了UI。但由于这是一个数据仓库,我似乎有一个可以与之对抗的UI。

dbisql -c "uid=$usrID;pwd=$pwd;eng=iq_datawarehouse; links=tcpip(host=$ip;port$port)"

上面的代码显示了一个用户界面,但由于这是通过本地机器连接到服务器,因此出现了一个确认框问题。此脚本需要完全自动化,因此显示的UI需要自动选择" Okay"继续。

从Nate Hekman的注册,查找和发送命令到窗口,我已经能够让脚本在大多数时间工作。

    $pinvokes = @'
        [DllImport("user32.dll", CharSet=CharSet.Auto)]
        public static extern IntPtr Connect(string className, string Connect);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
'@
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -MemberDefinition $pinvokes -Name NativeMethods -Namespace MyUtils
    $hwnd = [MyUtils.NativeMethods]::FindWindow("Connect")
    [MyUtils.NativeMethods]::SetForegroundWindow($hwnd)
    [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")

这里的问题是当我运行它时,SendWait(" {Enter}")过早执行,导致在PowerShell ISE中60%的时间内创建换行符。

我的问题是你如何才能简化这项工作,使其更有效,而不是打击和错过赌博?有没有办法选择好,而不是发送"输入"窗口被识别并带到前台后?

感谢您的帮助!

0 个答案:

没有答案