PowerShell 5.0-tól kezdődően lehetőségünk van külső parancssori eszközök nélkül is az NTFS fájlrendszer rejtélyes átjáróit, kapcsolatait kezelni. Elsőként emlékeztetőül egy kis összefoglaló a különböző kapcsolati típusokról:
|
Hard Link |
Soft Link (Junction, Reparse Point) |
Symbolic Link |
Követelmények |
A cél objektum (fájl) ugyanazon a köteten kell legyen |
A cél objektum (könyvtár) ugyanazon a gépen kell legyen |
Bárhol lehet a cél objektum, relatív vagy abszolút elérési úttal vagy UNC eléréssel hálózati megosztás is |
Amikor a Windows Explorerből töröljük a kapcsolatot jelző objektumot |
A fájl tartalma megmarad, amíg legalább egy hard link-et mutat a fájlra. Utána az adat is törlődik. |
A cél könyvtár érintetlen marad. |
A cél objektum érintetlen marad. |
Amikor a cél objektumot elmozgatjuk |
A csatolás továbbra is érvényes lesz. |
A csatolás érvénytelen lesz. |
A csatolás érvénytelen lesz. |
Fájlokra v. könytárakra mutathat |
Csak fájlokra |
Csak könyvtárakra |
Fájlra és könyvtárra is |
Egyéb jellegzetesség |
|
|
Relatív hivatkozás is engedélyezett Rendszergazda jogosultság szükséges a létrehozásához |
Mindegyik kapcsolati típust hasonló módon lehet létrehozni. Elsőként nézzünk egy hard link létrehozását:
PS C:\> New-Item -Path C:\PowerShell\Links -Name hardlink.txt -ItemType hardlin
k -Value C:\PowerShell\Links\Target\célfájl.txt
Directory: C:\PowerShell\Links
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---l 2016.02.28. 18:49 15 hardlink.txt
Látható, hogy az „igazi” célfájl.txt-re mutató hardlink.txt névvel hoztam létre a csatlakozást. Igazából a hard linkek esetében nincs is értelme „igazi” meg „nem igazi” fájlokról beszélni, minden fájlbejegyzés egyenrangú, láthatjuk is a méretnél is, hogy 15 bájt méretűnek látjuk ezt az objektumot. Ennek ellenére látunk egy „l” betűt a Mode oszlopban, de ha lekérdezzük az fájl attribútumait, akkor ott nem látunk semmi „hard linkségre” utaló információt:
PS C:\> Get-Item C:\PowerShell\Links\hardlink2.txt | ft name, Attributes
Name Attributes
---- ----------
hardlink.txt Archive
Viszont újabb tulajdonságokat is találunk a fájloknál PowerShell 5.0-tól kezdődően:
PS C:\> Get-Item C:\PowerShell\Links\hardlink.txt | ft name, target, linktype
Name Target LinkType
---- ------ --------
hardlink.txt {C:\PowerShell\Links\Target\célfájl.txt} HardLink
Ha azt mondtam, hogy a hard linkek egyenrangúak az eredeti fájlbejegyzéssel, akkor ez a Target és LinkType tulajdonság honnan jön? Ezeket a GetFileInformationByHandle Win32 API hívás deríti ki valószínűleg a háttérben, és ha megnézzük az „eredeti” fájlt, ott ugyanezen adatok tükörképét látjuk:
PS C:\> Get-Item C:\PowerShell\Links\Target\célfájl.txt | ft name, target, link
type
Name Target LinkType
---- ------ --------
célfájl.txt {C:\PowerShell\Links\hardlink.txt} HardLink
A Target tulajdonságban látjuk tehát az összes többi hivatkozást ugyanerre a fájlra.
A könyvtárak becsatolása sokkal egyszerűbb történet. A csatolás létrehozása nagyon hasonló a hard linkhez, csak az ItemType itt junction:
PS C:\> New-Item -Path C:\PowerShell\Links -Name junctionkönyvtár -ItemType jun
ction -Value C:\PowerShell\Links\Target
Directory: C:\PowerShell\Links
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----l 2016.02.28. 19:09 junctionkönyvtár
Az elem tulajdonságai is hasonlóak:
PS C:\> Get-Item C:\PowerShell\Links\junctionkönyvtár | ft name, Target, LinkTy
pe
Name Target LinkType
---- ------ --------
junctionkönyvtár {C:\PowerShell\Links\Target} Junction
Míg a hard linkeknél a Target több elemből is állhat, ha ugyanarra a fájlra több hard link is mutat, addig a junction-nél mindig csak egy Target lesz.
A szimbolikus kapcsolatok is hasonlóak a csatolásokhoz, itt fájlokhoz és könyvtárakhoz is létrehozhatunk kapcsolatokat:
PS C:\> New-Item -Path C:\PowerShell\Links -Name symlink.txt -ItemType symbolic
link -Value C:\PowerShell\Links\Target\célfájl.txt
Directory: C:\PowerShell\Links
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---l 2016.02.28. 19:10 0 symlink.txt
PS C:\> New-Item -Path C:\PowerShell\Links -Name symlinkkönyvtár -ItemType symb
oliclink -Value C:\PowerShell\Links\Target
Directory: C:\PowerShell\Links
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----l 2016.02.28. 19:10 symlinkkönyvtár
Az új tulajdonságok is teljesen a vártnak megfelelően alakulnak:
PS C:\> dir C:\PowerShell\Links\sym* | ft name, Target, LinkType
Name Target LinkType
---- ------ --------
symlinkkönyvtár {C:\PowerShell\Links\Target} SymbolicLink
symlink.txt {C:\PowerShell\Links\Target\célfájl.txt} SymbolicLink