if we use our get-favourite function to look at the content of favourite files
get-favourite | select -f 5 | foreach{""; get-content -Path $_.path}
we see this sort of structure
[DEFAULT]
BASEURL=http://www.bing.com/
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://www.bing.com/
IDList=
IconFile=http://www.bing.com/favicon.ico
IconIndex=1
Not all files have the BASEURL or [DEFAULT] section but they do have the [InternetShortcut]. The other bit we need to consider is the iconfile
We can put together a function to change the URL in a favourite
function set-favourite{ [CmdletBinding()] param( [parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [ValidateNotNullOrEmpty()] [string]$path, [ValidateNotNullOrEmpty()] [string]$url ) BEGIN{}#begin PROCESS{ $lines = Get-Content -Path $path $i = 0 foreach($line in $lines) { if ($line.StartsWith("BASEURL") ){$lines[$i] = "BASEURL=$url"} if ($line.StartsWith("URL") ){$lines[$i] = "URL=$url"} if ($line.StartsWith("IconFile") ){$lines[$i] = "IconFile=$url/favicon.ico"} $i++ } Set-Content -Value $lines -Path $path }#process END{}#end <# .SYNOPSIS Changes URL of a favourite .DESCRIPTION Changes URL of a favourite .EXAMPLE get-favourite | where {$_.Name -like "google"} | set-favourite -url "www.bing.com" #> }
The function can be used as follows
get-favourite | where {$_.Name -like "google"} | set-favourite -url www.bing.com
Next job is to create a favourite from scratch