PowerShell for Non-N00bs: Symlinks


Here’s how to create a shortcut in PowerShell.  Actually, it’s how to create a shortcut with COM in PowerShell

function New-ShortCut
{

   
param (

        [
string]$target
= $null,

        [
string]$name
= $target,

        [
string]$parent
= (Get-Location).ToString(),

        [string]$iconLocation,


        [
switch]$help

    );



   
if ($help
-or !$target)
{


@”

New-Shortcut -target <string> -name <string> -parent <string



target: what this is a shortcut to.  Required.

name: what is the name of this shortcut.  Default to -target’s value.

parent: where to create this shortcut.  Default to current working
directory.

“@
;

       
if
(
$help) {

           
return;
        }
else
{

           
Throw “New-Shortcut
-target not specified, required. Exiting.”
;

        }

    }



   
$shell
= New-Object
-com WScript.Shell;

    $name
=
$name -replace
‘[\\\/\:\*\?\”\<\>\|]’, “-“;

   
if (!($name
-match “\.lnk$”))
{
$name +=
“.lnk”; }

   
$shortcut
= $shell.CreateShortcut($(Join-Path
$parent $name));

   
$shortcut.TargetPath
= $target;

    if ($iconLocation) {

         if (Test-Path $iconLocation) {

             $shortcut.IconLocation = $iconLocation;

         }
else {

             Write-Warning “-iconLocation
$iconLocation specified, not found.”
;

         }

    }
    $shortcut.Save();;
}


Not much of a walkthrough – we create a WScript.Shell object, then use it to create a shortcut object.  We populate the object and save it.  End of story.

Oh, this is actually a function in my $profile, so it doesn’t use the script outline before.

To review, we learned a few things:

  • PowerShell interacts with COM pretty cleanly.
  • WScript.Shell creates shortcuts.
  • My $profile has stuff I don’t ever use.
Comments (0)

Skip to main content