2016-12-28 64 views
3

目前我正在研究一個腳本來自動化IE中的一個進程,以添加計算機名稱及其MAC,以便我們可以對它們進行映像。該頁面有兩個字段,一個用於MAC,另一個用於計算機名稱,然後添加新按鈕。目前它仍然是手動輸入,但我打算從csv中讀取一次執行大量組。用powershell關閉彈出窗口

我現在遇到的問題是每當有一個重複的記錄它告訴你一個JavaScript彈出。該彈出窗口禁用與IE頁面的交互。我需要一種方法來關閉條目間的彈出窗口。

這就是我的代碼目前的樣子。

cls 

$URL = "" 
$iterator = 1; 

#starts IE 
$ie = new-object -ComObject "InternetExplorer.Application" 

#visible for testing purposes 
$ie.visible = $true 
#$ie.silent = $true 
$ie.navigate($URL) 

#Manual Input 
$newMAC = read-host -prompt 'Input MAC here' 
$newNAME = read-host -prompt 'Input Computer Name here' 

while($ie.Busy -eq $true) { start-sleep -Milliseconds 100 } 

#enters information into appropriate fields and clicks the add button 
($ie.document.getElementsByName("mc_id") |select -first 1).value = $newNAME; 
($ie.document.getElementsByName("mac_id") |select -first 1).value = $newMAC; 
($ie.document.getElementsByName("btnAddNew") |select -first 1).click(); 

編輯:

我決定的那一刻,在結束我的COM對象爲每個新進入一個草率的解決方案。然而,我現在有導入csv供腳本讀取的問題。

+0

Yikes,我甚至不知道PowerShell可以做到這一點。由於這是用JavaScript標記的,JavaScript解決方案可以接受嗎? – Gerrit0

+0

一種可能的方法是使用user32.dll上的某個函數,如[DestroyWindow](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682(v = vs.85)。 aspx)p/invoke簽名可以[在這裏找到](http://www.pinvoke.net/default.aspx/user32.DestroyWindow)這裏是一個[使用P/invoke簽名的指南](http:// www .leeholmes.com/blog/2009/01/19/powershell-pinvoke-walkthrough /) – BenH

+0

@BenH我會研究這個,謝謝你的建議。 –

回答

1
$wshell = New-Object -ComObject wscript.shell; 
if($wshell.AppActivate('Message from webpage')) 
{ 
    Start-Sleep -Seconds 1 
    [System.Windows.Forms.SendKeys]::SendWait('{Enter}') 
} 

此代碼將設置活動窗口到具有的"Message from webpage"標題的窗口,以便對其進行調整,以匹配彈出標題。

然後它會發送Enter按鍵。您可能可以調整此設置以發送組合鍵來消除彈出窗口。也許甚至使用::SendWait('%{f4}')發送ALT+F4

我假設Javascript彈出窗口在新窗口中打開。或者,我會看到該頁面上使用了哪些其他JavaScript,並且如果它僅用於彈出窗口,則會查找該com頁面上禁用Javascript的頁面。

編輯:

要禁用JavaScript的,你需要將它添加到受限制的站點安全區域,並確保該區域的JavaScript執行關閉,關閉所有的Java代碼執行此頁。但我有一個更好的主意,你可以使用COM對象,試圖打破了網頁彈出功能:

$ie = new-object -ComObject "InternetExplorer.Application" 
$ie.visible = $true 
$ie.navigate("http://www.echoecho.com/jswindows03.htm") 
$ie.Document.body.innerHTML = $ie.Document.body.innerHTML -replace "popup\('www.yahoo.com', 'Win1', 300, 300\);", "" 

該代碼塊打開,有一個演示的javascript彈出功能的頁面,然後它刪除功能來自按鈕onclick的事件。導致流行永遠不會被調用。你可以做同樣的技巧,我已經做了修改頁面的客戶端副本,並打破JavaScript或修改它永遠不會顯示。

+0

我剛試過這個,它似乎沒有切換到彈出窗口,但確實發送了輸入。我將如何去禁用COM對象中的JavaScript? –

+0

添加了對我的答案的更新。沒有看到頁面源代碼,我無法解決你所有的問題,但這應該足以讓你去。以編程方式編輯頁面html代碼以刪除警報JavaScript似乎工作。 '-replace'將正則表達式匹配html並將其替換爲''「'在我的示例中沒有任何結果 – Nick

+0

@ P.McDevitt是否有運氣? – Nick