Windows hálózati adminisztráció Tantárgykódok: MIN6E0IN 8. Göcs László mérnöktanár KF-GAMF Informatika Tanszék 2016-17. tanév tavaszi félév
Power Shell
alapok 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? Command Prompt kicsit régi, kicsit nehézkes, kicsit korlátolt 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.
alapok 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.
Indítása powershell parancs kiadásával A PowerShellkörnyezetében többféle parancs stílust is használhatunk: Hagyományos DOS belső parancsok (pl. DIR) Unix-os parancsok (pl. ls) PowerShell saját parancsai, az ún. Cmdlet-ek(pl. Get- ChildItem) Szabványos Windows futtatható programok A DOS és a Unix parancsok valójában alias-ok a PowerShellsaját parancsaira (Cmdlet)
Cmdlet A PowerShellsaját parancsai Leírásuk minden esetben ige-főnév formájú Pl. Get-ChildItemvagy Get-Process Get-Helpget-*, Get-Help Get-Process -example A parancs paramétereinek neve kötött A parancs kimenete nem sima szöveg, hanem objektum! A parancsok összefűzhetők (kompozit parancsok)
Parancsok összefűzése Ránézésre hasonló, mint a hagyományos parancssor: dir find ARIS Szöveg helyett azonban objektumok közlekednek > Get-ChildItem where-object { $_.Length -ge1000 } Ami akár tovább is láncolható > Get-ChildItem where-object { $_.Length -ge1000 } Sort-Object-propertyLength Melyek az egyes objektumok tulajdonságai? > Get-ChildItem get-member
Változók A változók neve $jellel kezdődik A változókat nem kell deklarálni A változó értéke a név megadásával lekérhető >$most=get-date >$most A változók objektumokat tárolnak >$megint=get-date >$elteres=$megint-$most >$elteres
Szöveges változók (System.String) Karekterlánc típusú, értékadáskor a szöveget aposztrófok vagy idézőjelek között kell megadni >$t= alma Ez is objektum! A karakterlánc metódusai és tulajdonságai: >$t Get-Member -> (lista) >$t.length -> 4 >$t.toupper() -> ALMA >$t.replace( al, fel ) -> felma
Fontosabb karakterlánc műveletek
Operátor Leírás Kis-nagybetű érzékeny operátor Leírás -eq egyenlő -ceq egyenlő -ne nem egyenlő -cne nem egyenlő -gt nagyobb -cgt nagyobb -ge nagyobb egyenlő -cge nagyobb egyenlő -lt kisebb -clt kisebb -le kisebb egyenlő -cle kisebb egyenlő
Objektumok kezelése Bejárás: ForEach-Object > Get-ChildItem ForEach-Object { $sum+=$_.length } Szűrés: Where-Object > Get-ChildItem Where-Object { $_.Length ge1000 } Rendezés: Sort-Object > Get-ChildItem Sort-Object-property Length
Objektumok kezelése Kiválasztás: Select-Object > Get-ChildItem Sort-Object-propertyLength Select-Object First 5 > "a","c","b","a","b","d","e" select-object -Unique Csoportosítás: Group-Object > Get-ChildItem Group-Object Extension
Eredményül kapott listák szűrése Könyvtárak listázása Get-Childitem Where-Object { $_.PsIsContainer} Leállított szolgáltatások listázása Get-Service Where-Object { $_.Status eq Stopped } Adott nevű folyamatok listázása Get-Process Where-Object { $_.Name like *svchost* }
Vezérlési szerkezetek If(<feltétel>) { <then ág> } else { <else ág> } >$a=12 >if ($a lt20) { Kicsi } else { Nagy } -> Kicsi >$a=42 >if ($a lt20) { Kicsi } else { Nagy } -> Nagy For(<kezdő>;<feltétel>;<lépés>) {<ciklusmag>} >for($b=1; $b lt8; $b++ ) { $b } -> 1..7
Fájl és mappa műveletek munkakönyvtár kiíratása (get-location).path vagy $pwd Könyvtár létrehozása create-item type directory alma vagy mdalma Fájl vagy könyvtár létezésének ellenőrzése test-path alma Fájl vagy könyvtár törlése remove-item alma
Fájl és mappa műveletek Fájl vagy könyvtár átnevezése rename-item alma barack Fájl vagy könyvtár másolása, mozgatása copy-item barack citrom move-item citrom eper Hozzáférési jogok lekérése get-acl citrom
Összes újabb MS szerver Exchange, SQL Server, System Center Operations Manager, System Center VMM, IIS Fejlesztő környezet: Visual Studio 2010: PowerConsole VMware: PowerCLI teljes virtualizációs környezet automatizálása
Elindulás Powershell 2.0 letöltése Windows Management Framework kiegészítés része Windows 7-en fent van, de elérhető XP-re is PowerGUI GUI szerkesztő, debugger
help Mint látjuk a rendszer teljesen önleíró. Láthatjuk a parancsokat, aliasaokat.
help Get-ChildItem Ekkor megkapunk minden információt az adott parancsról.
help Get-ChildItem example Ekkor példa scripeteket kapunk bőséges leírással
ALIAS Ki lehet listázni az úgynevezett aliasokat.
ALIAS 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.
csővezetés 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.
csővezetés Ki írjuk a futó processzek listájából az első 6 elemet.
változók A PowerShellben természetesen lehet használni változókat is. Jelölésük: $valtozonev 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
változók 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.
változók Természetesen a változóknál is lehet a csővezetést alkalmazni. PÉLDÁUL: $x select-object first 3
get-member Segítségével megtudhatjuk hogy egy-egy parancs milyen.net objektumokat használ, és hogy milyen propertyei és metódusai vannak.
Get-ChildItem Get-Member Láthatjuk, hogy az adott cmdlet melyik névteret használja, vagy épp mely metódusokat és propertyket.
Get-PsDriver Ez a parancs megmutatja a PowerShell driveokat. 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.
PowerShell üzemmódok 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 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.
Írjuk be, 1MB A válasz: 1048576 byte. Ebből is látszik mennyire informatikus közeli ez az új parancssor.
Oszlopok szerinti szűrés (select-object) get-childitem select-object property name, length csak a name és a length oszlop fog megjelenni.
Sorok szerinti szűkítés (where-object) Get-Process where-object {$_.workingset gt 25mb} A where object parancs segítségével bizonyos feltételnek megfelelően szűkíthetjük a sorokat, esetünkben amelyeknek a workingset je nagyobb mint 25MB.
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.
Power Shell és az Active Directory
Active Directory típusmeghatározás: CN = Common Name = Közönséges név. Kötelező elem minden lekérdezésnél, az erőforrás objektumokra és típus nélküli tárolókra lehet vele hivatkozni. DC = Domain Context = Tartományi környezet. A tartomány nevét írja le. OU = Organization Unit = Szervezeti egység. Ha az elérni kívánt objektum a tartományon belül valamely szervezeti egységben található, akkor az előző DC parancs mellett az OU-t is meg kell adni.
Parancssori AD dsadd user CN=Lajos,CN=Users,DC=Animare,DC=hu -samid lali dsadd user CN=Lajos,CN=Users,DC=Animare,DC=hu -samid lali -pwd lalika dsadd user CN=Lajos,CN=Users,DC=Animare,DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu -email lali@animare.hu dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu -email lali@animare.hu -pwdneverexpires yes dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu -email lali@animare.hu -mustchpwd yes dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu -email lali@animare.hu -mustchpwd yes -disabled yes dsadd user CN=Lajos, CN=Users, DC=Animare, DC=hu -samid lali -pwd lalika -fn Lajos -ln Tóth -memberof CN=Administrators, CN=Builtin, DC=Animare, DC=hu -email lali@animare.hu -mustchpwd yes -acctexpires 30
Get-ADUser
Get-ADUser-Identity soostibor-properties title
Get-ADUsersoostibor-Properties*
New-ADUser GlenJohn -OtherAttributes @ {title="director";mail="glenjohn@fabrikam.com"} New-ADGroup -Name ujcsoport -SamAccountName ujcsoport -GroupCategory Distribution PassThru New-ADComputer -Name fileserver01" -SamAccountName fileserver01" -Path "OU=ApplicationServers,OU=ComputerAccounts,OU=Managed,DC=G YAKORLAT,DC=HU
Remove-ADUser -Identity GlenJohn Remove-ADUser -Identity "CN=Glen John,OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM Remove-ADComputer -Identity fileserver04"
Power Shell Példa Képek dátum szerint mappákba rendezése
PÉLDA cd.\pictures dir
(dir.\p1090919.jpg).lastwritetime 2009-09-02 get-date (dir.\p1090919.jpg).lastwritetime -Format "yyyy-mm 2009-9
dir *.jpg ForEach-Object {get-date $_.lastwritetime -format "yyyy- MM"} 2010-02 2009-09 2009-09 2010-11 A dir parancsból kijövő fájlobjektumokat továbbküldjük ( jellel) feldolgozásra. Ezen feldolgozás keretében minden egyes érkező objektumra a Foreach-Object parancs segítségével legeneráltatjuk az év-hó formátumú számsort. Az éppen aktuális futószalagon érkező objektumra, jelen esetben fájlra, a $_ jellel tudunk hivatkozni.
Test-Path ".\mappanév True Ez egy nem létező könyvtárra False eredményt fog adni. Nekünk meg pont ekkor kellene alkönyvtárt létrehozni, amikor ez a vizsgálat hamis eredményt ad.
IF vezérlőszerkezet, mellyel akkor lehet végrehajtatni valamit, amikor egy feltétel igaznak értékelődik. Nekünk hamis eredményt ad a Test-Path, amikor tennivalónk lenne, így fordítani kell a kiértékelés eredményén, amit a Test- Path eredményének negálásával tudjuk elérni:
If(!negálandó feltétel){végrehajtandó kód} Könyvtárat a New-Item paranccsal tudunk létrehozni, a következő formátumban: New-Item Path hova ItemType Directory
Fájlt átmozgatni a Move-Item paranccsal tudunk, melynek szerkezete a következő: Move-Item Path Destination célkönyvtár
cd $HOME\pictures dir *.jpg ForEach-Object { $alkönyvtár = get-date $_.lastwritetime -Format "yyyy-mm" if(! (Test-Path -Path ".\$alkönyvtár")) { New-Item -Path ".\$alkönyvtár" -ItemType Directory } Move-Item -Path $_.pspath -Destination ".\$alkönyvtár" }