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.