Játékok az elérési utakkal

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.



Word To HTML Converter