55 lines
1.4 KiB
PowerShell
55 lines
1.4 KiB
PowerShell
[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 -Force $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 | ForEach-Object {
|
|
if( Test-Path $p ) {
|
|
$p | Get-Item -Force | Select-Object -ExpandProperty FullName
|
|
} else {
|
|
$p
|
|
}
|
|
}
|
|
}
|
|
|
|
$p
|
|
}
|
|
}
|
|
# try {
|
|
# get-item $Path -Force -ErrorAction Stop |
|
|
# Select-Object -ExpandProperty FullName
|
|
# } catch {
|
|
# $_.targetObject
|
|
# }
|