用PowerShell提取当前IE游览器的网址

来源:互联网 发布:软件项目管理实践 编辑:程序博客网 时间:2024/04/30 06:30
If($Export){    $CurrentIEURL = GetIEURL    If($CurrentIEURL -ne $null)    {        $CurrentIEURL|Export-Csv -Path "$Export" -NoTypeInformation        Write-Host "成功导出Csv文件到 '$Export'"    }    Else    {        Write-Warning "当前没有打开的Tab栏。"    }}If($OpenURL){    $URLs = (Import-Csv -Path $OpenURL).URL                $IEApplication = New-Object -ComObject InternetExplorer.Application    $navOpenInBackgroundTab = 0x1000    $IEApplication.Visible = $true     ForEach($URL in $URLs)    {        Try        {            $IEApplication.Navigate($URL, $navOpenInBackgroundTab)            While($IEApplication.Busy)            {                Start-Sleep -Millisecond 100            }            Write-Host "成功打开 '$URL' 到IE游览器中。"        }        Catch        {            Write-Host "打开'$URL'失败。"        }    }}

其实在很久之前我就想写这篇文章,因为出于工作的原因,工作忙了一整天游览器打开了满满的Tab,而事情依然没有做完,回到家依然需要继续游览还没有看完的文档等等,可急忙又要赶车,即便是在线收藏夹也一时帮不了我,所以不如用PowerShell来写一个自动提取当前所有打开的游览地址,回家后再自动瞬间打开,可比手动收藏夹里保存方便多了。

代码如下:
[CmdletBinding(DefaultParameterSetName='Export')]Param(    [Parameter(Mandatory=$true,Position=0,ParameterSetName='Open')]    [Alias('Open')][String]$OpenURL,    [Parameter(Mandatory=$true,Position=0,ParameterSetName='Export')]    [Alias('path')][String]$Export)Function GetIEURL{    $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}If($Export){    $CurrentIEURL = GetIEURL    If($CurrentIEURL -ne $null)    {        $CurrentIEURL|Export-Csv -Path "$Export" -NoTypeInformation        Write-Host "成功导出Csv文件到 '$Export'"    }    Else    {        Write-Warning "当前没有打开的Tab栏。"    }}If($OpenURL){    $URLs = (Import-Csv -Path $OpenURL).URL                $IEApplication = New-Object -ComObject InternetExplorer.Application    $navOpenInBackgroundTab = 0x1000    $IEApplication.Visible = $true     ForEach($URL in $URLs)    {        Try        {            $IEApplication.Navigate($URL, $navOpenInBackgroundTab)            While($IEApplication.Busy)            {                Start-Sleep -Millisecond 100            }            Write-Host "成功打开 '$URL' 到IE游览器中。"        }        Catch        {            Write-Host "打开'$URL'失败。"        }    }}

做一个简单的拆解:
这里我们设计了一个主方法,GetIEURL用来提取当前IE游览器中所有的Tab栏目地址,这里有一点需要提到的是,我们采用了,Com接口里的Shell.Application的对象,然后调用旗下的Windows方法来寻找当前打开的iexplore.exe进程,从而获取每一个IE进程的locationURL与LocationName
Function GetIEURL{    $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}

在主方法设计完后,我们为了使整个方法满足我们的灵活需求,我们设计了Export和OpenURL两个参数,分别作用是导出提取的URL以及从导出的URL文件里自动打开所有的URL。

If($Export){    $CurrentIEURL = GetIEURL    If($CurrentIEURL -ne $null)    {        $CurrentIEURL|Export-Csv -Path "$Export" -NoTypeInformation        Write-Host "成功导出Csv文件到 '$Export'"    }    Else    {        Write-Warning "当前没有打开的Tab栏。"    }}If($OpenURL){    $URLs = (Import-Csv -Path $OpenURL).URL                $IEApplication = New-Object -ComObject InternetExplorer.Application    $navOpenInBackgroundTab = 0x1000    $IEApplication.Visible = $true     ForEach($URL in $URLs)    {        Try        {            $IEApplication.Navigate($URL, $navOpenInBackgroundTab)            While($IEApplication.Busy)            {                Start-Sleep -Millisecond 100            }            Write-Host "成功打开 '$URL' 到IE游览器中。"        }        Catch        {            Write-Host "打开'$URL'失败。"        }    }}

基本如上。
0 0
原创粉丝点击