Nézzük kicsit tovább, hogy az elérési utakat kezelő cmdletekkel miket tudunk még csinálni. Az első ilyen probléma a meghajtó betűjelének leválasztása egy elérési út jellegű adatból. Legyen a vizsgálandó elérési út mondjuk a c:\munka. A korábban már látott split-path-szal lehet leválasztani az meghajtót:
[37] PS C:\> Split-Path c:\munka
c:\
Ha nem kell a „backslash”, akkor ezt még lehet fokozni:
[38] PS C:\> Split-Path c:\munka -Qualifier
c:
Ha a kettőspont sem kell, akkor ahhoz sajnos már nincsen további kapcsoló, így ahhoz már –replace operátor kell:
[39] PS C:\> (Split-Path c:\munka -Qualifier) -replace ":", ""
c
Ez természetesen a registry esetében is működik:
[40] PS C:\> (Split-Path HKLM:\Software -Qualifier) -replace ":", ""
HKLM
Hogyan lehetne azt meghatározni, hogy egy elérési út mely provideren van? Az előző megoldásból kiindulva, az így kijövő meghajtót már átadhatjuk a Get-PSDrive cmdletnek, és ennek Provider tulajdonságának Name tulajdonsága adja a megoldást:
[44] PS C:\> (Get-PSdrive ((Split-Path HKLM:\Software -Qualifier) -replace ":",
"")).provider.name
Registry
Mi van akkor, ha az „aktuális könyvtár” jelre is akarjuk, hogy ez a kifejezés működjön? Bele kell kombinálni a Resolve-Path cmdletet is, enélkül hibát ad:
[45] PS C:\> (Get-PSdrive ((Split-Path . -Qualifier) -replace ":", "")).provide
r.name
Split-Path : Cannot parse path because path '.' does
not have a qualifier spec
ified.
At line:1 char:26
+ (Get-PSdrive ((Split-Path <<<< . -Qualifier) -replace ":",
"")).provider.na
me
+
CategoryInfo : InvalidArgument:
(.:String) [Split-Path], Forma
tException
+
FullyQualifiedErrorId : ParsePathFormatError,Microsoft.PowerShell.Comma
nds.SplitPathCommand
Get-PSDrive : Object reference not set to an instance
of an object.
At line:1 char:13
+ (Get-PSdrive <<<< ((Split-Path . -Qualifier) -replace
":", "")).provider.na
me
+
CategoryInfo : NotSpecified: (:)
[Get-PSDrive], NullReferenceE
xception
+
FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerSh
ell.Commands.GetPSDriveCommand
[46] PS C:\> (Get-PSdrive ((Split-Path (resolve-path .) -Qualifier) -replace ":
", "")).provider.name
FileSystem
A megoldás a [46]-os sorban már működött.
Mit tud még a Split-Path:
[47] PS C:\> split-path C:\munka\a.txt -NoQualifier
\munka\a.txt
[48] PS C:\> split-path C:\munka\a.txt -Parent
C:\munka
[49] PS C:\> split-path C:\munka\a.txt -Leaf
a.txt
A [47]-es sorban a meghajtó nélküli elérési utat kaptam meg a –NoQualifier kapcsoló használatával, a [48]-as sorban a szülő mappa elérési útját adta vissza a parancs a –Parent kapcsolóval, a [49]-es sorban meg a „gyerek” objektum nevét a –Leaf kapcsolóval. Ezekkel a lehetőségekkel viszonylag kevés esetben kell nekünk sztringműveletekkel kibányászni a megfelelő elérési út szakaszokat.