Home
» ablakok
»
PowerShell és minden, amit erről a segédprogramról tudni kell
PowerShell és minden, amit erről a segédprogramról tudni kell
Mi lenne, ha a számítógéped elvégezné a hétköznapi feladatokat? A Windows PowerShell segítségével képes rá. Így automatizálhatod a PowerShell segítségével azokat az ismétlődő, mindennapi feladatokat, amelyeket senki sem akar újra és újra elvégezni.
A Microsoft PowerShell egy parancssori segédprogram és szkriptnyelv, amely hatékony eszköz a rendszergazdák számára a számítógépek és hálózatok széles skálájának automatizálására. A PowerShell a parancssor összetevőit tartalmazza, és a .NET keretrendszerre épül. Ha a WebTech360-ról olvas, akkor tudnia kell, hogy a PowerShell az informatikai rendszergazdák által választott eszköz a nagy hálózatok kezeléséhez.
A PowerShell használatának elsajátítása számos unalmas mindennapi feladatot leegyszerűsít. Rendszerszintű módosításokat is végrehajthat a hálózaton keresztül anélkül, hogy minden egyes szervert külön kellene konfigurálnia. A PowerShell egyre elengedhetetlen részévé válik a hibrid felhőkörnyezetek futtatásának .
A PowerShell számos különböző felhasználási móddal rendelkezik, amelyek segítenek a hatékonyabb munkavégzésben és a hálózat hatékony működtetésében. A legalapvetőbb felhasználási módok közé tartozik: a rendszerek napi frissítéseinek ütemezése, jelentések készítése az aktuális folyamatokról, időszakos szolgáltatások és egyebek. Bár ezek közül a feladatok közül sok elvégezhető a grafikus felhasználói felületen keresztül, a PowerShell lényege, hogy gyorsabban elvégezze őket.
Ha van egy rutinszerű karbantartási feladatod, amelynek a beállítása néhány percet vesz igénybe, akkor ugyanazt a funkciót egyetlen PowerShell nevű parancsba írhatod. Ezután, amikor legközelebb megnyitod a szkriptet, az a háttérben fog futni. A PowerShell szkriptelési logikájának elsajátítása, az objektumok és a var (változók) működésének megértése, valamint intelligens telepítése a hálózaton elgondolkodtat majd azon, hogy miért nem használtad korábban a PowerShellt.
Ez az oktatóanyag a PowerShell alapjait ismerteti, ami hasznos lesz az informatikában kezdőknek, különösen, ha ismeri a Windows parancssorát. Bemutatja az alapvető eszközök és parancsok használatát, a fájlokkal és mappákkal való munkát, az objektumok megértését, a változók használatát és a távoli szerverek kezelését.
A Windows parancssori segédprogramjainak rövid története
A Windows NT megjelenése után a CMD.EXE lett a Windows parancssori segédprogramja. Bár a CMD.EXE örökölt néhány elemet DOS-os elődjétől (COMMAN.COM), továbbra is egy meglehetősen „primitív” szkriptnyelven alapult: Windows parancsfájlokat (.CMD és .BAT) használt. A Windows Scripting Host, valamint a VBScript és JScript nyelvek hozzáadása jelentősen javította a segédprogram szkriptelési képességeit.
Ezek a technológiák meglehetősen kiegyensúlyozott keverékei a fejlett parancssori segédprogramoknak és a szkriptelési környezeteknek. Az igazi probléma nem az, hogy hány CMD.EXE, .CMD és Windows Scripting Host fájl manipulálható velük. A fő panasz és aggodalom néhány látszólag egyszerű feladat elvégzésével kapcsolatos.
Parancssori és szkripteszközök „keretrendszerét” használva bármely mérsékelten átfogó szkript kötegelt parancsok, Windows Scripting Host és önálló végrehajtható fájlok kombinációját igényli. Minden szkript eltérő konvenciókat használ a végrehajtáshoz és a kérésekhez, az elemzéshez és az adatok visszaadásához.
A CMD.EXE fájlban található változók gyenge támogatása, az inkonzisztens felületek és a Windows-beállításokhoz való korlátozott hozzáférés, valamint egy másik gyengeség megnehezíti a parancssori szkriptek megvalósítását és használatát. Mi ez a „másik gyengeség”, kérdezhetnéd? A szöveg. Ezekben a technológiákban minden szöveg. Egy parancs vagy szkript kimenete szöveg, amelyet elemezni és újra kell formázni, hogy bemenetként szolgáljon a következő parancshoz. Ez az alapvető kiindulópont, amelyet a PowerShell minden hagyományos shelltől átvesz.
PowerShell eszközök, parancsok és modulok bemutatása
Az ebben a szakaszban bemutatott három fogalom csupán az alapvető tudnivalókat tartalmazza a PowerShell alapját képező kulcsfogalmak megértéséhez. A PowerShell-parancsok használatához több időt kell majd fordítania a haladóbb fogalmak elsajátítására és elsajátítására.
PowerShell-eszközök
A PowerShell alapértelmezés szerint telepítve van a Windows 10, Windows 7, Windows Server 2008 R2 és a Windows újabb verzióiban. A PowerShell újabb verziói új funkciókat és „cmdlet”-eket (a Microsoft PowerShell-parancsokra használt kifejezése – ejtsd: „command-lets”) adnak hozzá, és a Windows Management Framework (WMF) megfelelő verziójával együtt települnek.
Jelenleg a WMF 5.1 a legújabb ajánlott verzió. Bizonyos esetekben néhány új funkció a WMF verzióján kívül az operációs rendszertől is függ. Például a Windows 8 és a Windows Server 2012 támogatja a Test-NetConnection parancsmagot, amely lehetővé teszi egy adott TCP/IP porthoz való kapcsolódás tesztelését , de ez a parancsmag nem érhető el Windows 7 rendszerben, még a WMF legújabb verziójának futtatásakor sem.
A legtöbb Windows rendszeren a felhasználók két PowerShell környezettel rendelkeznek, a PowerShell konzollal és a PowerShell ISE-vel (Integrated Scripting Environment). A PowerShell konzol egy hagyományos parancssorhoz hasonlóan jelenik meg, de a PowerShell teljes funkcionalitásával rendelkezik. A változónevek, ciklusok, parancsok automatikus kiegészítése és pipeline-kezelés mind elérhető a PowerShell konzolról.
A haladóbb felhasználáshoz (például szkriptek írásához) a PowerShell ISE parancsok automatikus kiegészítését, kódkiemelést és a Microsoft Intellisense kódkiegészítését biztosítja, amelyek segítenek PowerShell-kód létrehozásában és tesztelésében. A PowerShell ISE lehetővé teszi több PowerShell-szkript egyidejű használatát is a füles navigáció segítségével.
parancsmagok a PowerShellben
A PowerShell-parancsok alapja a cmdlet. A Microsoft számos tervezési stratégiát alkalmazott a PowerShell-ben található cmdletek létrehozásakor.
Az első a parancsmagok nevének könnyű kikövetkeztetése, vagy legalábbis könnyebb felderítése. A PowerShell-parancsok vagy parancsmagok a könnyebb használatra is alkalmasak, szabványosított szintaxissal rendelkeznek, így könnyebb szkripteket létrehozni a parancssori felületről.
A cmdletek az ige-főnév formátumot használják, mint például a Get-Service, a Stop-Service vagy az Import-Csv. A cmdlet nevének ige része a főnéven végrehajtott műveletet jelzi. Az információk lekérésére használt cmdletek nevében jellemzően szerepel a Get ige, például a Get-Process vagy a Get-Content . A módosításra használt parancsok általában a Set igével kezdődnek , míg az új entitás hozzáadására használt parancsok általában Add vagy New igével kezdődnek .
Másodszor, a PowerShellben gyakran használt paraméterek is szabványosított neveket kapnak. Például a -ComputerName paraméter lehetővé teszi a parancsmag végrehajtását egy vagy több távoli számítógépen. A -Credential paraméter egy hitelesítési objektum megadására szolgál, amely felhasználói hitelesítő adatokat tartalmaz a parancs adott felhasználóként történő futtatásához.
Modulok a PowerShellben
A parancsmagokhoz és a paraméterekhez is használhat aliasokat a billentyűleütések számának csökkentése és a parancs teljes hosszának lerövidítése érdekében (ami több parancs láncolásakor hasznos). Bár ezek az aliasok nem mindig szabványos elnevezési konvenciókat használnak, mégis tükrözik a hagyományos parancssori segédprogramokat.
A PowerShellben az olyan aliasok, mint a DIR, CD, DEL és CLS, rendre a Get-ChildItem, Set-Location, Remove-Item és Clear-Host parancsmagoknak felelnek meg. A paraméteraliasok kétféleképpen működhetnek: használhatják a parancsmag által biztosított előre definiált aliast, vagy aliasíthatók annyi karakter megadásával, hogy egyedi egyezést hozzanak létre a parancsmag támogatott paraméterei között.
Fájl- és mappakezelés
A legtöbb rendszergazdának munkája során fájlokat és mappákat kell kezelnie, legyen szó akár egy mappa áthelyezéséről a szerveren egy másik helyre, naplófájlok archiválásáról vagy nagy fájlok kereséséről. Azokban az esetekben, amikor ugyanazok a műveletek sok fájlon ismétlődnek, a PowerShell használata az automatizáláshoz hatékony időmegtakarítási megoldást jelenthet.
Fájlok és mappák kereséséhez a régi számítástechnika korában az egyik első parancssori eszköz, amit egy rendszergazda megtanult, a dir parancs volt. A dir parancs listázza a megadott könyvtárban található fájlokat és mappákat.
A PowerShellnek van egy hasonló parancsa a Get-ChildItem parancsmag formájában . A Get-ChildItem lehetővé teszi, hogy gyorsan felépítsünk egy könyvtárban található fájlok listáját oly módon, hogy a fájlokat pipe paranccsal manipulálhassuk, vagy a kimenetet egy változóhoz rendelhessük.
A Get-ChildItem egyszerűen használható egy elérési út megadásával, akár egy folyamaton keresztül, a -Path paraméter használatával , akár közvetlenül a cmdlet neve után. A Get-ChildItem által visszaadott válasz módosításához figyelembe kell venni a cmdlet által elérhetővé tett néhány paramétert.
A -Filter paraméter az egyik módja a fájlok keresésének. Alapértelmezés szerint a Get-ChildItem csak a célkönyvtár közvetlen gyermekeit adja vissza. Ez a funkció kibővíthető a -Recurse paraméter használatával , amely rekurzívan keres az aktuális könyvtárban található könyvtárakban.
A PowerShell 4.0-ban a Get-ChildItem függvény lehetővé tette az eredmények fájlokra vagy könyvtárakra korlátozását a –File vagy –Directory kapcsoló használatával . A PowerShell korábbi verzióiban az eredményeket a Where-Object tulajdonságnak kellett átadni, a PSIsContainer tulajdonság alapján szűrve ezt a meghatározást. Az alábbiakban egy példa látható a C:Users könyvtárakban található könyvtárak visszaadására használt mindkét technikára:
Rejtett vagy rendszerfájlok észleléséhez a -Force kapcsolót kell használni . A PowerShell 4.0-s és újabb verzióiban a Get-ChildItem függvénnyel csak rejtett, írásvédett vagy rendszerfájlok adhatók vissza a -Hidden, -ReadOnly és –System paraméterek használatával . Hasonló funkciók érhetők el a korábbi verziókban a Mode tulajdonság Where-Object használatával történő szűrésével:
Fájlokkal való munka során általában csak azt kell tudnunk, hogy a fájl létezik-e, vagy hogy a könyvtár elérési útja érvényes-e. A PowerShell egy parancsmagot biztosít ehhez Test-Path formájában, amely igaz vagy hamis értéket ad vissza.
A Test-Path függvényt óvintézkedésként használják egy adott fájl másolásának vagy törlésének megkísérlése előtt.
Fájlok másolása, áthelyezése és törlése
Másolási elem: Egy vagy több fájlt vagy könyvtárat másol a -Path paraméterrel megadott helyről a -Destination opcióval megadott helyre.
Move-Item: Fájl vagy mappa áthelyezése.
Könyvtárstruktúra másolásakor vagy áthelyezésekor a -Recurse parancsot kell használni ahhoz, hogy a parancsmag végrehajtsa a műveletet a könyvtáron és annak tartalmán. Bizonyos esetekben a -Force parancsra is szükség van , például amikor egy írásvédett fájlt felülír egy másolási művelet.
Elem eltávolítása: Fájl vagy mappa törlése.
A -Force kapcsolót akkor kell használni, ha írásvédett fájllal találkozunk, a -Recurse kapcsolót pedig akkor, ha egy könyvtárat és annak tartalmát töröljük.
A PowerShell -WhatIf és -Confirm használata
Mielőtt komoly, tömeges törlést hajtana végre, használja a -WhatIf kapcsolót . A -WhatIf segítségével megtekintheti, mi történne egy szkript vagy parancs futtatása esetén, és hogy lenne-e bármilyen negatív hatása a fontos üzleti adatok törlésével. Azt is érdemes megjegyezni, hogy a -WhatIf nem korlátozódik a fájlműveletekre, széles körben használják a PowerShellben.
Az olyan szkriptek esetében, amelyeket manuálisan kíván futtatni, vagy ami még rosszabb, és amelyek függő parancsokkal rendelkeznek, amelyek manuálisan futnak, érdemes lehet a -Confirm kapcsolót használni . Ez lehetővé teszi, hogy felhasználói beavatkozást kérjen a művelet tényleges végrehajtása előtt.
PowerShell szkriptek = Batch fájlok szteroidokon
Maga a PowerShell .NET nyelven íródott, és nagymértékben a .NET keretrendszeren alapul. Mint ilyen, a PowerShell objektumorientált shell és szkriptnyelvként lett kialakítva. A PowerShellben mindent objektumként kezel a rendszer, a .NET keretrendszer teljes képességeivel. Egy parancs objektumok gyűjteményét teszi elérhetővé, amelyek az adott objektumtípus tulajdonságainak és metódusainak használatával használhatók. Amikor egy parancs kimenetét egy másikba szeretnéd átirányítani, a PowerShell valójában magát az objektumot továbbítja, nem csak az első parancs szöveges kimenetét. Ez teljes hozzáférést biztosít a következő parancsnak az objektum összes tulajdonságához és metódusához a folyamatban.
Az, hogy mindent objektumként kezelünk, és a parancsok között objektumokat fogadunk, nagy változást jelent a parancssori segédprogramok elméletében. Ennek ellenére a PowerShell továbbra is úgy működik, mint egy hagyományos shell. A parancsok, szkriptek és végrehajtható fájlok beírhatók és futtathatók a parancssorból, az eredmények pedig szövegként jelennek meg. A Windows .CMD és .BAT fájlok, a VBScriptek, a JScriptek és a CMD.EXE-n belül futó végrehajtható fájlok mind továbbra is a PowerShellben futnak. Mivel azonban nem objektumorientáltak, nincs teljes hozzáférésük a PowerShellben létrehozott és használt objektumokhoz. Ezek a régi szkriptek és végrehajtható fájlok továbbra is mindent szövegként kezelnek, de a PowerShell számos más technológiával kombinálható. Ez különösen fontos, ha a PowerShell-t olyan meglévő szkriptek gyűjteményével szeretnéd használni, amelyeket nem tudsz egyszerre konvertálni.
PowerShell-paraméterek ismertetése
A parancsmagok paramétereket fogadhatnak el a viselkedésük megváltoztatásához. Parancsmag vagy függvény futtatásakor paraméterértékeket adhat meg annak meghatározására, hogy mit, mikor, hol és hogyan futtasson az egyes PowerShell-parancsok.
Például a Get-Process lekéri és listázza az operációs rendszerben futó összes folyamatot:
A Get-Process függvény listázza az összes futó folyamatot.
De mi van akkor, ha csak egy adott folyamatot szeretne lekérni? Ezt paraméterek segítségével teheti meg. Például az összes Slack-folyamat lekéréséhez használhatja a Name paramétert a Get-Process parancsmaggal:
Get-Process -Name Slack
Ezután csak a "slack" nevű folyamatokat fogod látni:
Get-Process használata paraméterekkel
Tipp : Néhány paraméter „pozicionális”, ami azt jelenti, hogy a nevük opcionális. Ebben az esetben a Get-Process -Name Slack és a Get-Process Slack ugyanazt a feladatot hajtja végre.
Minden parancsmag különböző típusú paramétereket fogad el. A Get-Help parancs használatával megtekintheti a parancsmag elfogadott paramétereit a SZINTAXIS szakaszban.
Get-Help Get-Process
Látni fogja az adott parancsmag futtatásának összes lehetséges módját:
parancsmag szintaxis paraméterei
Ebben az esetben a Get-Process parancsmag olyan paramétereket fogad el, mint a Name, Id, ComputerName, Module, FileVersionInfo és más gyakori paraméterek. Az itt használt szimbólumok jelentése:
Szimbólum
Név
Jelentés
Dob
A paraméter nem fogad el bemenetet
-
Kötőjel
Adja meg a paraméter nevét
<>
kapcsos zárójelek
Helyőrző szöveghez
[]
Zárójelek
A paraméter egy vagy több értéket is elfogadhat.
{}
kapcsos zárójelek
A paraméter egy értékkészletet fogad el.
A paraméterek egy értékkészletet fogadnak el, amely jelzi a szükséges adattípust, például karakterláncot, egész számot, logikai értéket vagy dátumot/időt. Például a következő parancs:
Get-Process [[-Name] ]
... azt jelenti, hogy a Name paraméter egy vagy több karakterlánc értéket fogad el, míg ez a parancs:
Get-Process -Id
... azt jelenti, hogy az Id paraméter egy vagy több egész értéket fogad el.
Az előző Get-Process példa a Name paramétert használta az eredmények leszűkítésére. Ha azonban egy konkrétabb folyamatra szeretné szűkíteni a listát, használhatja az ID paramétert , amely a szintaxisában leírtak szerint egész számot igényel.
Get-Process -Id 3016
Ezután csak egy folyamatot fog látni a listában:
Az Id paraméter használata parancsmagokban
Folyamat létrehozása
A PowerShell az összes adatot objektumként dolgozza fel. Egy szkript létrehozásához ezeket az objektumokat egy sor parancsmagon vagy függvényen kell keresztül futtatni, amelyeket a függőleges vonal (|) jelöléssel lehet összekötni. A megfelelő parancsmagok kiválasztása és logikai sorrendben történő összekapcsolása egy folyamat segítségével fontos a hatékony szkriptekhez.
Tegyük fel, hogy egy szkriptet hozol létre, amely rendezi és megjeleníti az 5 legtöbb helyet foglaló fájlt egy könyvtárban. Vannak hatékonyabb módszerek is egy fájlrendező szkript megírására, de ez az egyszerű könnyen érthető:
Szkript Rendezés-NagyFájlok PS1
Ehhez a PowerShellben egy ilyen folyamatot kell használni:
Most, hogy van egy működő folyamatunk, elmentheted PS1 szkriptfájlként, így nem kell minden használatkor importálnod.
A PS1 fájl létrehozásának legegyszerűbb módja, ha beilleszti a szkriptet a Jegyzettömbbe, és .ps1 kiterjesztéssel menti a fájlt.
Szkript létrehozása a Jegyzettömbbel
Miután létrehozta a PS1 fájlt, a PowerShellben a ./ScriptName.ps1 parancs futtatásával használhatja azt :
PS1 szkript használata
Tipp : Ha jogosultsági hibát kap, a leggyorsabb megoldás, ha rendszergazdai jogosultságokkal futtatja a PowerShellt a szkript futtatásakor.
Gratulálunk! Most már létrehozhat PowerShell PS1 szkripteket.
Példa egy PowerShell-szkriptre
Az új technológiák nagyszerűségéről olvasni és megérteni egy dolog, de a tényleges használata már egy másik! A cikk további részében egy PowerShell szkriptet fogunk fejleszteni, hogy bemutassuk a képességeit és a használatát.
A DIR parancs az egyik leggyakoribb parancs a CMD.EXE fájlban . Ez a parancs megjeleníti a szülőkönyvtárban található összes fájlt és alkönyvtárat (ahogy az az 1. ábrán látható). Az egyes objektumok neve mellett a megadott információk tartalmazzák az utolsó frissítés dátumát és időpontját, valamint az egyes fájlok méretét. A DIR megjeleníti a könyvtárban található összes fájl együttes méretét, valamint a fájlok és alkönyvtárak teljes számát is.
1. ábra
A DIR parancs PowerShellben történő futtatása szintén a 2. ábrához hasonló könyvtárlistát eredményez, de kissé eltérő módon. A PowerShellben nincs DIR parancs, hanem a Get-ChildItem, amely ugyanazt a funkciót látja el. A PowerShellben a DIR a Get-ChildItem aliasa. Nem szándékozom az aliasokba belemenni ebben a cikkben. A DIR a PowerShellben a Get-ChildItem rövidítéseként is felfogható.
A PowerShell DIR parancsa a fent említett információk nagy részét nyújtja: a fájlok és mappák listáját, az utolsó módosítás dátumát és időpontját, valamint az egyes fájlok méretét. Azonban hiányzik belőle az az összefoglaló információ, amelyet a CMD.EXE DIR parancsa nyújt: a mappában lévő összes fájl teljes méretét, a fájlok teljes számát és az almappák teljes számát.
2. ábra
A példaforgatókönyvhöz létre kell hoznod egy PowerShell szkriptet, amely szimulálja a CMD.EXE DIR parancsot. Az alábbiakban ismertetem a szkript legfontosabb részeit.
DIR.PS1: Fejléc
Egy PowerShell szkript PowerShell parancsokból áll egy egyszerű szöveges fájlban, amelynek kiterjesztése .PS1. A DIR helyett egy DIR.PS1 nevű szövegfájlt kell használni.
A szkript futtatásához írja be a következő parancsot a PowerShell képernyőn:
.DIR.PS1 X:Folder
Ahol az X a meghajtó partíciójának betűjele (például C, D, E), a Folder pedig a mappa neve.
Ha információkat szeretne megtudni egy meghajtó partíciójáról, akkor a Windows Management Instrumentation (WMI) programot kell használnia. A WMI részletei túlmutatnak e cikk keretein, ezért itt nem megyünk bele. Az alábbi PowerShell-kód azonban könnyen érthető WMI használata nélkül is. Létrehozhat egy „$filter” változót, amelyet a Get-WmiObject paranccsal használhat. Ez a szűrő jelzi a Get-WmiObject parancsnak, hogy csak egy adott meghajtóról szeretne információt kapni. A Get-WmiObject parancs eredményeit egy $volInfo nevű változó tárolja. Ne feledje, hogy a PowerShellben minden egy objektum; a $volInfo mostantól a Get-WmiObject által visszaadott objektum.
Most már hozzáférhetsz az objektumhoz társított összes objektumhoz és metódushoz. A kötet sorozatszáma a VolumeSerialNumber tulajdonságon keresztül érhető el. A visszaadott szám egy 8 karakteres karakterlánc. De gyakran érdemes négy számként formázni, kötőjellel elválasztva. Ez hasonlóan tehető meg, mint a következő sorban. Az első sor végén lévő kötőjel a sor folytató karaktere a PowerShellben. Alapvetően azt jelzi a PowerShellnek, hogy a sor nem törik meg, és hogy a következő sort tartalmazza. Sortörésekre nincs szükség kód írásakor, de a szélesség csökkentése és a kód olvashatóbbá tétele érdekében érdemes megtenni.
Most, hogy van egy $volInfo objektumod, kiírhatod a DIR fejlécinformációkat a képernyőre. Ha a meghajtónak nincs neve, a képernyőre írt szöveg kissé eltér majd attól, mintha a meghajtónak lenne neve. Egy egyszerű If-Else utasítással ellenőrizhetjük, hogy a VolumeName tulajdonság üres karakterlánc-e. A Write-Host utasítással minden egyes sort kiírhatunk a képernyőre.
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
A Write-Host parancs elején és végén található „`n” karakter új sor beszúrására szolgál a szöveg elé és után. A Write-Host parancs minden sor végére új sort ad hozzá. Tehát az „`n” hatása az, hogy egy üres sort hoz létre a szöveg elé és után.
Észrevetted az „-eq”-t az If parancsban? Ez egy egyenlőség-összehasonlító operátor. Az alábbi táblázat az összes összehasonlító operátort mutatja:
-eq, -ieq
Összehasonlítás alapja
-né, -iné
Az összehasonlítás nem egyenlő
-gt, -igt
Hasonlítsa össze a nagyobb mint
-ge, -ige
Hasonlítsa össze a következővel: nagyobb vagy egyenlő
-lt, -ilt
Hasonlítsa össze a kisebbeket, mint
-le, -ile
Hasonlítsa össze a kisebb vagy egyenlő értékkel
Az összehasonlító operátorok előtti -i karakter azt jelzi, hogy az operátor nem megkülönbözteti a kis- és nagybetűket.
3. ábra: A jelenlegi szkript kimeneti adatai
DIR.PS1: Fájlok/mappák listája
Most már készen állsz a mappa tartalmának és tulajdonságainak megjelenítésére. Az első dolog, amit tenned kell, hogy meghívod a PowerShell Get-ChildItem parancsot, hogy lekérj egy fájlgyűjteményt, és paraméterként átadd a szkriptnek. A Get-ChildItem parancs lekéri a fájl- és mappaobjektumok gyűjteményét, nem csak a nevüket, hanem közvetlenül a Sort-Object parancsnak is átadja ezeket az objektumokat a rendezéshez. Alapértelmezés szerint a Sort-Object parancs a Name tulajdonság alapján rendezi az objektumokat. Tehát nem kell más paramétert megadnod. Az objektumok rendezett gyűjteménye ezután egy $items nevű változóban lesz tárolva.
$items = Get-ChildItem $args[0] | Sort-Object
Miután létrehoztunk egy fájl- és mappaobjektum-gyűjteményt, végig kell haladnunk rajtuk, és meg kell jelenítenünk a megfelelő tulajdonságokat. Ehhez a ForEach parancsot használjuk. Minden fájl vagy mappa esetében a megjelenített tulajdonságok a fájl utolsó módosításának dátuma és időpontja, neve, hossza vagy mérete lesznek. A zárójelben lévő furcsa kinézetű karakterláncok .NET karakterlánc-formátumkódok. Ezeket a mezők balra/jobbra igazítására, valamint a dátumok, időpontok és számok formázására használjuk. Ezen karakterlánc-formátumkódok megértése nem túl fontos, mivel nem elengedhetetlenek a szkript természetéhez.
Az If utasítással határozhatjuk meg, hogy egy objektum könyvtár-e vagy sem. Ha a Mode attribútum első karaktere „d”, akkor az objektum egy könyvtár. Ezt kétszer is ellenőrizni kell, mert a könyvtárak kódja gyakran eltér a fájlok kódjától.
Figyeljük meg a $totalDirs++ sort az If utasításon belül. Ez egy számláló, amely a könyvtárak számát követi nyomon. Hasonlóképpen, van egy $totalFiles változó, amely az összes fájl teljes méretét követi nyomon. Ezeket az értékeket a végrehajtás során mindig kiszámítja a rendszer. De csak akkor jelennek meg, amikor a fájllistázási folyamat befejeződött.
4. ábra: A frissített szkript kimeneti adatait jeleníti meg.
DIR.PS1: Lábléc
Már csak annyi a dolgod, hogy kiírd a képernyőre a fájlok és könyvtárak teljes számát, az összes fájl teljes méretét és a meghajtópartíción lévő szabad területet. Ehhez az előző szakaszban létrehozott számlálóváltozókat ($totalFiles, $totalDirs, $totalSize) kell használnod. A szabad terület mennyiségét a szkript elején létrehozott $volInfo változóból tudhatod meg.
5. ábra: A szkript teljes kimeneti adatait jeleníti meg.
Előrejelzések és fejlesztések lehetnek
Bár a létrehozott szkript majdnem azonos kimenetet produkál, mint a CMD.EXE DIR parancs, van néhány figyelmeztetés, amire érdemes odafigyelni, és néhány lehetséges fejlesztés.
Ez a szkript nem végez hibakeresést.
Ha a parancsfájl nem kap érvényes elérési utat, a parancsfájl PowerShell hibaüzenettel meghiúsul.
A szkriptben megadott könyvtárak teljes száma 2-vel kevesebb, mint a CMD.EXE DIR parancs eredménye, mivel a Get-ChildItem parancs nem számolja a „.” és a „..” könyvtárakat, mint a CMD.EXE fájlban.
A szkript csak fájlnév és mappanév szerint rendez, más attribútumok szerinti rendezést nem biztosít.
A szkript nem tudja megjeleníteni a mappa és az összes almappa tartalmát.
Hogyan segít a PowerShell bármit automatizálni a számítógépén?
Írj egyszerű PowerShell szkripteket
A PowerShell segítségével szinte bármit automatizálhatsz, például a fájlok kötegelt átnevezését az egységesség érdekében vagy az alkalmazások automatikus indítását. Írjunk néhány egyszerű Windows PowerShell szkriptet, hogy lássuk, hogyan működik.
Megjegyzés : Ha a szkript végrehajtásakor hibát tapasztal a végrehajtási szabályzattal kapcsolatban, előfordulhat, hogy ideiglenesen engedélyeznie kell a szkript végrehajtását a „Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass” parancs futtatásával.
Fájlok kötegelt átnevezése egy mappában
A PowerShell segítségével fájlokat másolhat, helyezhet át és törölhet a számítógépén. Egy adott fájltípusú fájlokat tömegesen is átnevezhet. Például így nevezhet át több szövegfájlt úgy, hogy a fájlnevekben a „régico” előtagot „újco”-ra cseréli:
A fenti szkriptben a ".txt" a fájlkiterjesztés szűrője. Módosíthatod, és beállíthatod .jpg, .docx stb. kiterjesztésre, hogy különböző típusú fájlokat keress.
Alkalmazás automatikus indítása
Ha minden nap ugyanazokat az alkalmazásokat nyitja meg, írhat egy PowerShell szkriptet, amellyel egyetlen kattintással elindíthatja őket:
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
Illeszd be a szkriptet egy Jegyzettömb fájlba, és mentsd el LaunchFavoriteApps.ps1 néven. Ezután kattints duplán a fájlra az összes, a szkriptben felsorolt alkalmazás elindításához.
Fontos fájlok másolása egy biztonsági mentési helyre
A következő szkript segítségével rendszeresen biztonsági másolatot készíthet fontos fájljairól egy biztonsági mentési helyre. Ügyeljen arra, hogy szükség szerint módosítsa a forrás- és célútvonalakat:
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
Írj egy PowerShell szkriptet a fájlok napi automatikus rendszerezéséhez
Mivel naponta sokféle fájltípust töltünk le, a Letöltések mappa gyorsan zsúfolttá válhat a szétszórt fájloktól. Ennek javítására írhatunk egy PowerShell szkriptet, amely minden nap végén fájltípus szerint mappákba rendezi a letöltött fájlokat.
Nyisson meg egy új Jegyzettömb fájlt, és illessze be a következő szkriptet. Ügyeljen arra, hogy a szkriptben a forrásmappa elérési útját úgy módosítsa, hogy megegyezzen a Letöltések mappa elérési útjával:
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
A fájl mentéséhez kattintson a Fájl > Mentés másként menüpontra , és írja be fájlnévként az OrganizeDownloadsFolder.ps1 nevet. Ezután kattintson a Mentés másként lehetőségre, és válassza az Összes fájl lehetőséget . Kattintson duplán az OrganizeDownloadsFolder.ps1 fájlra a szkript futtatásához.
Feladatok ütemezése és végrehajtása
Természetesen a szkriptírás az automatizálási folyamat egyik része. A második rész annak biztosítása, hogy a szkript automatikusan végrehajtható legyen a feladat végrehajtásához. Ehhez ütemezett feladatokat hozhatunk létre a szkript napi vagy szükség szerinti futtatásához.
Nyissa meg a PowerShell programot, majd másolja ki és illessze be a következő szkriptet, és nyomja meg az Enter billentyűt . Ügyeljen arra, hogy a „J:\OrganizeDownloadsFolder.ps1” részt a OrganizeDownloadsFolder.ps1 szkript teljes elérési útjával cserélje le.
Ha kész, nyomd meg az Enter billentyűt . A szkript létrehoz egy ütemezett feladatot a Feladatütemezőben, hogy minden nap 17:00-kor lefuttassa a fájlrendszerező szkriptet. Ha más időpontot szeretnél, módosíthatod a fenti szkriptben.
Ezenkívül a PowerShell segítségével automatizálhatsz más mindennapi feladatokat is, például egy olyan helyfigyelő szkriptet, amely figyelmeztet, ha elfogy a szabad hely az elsődleges meghajtón, jelszóval védheted a PDF-dokumentumok kötegeit, sőt élő háttérképeket is alkalmazhatsz a képmappádból.
Bár a PowerShell egy hatékony segédprogram és szkriptnyelv, eltart egy ideig megérteni és használni, különösen, ha nem ismered a .NET-keretrendszer környezetét. Remélem, hogy ez a cikk és a példa szkript hasznos lesz mindazok számára, akik meg akarják érteni a PowerShellt. De a cikkben létrehozott példa szkript meglehetősen egyszerű. Úgy vélem, hogy sokkal teljesebb mértékben felépíthető és fejleszthető, hogy összetettebb alkalmazásokat is kiszolgáljon.