Kezdőlap > PowerShell > PowerShell alapok – Rendszergazdáknak

PowerShell alapok – Rendszergazdáknak

2007. december 7. péntek Hozzászólás Go to comments

A PowerShell egy teljesen új generációs parancssoros felügyeleti eszköz. Ahhoz, hogy megértsük és átlássuk a működését ismerkedjünk meg a Powershell kialakulásának okaival, és mibenlétével.

Miért is volt szükség a PowerShellre?

Azok a felhasználók (Magukat „Igazi Programozóknak” nevezik) akik igazán egy Unix-terminál előtt ülve érzik magukat elemükben, a Windows rendszereken kényelmetlenül mozogtak. Nem igazán volt számukra igazi alternatíva.

Mi is volt?

o Command Prompt – kicsit régi, kicsit nehézkes, kicsit korlátolt (De a miénk 🙂 )

o Windows Scripting Hosting (WSH) – egész jó, hisz a COM objektumok egész sok és sokféle problémára nyújtanak megfelelő megoldást. De a WSH is korlátolt az interaktivitás területén.

Mi lehet a megoldás?

Adott a Microsoft .NET framework, amely rengeteg problémára nyújt megoldást, de a keretrendszer által készített programokat le kell fordítani, hiszen csak programozók használják. De a fejlesztők úgy gondolták, hogy ki kellene aknázni a keretrendszer által nyújtott lehetőségeket a rendszergazdáknak is.

Tehát összefoglalva szükség volt egy robosztus, minden körülmények között helytálló Shellre. Egy olyan shellre amely:

· Olyan interaktív, mint a bash

· Olyan jól és rugalmasan programozható, mint a Perl

· És beágyazható, mint a TCL

Így született meg tehát a PowerShell (CodeName: Monad). Tehát a Powershell egy vadonatúj scriptrendszer mely .NET objektumokkal zsonglőrködik. Ennek jelentőségét a Pipe (csövezésnél) értjük meg igazán. A PowerShellben használt parancsokat cmdleteknek nevezzük.

Nézzük meg közelebbről mire is képes ez az új generációs parancssoros felügyeleti eszköz.

Mivel az előadás célja nem egy teljes PowerShell ismertetése és bemutatása, ezért elsősorban az öntanulás beindítása a cél.

Help

Tehát kezdjük a help paranccsal.

clip_image006

Mint látjuk a rendszer teljesen önleíró. Láthatjuk a parancsokat, aliasaokat (ezekről később szót ejtünk). Válasszunk ki egy parancsot a listából. Mondjuk nézzünk meg közelebbről a Get-ChildItem –et. Írjuk be a következőt: help Get-ChildItem

clip_image008

Ekkor megkapunk minden információt az adott parancsról. De ha ez számunkra még mindig nem lenne elég, adjuk ki a következő parancsot: help Get-ChildItem –example

clip_image010

Ekkor példa scripeteket kapunk bőséges leírással, ami azért a kezdeti lépéseket rendkívül megkönnyíti.

Alias

A következő parancs legyen az alias. Bármilyen meglepő, ezzel a paranccsal ki lehet listázni az úgynevezett aliasokat.
clip_image012

Amint látjuk, hogy a régi DOS-os parancsoknak megtalálhatóak a PowerShellbeli megfelelői. PÉLDÁUL: a DIR parancs nem más, mint a Get-ChildItem. De meglehet találni néhány Linuxos parancsot is Például az ls –t. Tehát azok, akik csak régi DOS-os vagy linuxos ismeretekkel rendelkeznek nekiállhatnak a PowerShell használatához és tanulásához.

Csővezetés

Akik találkoztak már linuxal számukra nem ismeretlen a csővezetés fogalma. A futtatott parancsokat egymáshoz lehet csatolni a pipe ’ | ’ karakter segítségével. Ami annyit tesz, hogy a parancs eredményét nem az outputra borítja, hanem a következő lépésnek adja oda a végrehajtási sorban. A korábbi parancskörnyezetek az egyes parancsok között csak stringet tudtak közvetíteni. Ennek van egy komoly hátránya, gondoljunk csak bele, mi van akkor, ha kivonatoljuk mondjuk egy DIR parancsból a dátumokat vagy például a Read Only flageket? Ez a script, hogyan futna egy arab, vagy egy kínai windowson? Elég lehetetlen feladatnak tűnik. De mégis, hogy működik ez a PowerShellben? Nos, mivel a powershell .Net objektumokat, használ ezért mindaddig objektumokkal dolgozik, amíg valamit ki nem kell borítani a képernyőre, de tovább is dobhatjuk egy pipe segítségével anélkül, hogy információt vesztenénk. Képernyőre íráskor természetesen stringeket ír ki.

clip_image014

Ki írjuk a futó processzek listájából az első 6 elemet.

Változók használata

A PowerShellben természetesen lehet használni változókat is.
Jelölésük: $valtozonev
Mint ahogy megszokhattuk a változóknak tudunk értéket adni, valamint akár egy teljes parancs eredményét eltárolhatjuk a változóban.

Például.: $x = get-childitem

clip_image016

Ekkor az x változóban el lesz tárolva a Get-ChildItem eredménye. Ahhoz, hogy a változóból kinyerjük az értéket egyszerűen írjuk be a parancssorba a változó nevét: $x, és a képernyőn megjelenik a benne tárolt érték.

clip_image018

Természetesen a változóknál is lehet a csővezetést alkalmazni.

PÉLDÁUL: $x | select-object –first 3

clip_image020

Ez a parancs csak az első 10 elemet írja ki a képernyőre. (A select-object paranccsal később részletesebben foglalkozunk).

Get-Member

A Get-Member parancs nagyon fontos, talán a help után a legfontosabb azoknak, akik komolyan bele akarnak kezdeni a powershell scriptelésébe és használatába. Segítségével megtudhatjuk hogy egy-egy parancs milyen .Nett objektumokat használ, és hogy milyen propertyei és metódusai vannak.

Hogy ez miért is olyan fontos? Ezt egy példán keresztül mutatom be.

PÉLDÁUL: Get-ChildItem

clip_image022

Látjuk, hogy a Get-ChildItem cmdlet csak néhány információt oszt meg velünk, Például a fileneveket, vagy épp a fájlok hosszát.

PÉLDÁUL: Get-ChildItem | Get-Member

clip_image024

A Get-ChildItem, ugyan mutat néhány elemet, ugyanakkor a powershell segítségével ennél lényegesen többet is megtudhatunk. Láthatjuk, hogy az adott cmdlet melyik névteret használja, vagy épp mely metódusokat és propertyket. A rendszer tehát olyan, mintha informatikusok írták volna informatikusoknak.

Get-PsDriver

Ez a parancs megmutatja a PowerShell driveokat.

clip_image026

Mint látható nem csak meghajtókon tudunk járkálni, hanem a registryben, vagy épp a tanúsítványtárban, de akár a környezeti változókat is piszkálhatjuk. A registryben való kutatáshoz egyszerűen írjuk be, hogy cd HKCU: és már be is léptünk a Current userbe. A registrybe való járkálás nem jelenthet senkinek különösebb problémát, az értékek megváltoztatása viszont már macerásabb, ugyanis a kulcsokat külön kell kezelni az értéktől, valamint a kulcsokhoz tartozó default értékek miatt is bonyolultabb. (Ha igény lesz rá, egy tanfolyam keretében bemutatásra kerül, hosszabb lélegzetvételű folyamat)

PowerShell üzemmódok

A powershellnek 2 üzemmódja van, az egyik a kiértékelő, a másik a parancs üzemmód.

Parancs üzemmód:

Ha parancsot írok, ami betűvel kezdődik és megtalálja a parancskészletében, Például a DIR parancs akkor az adott parancs értelemszerűen végrehajtódik.

Kiértékelő üzemmód:

Ha viszont olyat adok meg, amit nem fedez föl a parancskészletében, de kitudja értékelni akkor a kiértékelő üzemmódba vált át.

PÉLDÁUL: írjuk be, hogy 1,2,3,4,5

clip_image028

Ez a PowerShell számára egy halmaz definícó volt, amit úgy értékelt ki, hogy kiírta őket a képernyőre. Mint láttuk a PowerShell nem írta ki, hogy „bad command or filename” köszönhető ez a kiértékelő üzemmódnak.

Na de mi van akkor, ha azt írom a parancssorba, hogy 1mb?

clip_image030

A válasz: 1048576 byte.

Ebből is látszik mennyire informatikus közeli ez az új parancssor.

Szűrések

Oszlopok szerinti szűrés (select-object)

Ezen parancs segítségével szűrhetjük azt, hogy milyen oszlopok jelenjenek meg az adott parancs eredményeként.

PÉLDÁUL: get-childItem | select-object –property name, length

clip_image032

A select-object segítségével most csak a name és a length oszlop fog megjelenni.

Érdekesség, hogy a select-object –first – last kapcsolókkal adhatjuk meg, hogy hány elem jelenjen meg az eredményben. (Értelemszerűen az első 10 –first 10 utolsó 10 –last 10 kapcsolót használjuk)

Például.: get-eventlog -logname application | select-object -first 10

clip_image034

Megkapjuk az első 10 bejegyzést az alkalmazások eventlogjából.

Ez hasznos is lehet, hisz több ezer bejegyzés is előfordulhat az eventlogba, és ha azt mind a képernyőre dobnánk, eltartana egy darabig amíg a rendszer ezt elvégezné.

Sorok szerinti szűkítés (where-object)

A where–object parancs segítségével bizonyos feltételnek megfelelően szűkíthetjük a sorokat.
PÉLDÁUL: írjuk, be hogy get-process

clip_image036

Ekkor megkapjuk a legfontosabb információkat az összes processzről.

Na de mi most azt szeretnénk, hogy csak azokat a processzeket írja ki amelyeknek a workingset –je nagyobb mint 25MB.

Get-Process | where-object {$_.workingset –gt 25mb}

clip_image038

$_ az aktuálisan használt sort jelzi, míg a –gt a graterthent (nagyobb, mint) jelöli. A PowerShell ugyanis kényes a <> operátorok használatára.

Számoljunk (Measure-object)

Ez a parancs egy nagyon ötletes, ugyanis a hozzá beérkező objektumok bizonyos propertyjei alapján tud készíteni összegzést, átlagot, countot stb.

Például.: get-childItem | measure-object –property length sum

clip_image040

De akár text fájlokon is alkalmazhatjuk a measure-object –et, ugyanis léteznek speciális kapcsolói erre az esetre.

Például:

-line: sorokat számolja meg

-word: a szavakat számolja meg

-character: a karaktereket számolja meg egy szövegben.

És akkor jöjjön egy kis scriptelés a végére:

E-mail küldés powershell segítségével.

Először vizsgáljuk meg közelebbről magát a scriptet. (A PowerShell scriptek kiterjesztése *.ps1)

$mail = new–object System.net.mail.mailmessage(„kitol@server.hu”,”kinek@server.hu”,”Tárgy”,”Üzenetem”)

$server = new-object System.Net.Mail.SmtpClient(192.168.2.1);

$server.send($mail);

Mint látjuk, a new-object segítségével egy .NET objektumot példányosítunk, és használjuk a megfelelő paraméterek segítségével. Az adott paramétereket az object-browserből kinézhetjük. A Visual Studioban a View->Object Browser menüpont alatt (Ctrl + W + J) érhetjük el. Mint ahogy a mellékelt ábrán is látható, ha a megfelelő paramétereket használjuk, megalkothatjuk a levelet. clip_image042

$mail = new–object System.net.mail.mailmessage(„kitol@server.hu”,”kinek@server.hu”,”Tárgy”,”Üzenetem”)

Ebben a sorban a $mail változóba eltároljuk az egészet objektumot, amely vár arra, hogy őt elküldjék.

De neki nincs send metódusa amivel elküldhetjük a levelünket.

$server = new-object System.Net.Mail.SmtpClient(192.168.2.1);

$server.send($mail);

A System.Net.Mail névtérnek viszont van egy SmtpClientje aminek van send metódusa. És ez a send metódus ép egy mailmessage objektumot vár paraméternek.(Ezt is kikereshetjük az Object Browser segítségével) Az SmtpClient példányosításánál pedig a Host címe kell. És ha ezekkel megvagyunk már küldhetjük és a levelünket.

Remélem sikerült a powershell iránt felkelteni az érdeklődést, és beindítani az öntanulás folyamatát. Én mindenkinek csak ajánlani tudom e rendszer részletes megismerését, hisz ez a jövő, és ha az ember mind rendszergazda vagy egyszerűen tudatos felhasználó örömét fogja lelni e rendkívül használható új rendszerben.

Advertisements
Kategóriák:PowerShell
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: