MKLink

Az előző két eszköz közvetlenül meghívható volt PowerShellből, hiszen mindkettő egy-egy önálló futtatható állomány, exe. A parancssori eszközök újabb kategóriájának jeles képviselője az MKLink, amely nem egy külső program, hanem a cmd.exe része, így meghívása is másképpen történik, mint amit az előzőekben láttunk.

Egyéként az MKLink segítségével tudunk hard- és szimbolikus (soft) linkeket létrehozni, azaz egy fájlt több mappában is tudunk láttatni egy időben. Ennek számos előnye van, egyrészt kevesebb tárhelyre van szükségünk, másrészt egy fájlt csak egy helyen kell módosítani, az összes többi látszólagos példánya vele egy időben fog módosulni.

Ilyen linkeket a Windowsban csak ezzel a paranccsal lehet létrehozni. Ezek a linkek nem tévesztendők össze a shortcut-tal, ami ugye egy teljesen különálló kis fájl, ami ugyan rámutat a célfájlra, de a duplakattintáson kívül más alkalmazások nem fogják a célfájl „klónjának” tekinteni. Például, ha a Get-Content cmdlettel kiolvasunk egy szimbolikus linket, akkor az visszaadja a célfájl tartalmát, míg ha ugyanezt egy shortcut-ra adjuk ki, akkor krixkraxot kapunk vissza.

A szimbolikus és a hard linkek között az a különbség, hogy a szimbolikus link esetében maga a link listázása során látjuk, hogy az valójában nem ugyanaz a fájl, mint amire mutat, hanem csak egy 0 bájtos fájl, míg a hard linkeknél igazából az egy alternatív név, ami ugyanarra a fájlra mutat. Valójában, amikor létrehozunk egy új fájlt, annak a neve is egy hardlink. Ha pedig az MKLink segítségével egy újabbat hozunk létre, akkor a fájlnál rögzítésre kerül, hogy immár nem egy néven szerepel, hanem már kettőn. Így amikor bármelyik néven keresztül kitöröljük a fájlt, az nem fog előszörre még törlődni, csak a hardlink számláló csökken eggyel, és a fájl csak akkor szűnik meg ténylegesen, ha az utolsó nevén keresztül is töröljük.

Nézzük tehát a függvényt, mellyel fájlokhoz hard- és szimbolikus linkeket lehet készíteni:

function new-link {

param(

    [Parameter(Mandatory = $true, Position = 0)]

    [string]

    [ValidateScript({test-path $_})]

        $source,

    [Parameter(Mandatory = $true, Position = 1)]

    [string]

    [ValidateScript({!(test-path $_)})]

        $target,

    [switch] $hard

)

if($hard){

    $command = "mklink /h $target $source"

}

else{

    $command = "mklink $target $source"

}

$result = cmd /c """$command"""

if($result -match "created"){

    Write-Host $result -ForegroundColor green

}

else{

    Write-Error $result -ErrorAction stop

}

}

A függvény elején a paraméterdefiníciós rész, némi ellenőrzéssel. A lényegi rész a cmd /c """$command""", ahol a $command az az MKLink kifejezése, amit a függvénynek átadott paraméterek ismeretében raktam össze.



Word To HTML Converter