几乎99%的人现在打开电脑都会打开游览器,也相信大家很多时候都会遇到过工作到一半或者有事要关电脑的时候,游览器打开了很多网址但是还没来得及看完,很多人会选择手动保存一个个网址,即便你把它保存进收藏夹里也依然很麻烦,太耗时了。这些网址毕竟是临时的,如果放进收藏夹还会把收藏夹弄乱。所以如果能有个方法可以瞬间导出当前所有的IE游览器内的网址就会十分方便。
如下我们用PowerShell写了一个简单的方法,读取所有当前所有的IE地址,稍后我会一行行做讲解下:
Function Get-IEURL
{
$IEObjs = @()
$ShellWindows = (New-Object -ComObject Shell.Application).Windows()
Foreach($IE in $ShellWindows)
{
$FullName = $IE.FullName
If($FullName -ne $NULL)
{
$FileName = Split-Path -Path $FullName -Leaf
If($FileName.ToLower() -eq "iexplore.exe")
{
$Title = $IE.LocationName
$URL = $IE.LocationURL
$IEObj = New-Object -TypeName PSObject -Property @{Title = $Title; URL = $URL}
$IEObjs += $IEObj
}
}
}
$IEObjs
}
Get-IEURL
运行后,会得到如下结果:
URL Title
--- -----
https://www.baidu.com/ 百度一下,你就知道
http://www.qq.com/ 腾讯首页
对比下游览器中的数据与我们预期的一致:
下面我们来简单说明下实现原理,我发现进程管理器里的IE父进程里包含了多个子进程,每个子进程就是每个tab的相关信息。于是我打算获得当前的IE父进程,从中找出我们所需要获得信息。我使用如下方法新建一个对象,改方法可以获得当前所有应用程序的窗体对象:
$ShellWindows = (New-Object -ComObject Shell.Application).Windows()
我们接着通过如下循环遍历获得每个进程信息,只要窗体的全名等于iexplorer.exe,那这个就是我们要找的对象。
<strong>Foreach($IE in $ShellWindows)
{</strong>
$FullName = $IE.FullName
If($FullName -ne $NULL)
{
$FileName = Split-Path -Path $FullName -Leaf
<strong>If($FileName.ToLower() -eq "iexplore.exe")
{
}</strong>
}
<strong>}</strong>
找到我们的IE对象后,我们就可以直接获取内部信息了:
Foreach($IE in $ShellWindows)
{
$FullName = $IE.FullName
If($FullName -ne $NULL)
{
$FileName = Split-Path -Path $FullName -Leaf
If($FileName.ToLower() -eq "iexplore.exe")
{
<strong>$Title = $IE.LocationName
$URL = $IE.LocationURL</strong>
$IEObj = New-Object -TypeName PSObject -Property @{Title = $Title; URL = $URL}
$IEObjs += $IEObj
}
}
}
最后,把我们提取的属性信息放进我们自定义的对象里。