Private/New-Shortcut.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#requires -version 4 function New-Shortcut { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "Path to one or more locations.")] [ValidateNotNullOrEmpty()] [string]$Target, [Parameter(Mandatory = $true, Position = 1, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "Path to one or more locations.")] [ValidateNotNullOrEmpty()] [string]$Destination, [Parameter(Mandatory = $false, Position = 2, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "Path to one or more locations.")] [ValidateNotNullOrEmpty()] [string]$Arguments = $null ) if (!(Test-Path $Destination -IsValid)) { Throw "Shortcut destination path is not valid. Got $($Destination)" } if (Test-Path $Destination) { Remove-Item $Destination -ErrorAction:SilentlyContinue | Out-Null } Write-Verbose "Creating shortcut: $($Destination)" $WshShell = New-Object -comObject WScript.Shell $Shortcut = $WshShell.CreateShortcut($Destination) $Shortcut.TargetPath = $Target if (($Arguments -ne $null) -and ($Destination -match '.+\.lnk$')) { $Shortcut.Arguments = $Arguments } $Shortcut.Save() } |