我正在创建一个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%的时间内创建换行符。
我的问题是你如何才能简化这项工作,使其更有效,而不是打击和错过赌博?有没有办法选择好,而不是发送"输入"窗口被识别并带到前台后?
感谢您的帮助!