Поэтому я пытаюсь распечатать указанную веб-страницу на указанном принтере в Windows. (Разрабатывая 7, я, вероятно, в конечном итоге разверну это на Windows Server 2008). Мне сказали, что способ сделать это - автоматизировать Internet Explorer и вызвать execWB(6,2)
. поэтому я получил этот скрипт:
$targetPrinter = "Snagit 13"
$targetWebPage = "http://google.com"
try
{
$defaultPrinter = (Get-WmiObject -Query " SELECT name FROM Win32_Printer WHERE Default=$true").Name
$ie = new-object -comObject InternetExplorer.Application
$ie.navigate($targetWebPage)
(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='$targetPrinter'").SetDefaultPrinter()
while ( $ie.busy ) { Start-Sleep -second 5 }
$ie.execWB(6,2)
while ( $ie.busy ) { Start-Sleep -second 5 }
$ie.quit()
Write-Host "done"
}
catch
{
}
finally
{
(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='$defaultPrinter'").SetDefaultPrinter()
[gc]::collect()
[gc]::WaitForPendingFinalizers()
}
(очевидно, Google только для примера, на самом деле он указывает на веб-страницу интрасети. Если это имеет значение.) (Snagit 13 - это не бесплатное программное обеспечение, которое должно обрабатывать снимки экрана, но важно, что здесь он предоставляет принтер, который создает изображение при печати на нем. Просто чтобы сэкономить бумагу.)
Если я копирую и вставляю эту строку построчно в подсказку powershell, она работает так, как вы ожидаете. Но если я пытаюсь запустить сценарий или даже скопировать и вставить весь сценарий в интерактивную подсказку, IE игнорирует меня. Я вижу вывод от установки принтера по умолчанию, он не выдает никаких ошибок, но печать никогда не происходит. Разве я не могу автоматизировать IE из неинтерактивного приглашения? Если так, как я могу надеяться напечатать веб-страницу?
Я также попробовал другой метод для печати веб-страницы:
$web = New-Object Net.WebClient
$web.DownloadString("http://google.com") > "tomorrow.html"
rundll32.exe mshtml.dll,PrintHTML "tomorrow.html"
Tom.html создан и выглядит правильно, но печать не происходит (снова).