[switch]$Directory, [switch]$Junction, [switch]$Relative, [string]$SearchPath = "." )

string link = args[1]; string target = args[2]; bool isDirectory = Array.Exists(args, a => a.Equals("/d", StringComparison.OrdinalIgnoreCase)); bool unprivileged = Array.Exists(args, a => a.Equals("/u", StringComparison.OrdinalIgnoreCase));

static void CreateLink(string[] args)

if ($UseJunction) cmd /c mklink /J "`"$Link`"" "`"$targetResolved`"" elseif ($IsDir) cmd /c mklink /D "`"$Link`"" "`"$targetResolved`"" else cmd /c mklink "`"$Link`"" "`"$targetResolved`""

if (-not (Test-Path $Target)) Write-Error "Target does not exist: $Target" return

$item = Get-Item -Path $Path -Force if ($item.LinkType -notin @("SymbolicLink", "Junction")) Write-Error "Not a symlink or junction: $Path" return