Functions/Get-PathProvider.ps1
# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function Get-PathProvider { <# .SYNOPSIS Returns a path's PowerShell provider. .DESCRIPTION When you want to do something with a path that depends on its provider, use this function. The path doesn't have to exist. If you pass in a relative path, it is resolved relative to the current directory. So make sure you're in the right place. .OUTPUTS System.Management.Automation.ProviderInfo. .EXAMPLE Get-PathProvider -Path 'C:\Windows' Demonstrates how to get the path provider for an NTFS path. #> [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string] # The path whose provider to get. $Path ) Set-StrictMode -Version 'Latest' Use-CallerPreference -Cmdlet $PSCmdlet -Session $ExecutionContext.SessionState $pathQualifier = Split-Path -Qualifier $Path -ErrorAction SilentlyContinue if( -not $pathQualifier ) { $Path = Join-Path -Path (Get-Location) -ChildPath $Path $pathQualifier = Split-Path -Qualifier $Path -ErrorAction SilentlyContinue if( -not $pathQualifier ) { Write-Error "Qualifier for path '$Path' not found." return } } $pathQualifier = $pathQualifier.Trim(':') $drive = Get-PSDrive -Name $pathQualifier -ErrorAction Ignore if( -not $drive ) { $drive = Get-PSDrive -PSProvider $pathQualifier -ErrorAction Ignore } if( -not $drive ) { Write-Error -Message ('Unable to determine the provider for path {0}.' -f $Path) return } $drive | Select-Object -First 1 | Select-Object -ExpandProperty 'Provider' } |