Powershell を使用して Web コンソールでアクセスポイントの設定を自動化したいと考えています。
私は Win8/IE10 で開発しましたが、コードをテストするとすべて正常に動作します。残念ながら、開発/テスト後に「生産システム」を受け取りました。これで、コードは Windows Server 2012 R2/IE11 で動作するはずです。
これは、アクセスポイントに接続してログインするための私のコードです(簡略化):
$IE = New-Object -ComObject "InternetExplorer.Application"
$IE.Visible = $true #1#
$IE.Navigate("192.168.0.100")
Write-Host $IE.LocationName
$IE.Document.GetElementByID("login-username").Value = "admin"
$IE.Document.GetElementByID("login-password").Value = "admin"
$IE.Document.GetElementByID("login-btn").Click()
Write-Host $IE.LocationName
デバッグ上の理由から、通常はウィンドウを表示します (コメント #1#)。最初の Write-Host では、正しい場所が表示されます (「ログイン」)。2 番目の Write-Host で、間違った場所が表示されます (「about:blank」)。IE ウィンドウに正しい場所/タブ名 (「AP」) が表示されます。IE オブジェクトが使用できなくなり、他のプロパティ ($IE.Document.* など) が機能しないようです。ウィンドウを手動で閉じる必要があります。
2 つの回避策があります。
- ログインする前に IE ウィンドウを手動でクリック (フォーカスを取得) すると、動作します。
- ウィンドウを表示しない場合 ($IE.Visible = $false)、すべてが機能します。
これまでの私のシナリオ/テスト:
- IE ESC が無効になっています。
- C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll を別の生産マシン (2008R2) からコピーしたので、$IE.Document 関数は機能します (私の開発マシンの dll は同じものを生成します)。エラー)。
- すべてのゾーンで保護モード ([インターネット オプション] > [セキュリティ]) を有効/無効にしようとしましたが、機能しません ( redditで見つかりました)
他の誰かが試してみるアイデアを持っていますか? デバッグは回避策で機能し、生産的であり、(これまでのところ)目に見えないウィンドウでも機能しますが、問題を理解したいです...
ありがとう、よろしく、kvo