A Windows PowerShell indítása után a régi, megszokott Parancssorhoz (Command Prompt, cmd.exe) hasonló felület jelenik meg a Windows 10/Windows Server 2016 előtti operációsrendszereken. Amint az alábbi ábrán is látható, kísérteties a hasonlóság, nem lesz itt baj, gondosan tartsuk magunktól távol a dokumentációt és próbálkozzunk bátran.
5 . ábra A cmd.exe és a PowerShell
Windows 10-en a konzol is sok újdonságot ad a korábbiakhoz képest, sokkal színesebb a felület:
6 . ábra A Windows 10 PowerShell konzolja
A PowerShell 7 is nagyon hasonló:
7 . ábra A PowerShell 7
Ami feltűnő, hogy a parancsok különböző szintaktikai elemeit más-más színnel jelöli. A prompt „>” jele pedig pirossá változik, ha a kifejezésünk szintaktikailag helytelen. Továbbá az új konzolban már többsoros kifejezéseket is könnyen tudunk kijelölni, kimásolni és a parancstörténet-tár is okosabban kezeli a többsoros kifejezéseket.
Megjegyzés
A könyvben szereplő képernyőképek és kimásolt szkriptek többsége Windows 7 és Windows Server 2008 R2 verzión születtek. Az esetleges nyomtatás festéktakarékossága okán az alaphelyzet szerinti sötétkék háttérkép előtti fehér betűket kicseréltem fehér háttérkép előtti fekete betűkre. Hogy könnyebben tudjak a példaszkriptek soraira hivatkozni, több helyen az alaphelyzet szerinti
PS C:\Users\Administrator>
promptot a első kiadásokban lecseréltem
[sorszám] PS C:\
promptra. Így a könyvben szereplő képernyőképek és példaszkriptek formailag nem pont ugyanazt adják, mint ha Ön kipróbálja ezeket a saját gépén.
Kezdetnek próbáljuk ki tehát a megszokott parancsokat, vajon mit szól hozzájuk az új shell.
[1] PS C:\> dir
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2009.07.14. 5:20 PerfLogs
d-r-- 2009.11.09. 21:23 Program Files
d-r-- 2009.11.11. 22:22 Program Files (x86)
d-r-- 2009.11.09. 21:15 Users
d---- 2009.11.15. 12:35 Windows
-a--- 2009.11.11. 0:32 458 users.txt
Amint látható, nem történt semmi meglepő, kaptunk egy mappa- és fájllistát, nagyjából a megszokott módon. Eddig rendben, a nehezén túl is vagyunk, ez is csak egy parancssor. Próbálkozzunk valami nehezebbel, írjuk be mondjuk a következőt:
[2] PS C:\> dir /s
dir : Cannot find path 'C:\s' because it does not
exist.
At line:1 char:1
+ dir /s
+ ~~~~~~
+
CategoryInfo : ObjectNotFound:
(C:\s:String) [Get-ChildItem],
ItemNotFoundException
+
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetC
hildItemCommand
Hát ez már nem jött össze: szép piros hibaüzenet tájékoztat, hogy a C:\s mappa nem létezik. Ez így teljesen igaz is, de ki akart oda menni? (Egyébként teljesen korrekt a hibaüzenet, mivel ha mégis van ilyen mappa, akkor azt gond nélkül kilistázza, vagyis a / karakter a gyökérmappát jelenti.) Mi történik itt? Úgy látszik, mégis segítséget kell kérnünk, de vajon hogyan? Mondjuk, legyen a következő:
[3] PS C:\> help dir
NAME
Get-ChildItem
SYNOPSIS
Gets the items and child items in one or more specified locations.
SYNTAX
Get-ChildItem [[-Path] <String[]>] [[-Filter] <String>] [-Exclude <String[
]>] [-Force] [-Include <String[]>] [-Name] [-Recurse] [-UseTransaction [<S
witchParameter>]] [<CommonParameters>]
Get-ChildItem [[-Filter] <String>] [-Exclude <String[]>] [-Force] [-Includ
e <String[]>] [-Name] [-Recurse] -LiteralPath <String[]> [-UseTransaction
[<SwitchParameter>]] [<CommonParameters>]
DESCRIPTION
The Get-ChildItem cmdlet gets the items in one or more specified locations
. If the item is a container, it gets the items inside the container, know
…
Megjegyzés
A PowerShell 3.0 vagy későbbi verzióknál alaphelyzetben nincs telepítve a súgó, így ott csak egy nagyon tömör, csak a szintaxist ismertető help-et kapunk.
Talán meglepő, de a help parancs működik. Talán még meglepőbb, a man parancs is működik! A válaszból viszont az derül ki a NAME alatti sorban, hogy a dir egyáltalán nem is létezik, a mappalistát valójában a Get‑ChildItem nevű parancs produkálta az előbb. Kiderül az is, hogy hogyan kell őt az alkönyvtárakba leküldeni: -recurse, vagy egyszerűen: ‑r kapcsolóval:
[4] PS C:\> dir -r
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2009.07.14. 5:20 PerfLogs
d-r-- 2009.11.09. 21:23 Program Files
d-r-- 2009.11.11. 22:22 Program Files (x86)
d-r-- 2009.11.09. 21:15 Users
d---- 2009.11.15. 12:35 Windows
-a--- 2009.11.11. 0:32 458 users.txt
Directory: C:\PerfLogs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2009.07.14. 4:35 Admin
…
A Get-ChildItem leírását elolvasva joggal kérdezhetjük, hogy miért változott meg az égvilágon minden, ha egyszer ugyanazt a feladatot hajtja végre a Get-ChildItem, mint a jó öreg dir parancs. A válasz pedig egyszerűen az, hogy nem ugyanazt végzi el, nem ugyanúgy, és nem ugyanazzal az eredménnyel! A Get-ChildItem például nemcsak mappákból, hanem számos más adatforrásból is képes listát produkálni, így a regisztrációs adatbázisból, a tanúsítványtárból, stb. is, kimenete pedig korántsem az a lista, amit a képernyőn láttunk.
Ha kiadjuk az alábbi parancsot, szomorúan láthatjuk, hogy help parancs sem létezik, az ő igazi neve Get-Help.
[5] PS C:\> help help
NAME
Get-Help
SYNOPSIS
Displays information about Windows PowerShell commands and concepts.
SYNTAX
Get-Help [-Full] [[-Name] <string>] [-Category <string[]>] [-Component
<string[]>] [-Functionality <string[]>] [-Online] [-Path <string>] [-Ro
le <string[]>] [<CommonParameters>]
…
Hogy tovább szaporítsuk a nem létező, de ennek ellenére jól működő parancsok számát, próbáljuk ki a cd parancsot, majd kérjük el az ő súgólapját is. Láthatjuk, hogy az igazi neve Set-Location, és természetesen nemcsak a fájlrendszerben, hanem a regisztrációs adatbázisban, tanúsítványtárban, stb. is remekül működik. Valójában a cd, és a többi nem létező, de működő parancs csupán egy alias, egy becenév, álnév a megfelelő PowerShell parancsra (lásd: Get-Alias), amelyek hivatalos neve cmdlet (ejtsd: kommandlet, magyarul parancsocska).
A következőkben felsorolunk a fenti parancsokkal kapcsolatos néhány egészen egyszerű példát, amelyek között részben a „régi” cmd parancsok megfelelőit, részben az új képességek demonstrációját találhatjuk.
dir *.txt /s
PS C:\> Get-ChildItem -Include *.txt -Recurse
A HKLM/Software ág kilistázása a registryből.
PS C:\> Get-ChildItem registry::HKLM/Software
dir *.exe
PS C:\> Get-ChildItem * -i *.exe
cd q:
PS C:\> Set-Location q:
Jelenlegi pozíció elmentése. Ahogyan a név sugallja, több pozíció is elmenthető egymás „tetejére”, vagyis egy verembe. A Pop-Location mindig a legfelül lévőre tér vissza, majd eldobja azt.
PS C:\> Push-Location
Átállás a HKEY_CURRENT_USER ágra a registryben.
PS C:\> Set-Location HKCU:
Visszaugrás egy korábbi elmentett pozícióra.
PS C:\> Pop-Location
Átállás a tanúsítványtár „meghajtóra”.
PS C:\> Set-Location Cert:
Azért volt néhány elég furcsa külsejű parancs, igaz? Tanúsítványtár meghajtó!? Mi lesz még itt?
Kísérletezzünk tovább! Ha már ilyen szépen tudjuk használni a nem létező parancsokat, próbáljunk ki valami olyat, ami tényleg biztosan nem létezhet:
PS C:\> 1
1
Semmi hibaüzenet, a PowerShell egyszerűen visszaírta a számot a konzolra.
A PowerShell ablakot bezárni az Exit paranccsal lehet, de ez nem PowerShell cmdlet, nem is alias, hanem ez egy kulcsszó, és mint ilyenről a Get-Help about_Language_Keywords kifejezés futtatása után kapunk bővebb információkat.