[CmdletBinding()]param( [switch]$Expand, [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName,Position=0)] [Alias("FullName")] [string[]]$Path ) process { function Get-FullPath { param([string]$Path) if([System.IO.Path]::IsPathRooted($Path)){ [System.IO.Path]::GetFullPath($Path) }else{ [System.IO.Path]::GetFullPath((Join-Path $PWD $Path)) } } foreach( $local:p in $Path ) { switch( $p[0] ) { '@' { $p = Join-Path $MyPSScriptRoot $p.Substring(1) } '~' { if( $p -match '^~[^/]*' ) { $local:m = $Matches[0] $p = $p -replace "^$m",((Get-Item $m).FullName) } } } if([System.IO.Path]::IsPathRooted($p)){ $p = [System.IO.Path]::GetFullPath($p) }else{ $p = [System.IO.Path]::GetFullPath((Join-Path $PWD $p)) } if( $Expand ) { $p = $p | Get-Item | Select-Object -ExpandProperty FullName } $p } } # try { # get-item $Path -Force -ErrorAction Stop | # Select-Object -ExpandProperty FullName # } catch { # $_.targetObject # }