Private/New-Shortcut.ps1
#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() } |