610 likes | 982 Views
Silvie Pavlosková ,Microsoft Student Partner ČVUT. Powershell. Přednáška bude pojata více prakticky na množství užitečných příkladů jak pracovat na windows nově a lépe s PS bez proklikávání ! Přístup do aktiv directory ,jak zajisti vzdálený přístup atd …………. Obsah.
E N D
Přednáška bude pojata více prakticky na množství užitečných příkladů jak pracovat na windows nově a lépe s PS bez proklikávání! • Přístup do aktiv directory ,jak zajisti vzdálený přístup atd………….
Obsah • 1.předchůdci9.proč tu jsou objekty?inspirace • 2.proč powershell? 10.Formátování inspirace • 3.přípustné výrazy 11.data ze souborů • 4.skripty 12.xml • 5.nápověda 13.objekty-zeštíhlování a select • 6.roura 14.zahazování objektů • 7.roura textová 15.Kolekce v roure:ForEach-Object • 8.objektová
Obsah • 17.error handling 25..Net • 18.error 26. Wrapper-Psbase • 19.ladění 27. Třídy pro administraci • 20.práce s registry 28.Active Directory • 21.přesun složek 29. Př-vypispc a • 22.PSDrive přihlášených uživatelů • 23.změna registu 30. Správa ActiveDirectory • 24.Pomoci .netframeworku pomocí ADsIpraktická uloha -co nám PS nabízí
Obsah • 31.Info pomoci WMI 40.Logování • 32.Akce pomocí WMI 41.Služby a Procesy v PS • 33.COM 42. Správa AD • 34.Aplikace 43.AD-najít uživatele • 35. COM a Office- 44.Disabled účty • přistup do excelu 45.Jak jinak do AD? • 36. Com a PowerPoint 46. Tvorba a aktivace objektů • 37.Com a Firewall 47.sítové konfigurace • 38.Povolení vzdálené plochy • 39.WSH a PS 48.MS exchange
Nástroje kdysi • CMd.exe-externí příkazy • WindowScript Host-objektový přístup -zpřístupnění ADSI • KiXtart(nebudemerozvádět) • Dnes Powershell!s WSH. A WMI Podpora .NET!
Proč používat Právě powershell? • ovládání Windows Longhorn • Serverové aplikace Exchange • Monitorování systému • Windows ManagmentInstrumentation- • Využití potencialu .NET
Co se na nás chystá? • Remoting • WsMAN • v Win2k8 R2 > 570 cmdletů
Co to tedy je? • Freeware • Není součástí Windows • Nové scriptovací prostředí
129 (ve V2 241) cmdletů pro správu • Ve V2 grafické rozhraní • Tvorba jednoduchých scriptů v jazyce PowerShell • Přístup k wmi/com/.NET • Objektová PIPE • Snadná rozšiřitelnost • Nové cmdlety • Nové providery
Konstrukcejazyka • if;elseif;else • if(podmínka){blok příkazů} • - • eq;ne;gt;ge;lt;le;like;notlike;match;notmatch • switch • switch($pom) Hodnota1{blok } default {blok}
Cykly • while • do while • do until • foreach • for
Přípustné výrazy • Cmdlet-vlastní příkazy powershellu • Funkce • Spustitelný program-ipconfig • Skript \.soubor.ps1 !Set-ExecutionPolicy • Vyhodnotitelný výraz
Cmdlet • Standardizované názvy cmdletů • get-* set-* …
Skripty • \.soubor.ps1 • Bezpečnostní politika !Set-ExecutionPolicy • Alias profile.ps1 • Set –alias kde get-location • Functionted{Get-Date –format g} • Function prompt{ • [System.Enviroment]::UserName+”rika:”} • Cmd.exe powershell c:\Temp\jednoduchy.ps1 • Davkovesoubory –NoLogo,-NoProfile,-Noninteractive
Cmdlet • Interní příkaz • Get-Process –Namesvc*,explo*
napoveda • get-command • Get-Command Get-Service |Format-List • Get-Service|Get-Member • Get-Help about_pipeline
Roura-textová • Textová • Get-Process|more • .\pslist.exe|more • Get-Service|Format-List
Roura Objekotová • !unix versus Powershell • Hlavní rozdíl • Kolekce a instance • Properties jak na ně? • Get-Service|Get-Member • Uchopenivlastnosti: Get-Service|where • ($_.status –eq “running”)
Objekty-Inspirativní PřProč jsou tady s námi objekty? • Get-process|where{$_.id –eq (get-wmiobject win32_service|where{$_.name –eq “KPF4”}).ProcessID}|select –property StarTime • Jakdlouho už běží služba?
Formatování-inspirace • Get-EventLog -LogNamesystem | Format-Table -autosize -property @{Label="Zdroj„ alignment = "left„ width=15 expression= {$_.source}}, @{Label="Udalost:" alignment = "center" width=10 expression= {$_.eventid}}, @{Label="Popis udalosti" alignment = "right„ width=40 expression= {$_.message}} | more
Data ze souborů: • Get-Content C:\Temp\alice01.txt • Cat sou*.txt>>dohromady.txt • !!$obsah=Get-Content dohromady.txt • !!$obsah|Get-Member
XML • Vstup a výstupdat v xml • Get-ChildItem|Select-Object mode,fullname,attributes|Export-Clixml –Path C:\dir.xml Invoke-Item c:\dir.xml $xml=Import-Clixml -Path fakulta.xml $xml|fl
Objekty-Zeštíhlování objektů a select-object • Vybereme to co potřebujeme • Sitova karta: Get-WmiObejct –Class Win32_NetworkAdapterConfiguration| Select-Object macaddress, Description|ft * -AutoSize
ZahazováníoBjektů • Where-Object - FilterScript • Př. Get-EventLog –LogName systém|Where-Object -FilterScript {$_.entrytype –like “war*”}| ft –property eventid,message –autosize $_ ……….objektproudicirourou Vice kriterií and
Kolekce v roure:ForEach-Object • ForEach-Object get-service | select-objectname, status | foreach-object { if ($_.status -eq "running") {write-host $_.name -foregroundcolor "green"} elseif ($_.status -eq "stopped") {write-host $_.name -foregroundcolor "red"} else {write-host $_.name} }
Error Handling • Chybová hlašení oddělení jiným kanálem Get-ChildItem c:\temps 2>c:\dir.txt\ jaká chyba nastala? $chyba=Get-ChildItem c:\temps 2>&1 $chyba|Get-member Chyba.CategoryInfo Chyba.InvocationInfo-provokater
Error • Chyby v objekotvepodobe • Error[0].targetobject-teckova • $LastExitCode • Get-Service atr,dhcp –ErrorActionsilentlycontinue |fl • Parametr suspend-dava uzivatelicas na reakci • stop(default) • Potlačení chyby trap: • Trap{continue}Get-ChildItems;Write-Host “a jedeme dale” • Do textaku:Start-Transcript ……
lADĚNÍ • Jak skript postupuje? • Set-PSDebug-Trace • Uroven 1 a 2
Prace s registry • Dir ,ls • Vypis • Get-ChildrenItem|Get-adresaru:Get-ChildItem –include*.txt,*.log –recurse • Member –MemberType property TypeName:System.IO.FileInfo • Dir|Sort-Object lastacesstime|Format-Table name,lastAcessTime
Presunslozek • $Structure = get-childitem C:\PowerShellScripts\mp3 -recurse | where-object {$_.Mode -match "d"} • foreach ($Element in $structure){ • $MP3Path = $Element.PSPath + "\*.mp3" • if (get-childitem $MP3Path) • { • $Element.PSPath = $element.PSPath -replace "PowerShellScripts", • "Target" • new-item $Element.PsPath -type directory -eaSilentlyContinue • } • }
PSDrive • Mapujeruznedatovestruktury • Get-ChildItem HKLM:\SYSTEM\ • Symulace: • Regedit • Cd “HKML:\SOFTWARE\Microsoft\Command Processor” • (pwd).toString()|Get-ItemProperty
Zmenaregistru: • Cd HKCU:\ • Mkdir _Muj_Klic Hive::Microsoft.Powershell.Core\Registry::HKEY_CURRENT_USER • Cd _Muj_Klic • New-ItemProperty –path. –name “Muj_priznak”-PropertyTypenString –Value “ano”
Pomoci .netframeworkupraktická uloha -co nám PS nabízí • Naposledy přihlášený uživatel? • $vetev=[Microsoft.Win32.RegistryHive]::LocalMachine • $klic=“SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon” • $stroj=stroj1 • $cil=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($vetev,$stroj) • $cil|Get-Member • $cil.GetSubKeyNames() • $cil.OpenSubKey($klic) • $podklic=$cil.OpenSubkey($klic) • $podklic.GetValueNames() • $podklic.name • $podklic.GetValue(“DefaultUserName”)
.Net • Nevytváříme zbytečné cdmlety,vyrobíme instance • $cas=New-Object System.DataTime • $cas.getDate() • [system.console]::set_BackgroundColor(“green”) • [system.console]|Get-Member -static
Wrapper-Psbase • Přístup do ActiveDirectory přes wrapper • Přístup v chráněném režimu • $domena.psbase.get_childern()
Třídy pro administrátory • System.Enviroment • Systém.IO.Path • Io.DriveInfo • Systém.Math • DataTime
ActiveDirectory • Databáze LDAP • Intuitivní přístup díky objektům v PS • Dotaz řetězec ve formátu LDAP-předepsaný formát • New-ObjectSystem.DirectoryServices.DirectoryEntry • Objekt typu: “LDAP://cn=technik1,ou=foundation,dc=foundation,dc=int”
Př-vypispc a naposledy přihlášených uživatelů • $ldapQuery = "(&(objectCategory=computer))" • $de = new-objectsystem.directoryservices.directoryentry • $ads = new-objectsystem.directoryservices.directorysearcher -argumentlist $de,$ldapQuery • $complist = $ads.findall() • $complist | % { • $cn = $_.properties['cn'] • $rk = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$cn) • $rv = $rk.opensubkey("\Software\Microsoft\Windows NT\CurrentVersion\WinLogon") • $lastuser = $rv.GetValue("DefaultDomainName") + "\" + $rv.GetValue("DefaultUserName") • write-host "$cn - $lastuser" • }
Správa ActiveDirectory pomocí ADsI • $AD=[ADSI]”” “” dosazenivychozichhodnot $ou=$ad.psbase.Childern.Find(“OU=Foundation”); • $Novy_uzivatel=$ou.psbase.Childern.Add(“CN=$jmeno_uzivatele”,‘User‘) • Vyslovneuložit jinak localpropertycachce • $Novy_uzivatel.setinfo()!!!!! • PozměníPu • heslo:$Novy_uzivatel.psbase.set_password($pwd) • Zapnout: • $Novy_uzivatel.psbase.InvokeSet(“Accoundisabled”,$false) • Cache $Novy_uzivatel.psbase.refreshcache()
Info pomoci WMI • Cmdletwmiobject plus třídu rozhraní • get-wmiobject Win32_NetworkAdapterConfiguration | Format-Table IPaddress, descr* -AutoSize • Dalsi pr: • get-wmiobject Win32_logicaldisk | Format-Table DeviceID,volumename,{[math]::truncate($_.freespace/1048576)} -AutoSize
Akcepomociwmi • Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("RenewDHCPLeaseAll", $null)
COm • Slouží ke komunikaci apliakcí v windows • Objektová podstata • (New-Object -ComObject (Wscript.Network).MapNetworkDrive("U:","\\pocitac\sdilenaslozka")
Aplikace • functionGet-Beat • { • $ie = new-object -com "InternetExplorer.Application" • $ie.Navigate2("http://www.abradio.cz/player.php?kod=44&quality=asx128"); • $ie.width = 400 • $ie.height = 270 • $ie.Top=500 • $ie.Left=0 • $ie.Resizable =$false • $ie.ToolBar =$false • $ie.MenuBar =$false • $ie.Visible = $true; • }
COM a Office-pristup do excelu • $excel=New-Object –comobjectExcel.Application $excel.Visible=$true $sesit=$excel.workbooks.add() $list=$sesit.Worksheet.Item(1) $list.Cells.Item(1,1)=“Nova hodnota v tetobunce” $list.Cells.Item(1,1).Text nova ho
Com a PP • Otevře prezentaci ! • $pp=New-Object –comobjectPowerPoint.Application • $pp.Activate() • $pp.Presentation.Open(“cesta.ppt”)|Out-null • $pp.ActivePresentation.SlideShowSetting.Run()|Out-null
Com a firewall • Zprovozníme firewall bez klikání! • $WFW=New-Object –ComObjectHnetCfg.FwMgr $pravidla=$WFW.LocalPolicy.CurrentProfile $pravidla • Chcemepovolit firewall: $pravidla.FirewallEnabled=$true $pravidla
Povolení vzdálené plochy • Pozor není tak přímočaré! $ICMP=$pravidla.IcmpSettings $ICMP|Get-Member $ICMP.AllowInboundRequest
WSH a Powershell • New-Object -comWScript.Network|Get-Member • Zaslat email: $mail.To $mail.TextBody $mail.Send()
Logování • Přímá práce s logy • Revoluce! Get-EventLog –list |Where-Obejct ($_.logdisplayname –eq “system”) Podle t: Get-EventLog system –Newest 10