středa 24. prosince 2008

Práce s cestou: *-Path

Pokud pracujete v PowerShellu s cestami mohou se vám hodit cmdlety z dnešního článku. Popsané techniky fungují jak pro práci se soubory/adresáři, tak i pro práci v registrech (s jistými omezeními).

Test-Path slouží k otestování existence cesty. Nejčastěji se používá pro test existence určitého souboru.

PS C:\> Test-Path C:\CONFIG.SYS
True
PS C:\> Test-Path $PROFILE
True
PS C:\> Test-Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
True
PS C:\> Test-Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion
False


V posledním případě je vidět, že práci s registry nám trochu komplikuje přístup PowerShellu k provideru registru. Funguje na úrovni klíčů a nikoli hodnot.

Convert-Path převede např. proměnné prostředí na reálnou cestu. Čili:

PS C:\> Convert-Path ~
C:\Documents and Settings\moravec
PS C:\> Convert-Path $env:TEMP
C:\WINDOWS\TEMP


Split-Path slouží k rozdělění cesty na její části, zjednodušeně řečeno na adresář a soubor. Bez uvedení parametrů vrátí rodičovský adresář.

PS C:\> Split-Path $env:temp
C:\WINDOWS

Pokud chcete naopak poslední část cesty, použijte parametr Leaf.

PS C:\> Split-Path $env:temp -Leaf
TEMP
PS C:\> Split-Path $PROFILE -Leaf
Microsoft.PowerShell_profile.ps1

Chcete-li získat root testované cesty použijte parametr Qualifier (případně NoQualifier, pokud chcete získat cestu bez rootu).

PS C:\> Split-Path $PROFILE -Qualifier
C:
PS C:\> Split-Path $PROFILE -NoQualifier
\Documents and Settings\moravec\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PS C:\> Split-Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Qualifier
HKLM:

Resolve-Path se používá v případě, že chceme získat cestu zapsanou zástupnými znaky. Porovnejte následující výstupy:

PS C:\> Resolve-Path ~
Path
----

C:\Documents and Settings\moravec
PS C:\> Convert-Path ~
C:\Documents and Settings\moravec

Na první pohled je vidět, že výstupem Resolve-Path bude asi něco zajímavějšího než jen čistý text. Je to tak - Convert-Path vrací řetězec, Resolve-Path naproti tomu vrací objekt typu System.Management.Automation.PathInfo. Tento objekt má několik vlastností.

PS C:\> Resolve-Path ~ | fl *

Drive : C
Provider : Microsoft.PowerShell.Core\FileSystem
ProviderPath : C:\Documents and Settings\moravec
Path : C:\Documents and Settings\moravec


Join-Path je posledním z "cestovních" příkazů. Používá se k tvorbě cesty. Chcete-li v adresáři, kde je uložen profil, vytvořit adresář pro vaše skripty, je jednou z cest následující příkaz:

PS C:\> mkdir (join-path (split-path $profile) \skripty\)

Žádné komentáře: