Functions/Get-BashPath.ps1
function Get-BashPath { <# .SYNOPSIS To take a normal Windows path and convert it to a bash path for things like git bash. .DESCRIPTION To take a normal Windows path and convert it to a bash path for things like git bash. .PARAMETER Path A path to a file or files. Can include wildcards and the wildcards will be resolved to underlying files. Can be a single path, an array of paths, or from the pipeline. .PARAMETER IncludeInput Switch to indicate if input parameters should be included in the output, aliased to 'IncludeOriginal' .PARAMETER NoResolvePath Switch to not resolve the provided path to see if it exists .EXAMPLE Get-BashPath -Path 'c:\temp\*.csv' /C/temp/Encoding\ Time.csv .EXAMPLE Get-BashPath -Path 'c:\temp\*.csv' -IncludeInput Posh bash ---- ---- C:\temp\Encoding Time.csv /C/temp/Encoding\ Time.csv .EXAMPLE $Special = Show-SpecialFolder -IncludeLocations | Where-Object {$_.Location -and $_.Location -match 'Program Files'} $Special | Add-Member -MemberType NoteProperty -Name BashPath -Value 'x' foreach ($s in $special) { $s.BashPath = Get-BashPath -Path $s.Location } $Special Would return SpecialFolder Location BashPath ------------- -------- -------- CommonProgramFiles C:\Program Files\Common Files /C/Program\ Files/Common\ Files CommonProgramFilesX86 C:\Program Files (x86)\Common Files /C/Program\ Files\ (x86)/Common\ Files ProgramFiles C:\Program Files /C/Program\ Files ProgramFilesX86 C:\Program Files (x86) /C/Program\ Files\ (x86) .NOTES The file(s) must exist for this function to work #> #region Parameter [CmdletBinding(ConfirmImpact='Low')] [OutputType('psobject')] Param( [Parameter(Mandatory, HelpMessage = 'Enter a path to resolve. * and ? are acceptable wildcards', Position = 0, ValueFromPipeline)] [string[]] $Path, [Alias('IncludeOriginal')] [switch] $IncludeInput, [switch] $NoResolvePath ) #endregion Parameter begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" } process { foreach ($currentPath in $Path) { if (-not $NoResolvePath) { $resolve = [array] (Resolve-Path -Path $currentPath).Path if (-not $resolve) { # nothing returned return $null } # .replace(' ','\ ') foreach ($r in $resolve) { $bash = ('/' + $r.replace('\','/').replace(':','').replace(' ','\ ')) if ($IncludeInput) { New-Object -TypeName psobject -Property ([ordered] @{ Posh = $r; bash = $bash}) } else { $bash } } } else { $bash = ('/' + $currentPath.replace('\','/').replace(':','').replace(' ','\ ')) if ($IncludeInput) { New-Object -TypeName psobject -Property ([ordered] @{ Posh = $r; bash = $bash}) } else { $bash } } } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } |