可以自动化 IE 的打印功能。
大概思路:
$PdfPrinter = @(Get-WmiObject -Class Win32_Printer | Where-Object Name -Like '*pdf*')
If ($PdfPrinter.Count -ne 1)
{
Write-Error '有多个 PDF 打印机或者没有 PDF 打印机'
exit
}
# 设置 Microsoft Print to PDF 为默认打印机
$PdfPrinter[0].SetDefaultPrinter()
# 打开 IE
$IE = New-Object -ComObject InternetExplorer.Application
$IE.Navigate('
https://geelaw.blog/')
# 等 IE 加载完毕
While ($IE.Busy) { Start-Sleep 1; }
# 生成一个文件名
$FileName = [System.IO.Path]::Combine($env:TMP, [System.Guid]::NewGuid().ToString('n') + '.pdf')
# 准备一个脚本对象
$WSh = New-Object -ComObject WScript.Shell
# 用默认打印机打印
$IE.ExecWB(6, 2)
# 这里的等待时间需要动态调整才行,等保存对话框弹出来
Start-Sleep 1;
# 复制文件名,按 Ctrl+V,再按 Enter
$FileName | Set-Clipboard
$WSh.SendKeys('^V{ENTER}')
# 需要动态调整,等打印完成
Start-Sleep 1
# 关掉 IE
$IE.Quit()
# 打开保存的文件
$FileName | Invoke-Item
你可以使用可以编程设置保存位置的打印机来更好地自动化保存的位置(似乎 Adobe PDF Printer 是可以的)。