ps/Modules/Alkami.PowerShell.Common/Public/New-Symlink.ps1
2023-05-30 22:51:22 -07:00

52 lines
1.6 KiB
PowerShell

Function New-Symlink {
<#
.SYNOPSIS
Create a new symlink. This function is to make my life as a SRE or developer a lot easier.
.PARAMETER ActualFilePath
[string] The place where the file is actually at
.PARAMETER TargetFilePath
[string] The place where the file should appear to be
.PARAMETER TargetName
[string] The name to use for the target. If not supplied, will match the filename or folder name of the ActualFilePath (Path)
#>
[CmdletBinding()]
Param(
[Alias("Path")]
[Alias("Source")]
[Parameter(Mandatory = $true)]
[string]$ActualFilePath,
[Alias("Destination")]
[Alias("Target")]
[Parameter(Mandatory = $true)]
[string]$TargetFilePath,
[Alias("Name")]
[Parameter(Mandatory = $false)]
[string]$TargetName
)
$loglead = (Get-LogLeadName)
$ActualFilePath = Resolve-Path $ActualFilePath
if (!(Test-Path $ActualFilePath)) {
Write-Warning "$logLead : The requested path to be linked doesn't actually exist on disk [$ActualFilePath]"
return
}
$actualLeaf = (Split-Path $ActualFilePath -Leaf)
$targetLeaf = (Split-Path $TargetFilePath -Leaf)
$leafNamesMatch = $actualLeaf -eq $targetLeaf
if ([string]::IsNullOrWhiteSpace($TargetName) -and !$leafNamesMatch) {
$TargetName = $actualLeaf
}
Write-Host "$logLead : New-Item -ItemType SymbolicLink -Path $TargetFilePath -Value $ActualFilePath -Name $TargetName -Force"
(New-Item -ItemType SymbolicLink -Path $TargetFilePath -Value $ActualFilePath -Name $TargetName -Force) | Out-Null
}