IE自动化与Powershell

我试图使用Powershell和IE在Intranet上自动login到网站。 到目前为止,我有以下代码工作:

$ie = new-object -com "InternetExplorer.Application" $ie.navigate("https://somepage/jsp/module/Login.jsp/") while($ie.ReadyState -ne 4) {start-sleep 1} $ie.visible = $true $doc = $ie.Document If ($doc.nameProp -eq "Certificate Error: Navigation Blocked") { $doc.getElementByID("overridelink").Click() } $loginid = $doc.getElementById("loginid") $loginid.value= "username" $password = $doc.getElementById("password") $password.value = 'somepass' $ie.navigate("javascript:doSubmit('login')",$null,$true) 

所以,我现在所面临的问题是网站closures了用于login的原始窗口并打开一个新的IE窗口。 我如何着手将input提交到新窗口? 我知道我可以使用像tasklist.exe / v的东西来获得新的窗口的PID …但我不知道如何去控制它。

另外,查看我的代码后,请知道我不打算使用embedded式用户名和密码。 这只是为了让我不用每次我想testing脚本时不断地inputun / pw组合。

在尝试了更多…

 $applist = new-object -com shell.application $newie = $applist.windows() | where {$_.Type -eq "HTML Document" -and $_.LocationURL -match "MainFrame.jsp"} 

我找到了一篇介绍如何通过循环访问Shell.Application对象的窗口来完成要查找的内容的旧文章 。 我不得不说,虽然看起来有可能,似乎回答你的直接问题,但这种做法似乎对我来说是相当不愉快和脆弱的。

如果你不想尝试不同的方法,我会建议给seleniumium Webdriver一个镜头。 您可以使用Internet Explorer驱动程序,并且文档中的C#示例通常可以很好地转换为PowerShell。 您还可以获得其他好处,例如其他Web浏览器的驱动程序或等待状态而不是依赖睡眠/检查循环的功能。 您也将有一个driver.switchTo()函数,允许您在窗口或框架之间跳动。

尝试这个。

  1. $ shell =(New-Object -ComObject Shell.Application).Windows()
  2. $ shell.Count
  3. 7
  4. 你有0-6项,你可以这样检查。
  5. $ shell.Item(0).LocationName
  6. 要么
  7. $ shell.Item(0).LocationURL
  8. $ shell.Item(1).LocationName
  9. $ shell.Item(1).LocationURL