Microsoft TechNet
IT odborníci ve školství
RSS zdoje (CZ/SK)
Vývojáři
Vše pro web
PowerShell je skriptovací jazyk a shell od Microsoftu. Z předchozí věty jsem záměrně vypustil slovo nový, protože první verze byla vydána již v roce 2006. Verze 2 je v současné době ve stadiu CTP3 (Community Technology Preview) a její finální uvedení je plánováno současně s vydáním Windows 7.
Tato série si klade za cíl seznámit vás s PowerShellem od úplných základů až po složitější konstrukce. Nemá být (ani být nemůže) vyčerpávajícím zdrojem. Pokud se budete chtít PowerShell naučit, budete muset pokračovat dále, např. studiem nápovědy, která je až překvapivě dobrá a užitečná. Začněme instalací.
PowerShell je součástí posledních verzí operačních systémů, tedy Windows 7 a Windows 2008 R2. Ve Windows 2008 je dostupný jako volitelný doplněk a můžete jej doinstalovat přes Server Manager. Pokud jej budete chtít použít ve Windows Vista, XP a 2003 Server, musíte si jej doinstalovat jako samostatné KB. Pro nižší verze není PowerShell dostupný. V současné době je možno PowerShell doinstalovat i přes Windows Update (nebo WSUS).
Před instalací PowerShellu se ujistěte, že máte nainstalován .NET Framework minimálně ve verzi 2.0. Výše zmiňované KB pak nainstalujete klasickým next, next, next způsobem. Po instalaci naleznete v nabídce Start složku Windows PowerShell 1.0 a v ní modrou ikonu, kterou si určitě zamilujete J
Po spuštění uvidíte následující modrou obrazovku – tato modrá (#012456) je dobrá.
Figure 1: Okno PowerShellu
Zkusme si ukázat první obligátní kus kódu – známý Hello World! V PowerShellu jej zapíšete následujícím jednoduchým příkazem:
PS C:\> “Hello World!”
PowerShell vezme váš vstup a text opíše na výstupu. Mimochodem, pěkný přehled Hello World programů můžete najít na Wikipedii. Pojďme si ukázat několik užitečnějších příkazů, např. pro zobrazení aktuálního data a času
PS C:\> Get-Date
3. června 2009 22:00:32
pracovního adresáře
PS C:\> Get-Location
Path ---- C:\
nebo zjištění nastavení jazykového prostředí ve Windows.
PS C:\> Get-Culture
LCID Name DisplayName ---- ---- ----------- 1029 cs-CZ Czech (Czech Republic)
Chtěli byste například zpracovat v PowerShellu výsledky z vyhledávače Bing?
PS C:\> Get-BingWeb 'technet powershell site:cz' | Format-Table Url
Url --- http://www.logon.cz/?p=129 http://www.wug.cz/Default.aspx?tabid=53&EntryID=75 http://www.logon.cz/?tag=powershell http://www.wug.cz/Default.aspx?tabid=58&mid=500&ctl=Detail&ItemID=208&VisibleDate=1.12.2008 http://blog.vyvojar.cz/dotnet/archive/2006/11/30/138593.aspx http://www.wug.cz/Default.aspx?tabid=53&EntryID=106 http://www.wug.cz/Aktuality/tabid/36/ctl/Detail/mid/492/ItemId/270/language/cs-CZ/Default.aspx http://www.logon.cz/?p=230 http://www.wug.cz/Default.aspx?tabid=58&mid=500&ctl=Detail&ItemID=144&VisibleDate=9.5.2008 http://www.cs.vsb.cz/navrat/vyuka/sps/prednasky/pred10b.pdf
Příkaz vyhledá text „TechNet Powershell“ v českých doménách a pomocí Format-Table vypíše adresy prvních deseti odkazů, které nalezne. Get-BingWeb není standardním příkazem PowerShellu, ale je na něm ukázána jedna ze silných stránek PowerShellu – komunita. Již druhý den po ohlášení nového vyhledávače vytvořil Joe Pruitt knihovnu funkcí pro práci s bingem (PoshBing) a uvolnil ji pro veřejné použití. Pokud ji chcete také vyzkoušet, je ke stažení na CodePlexu.
Než se pustíme do podrobnějšího přehledu, řekneme si něco o terminologii v PowerShellu. Jedná se o základní poučky, které vám umožní začít PowerShell efektivněji a rychleji používat.
Je základním příkazem PowerShellu. Vyslovuje se jako command-let. Ve verzi 1 je jich v PowerShellu 129. V příkladech výše jsme si ukázali cmdlety Get-Date, Get-Location a Get-Culture.
V předchozím bodě jsme si ukázali tři cmdlety. Nezdá se vám na jejich jméně něco zajímavého? Pokud vám přijde zajímavá konvence Get-<něco>, jste na správné stopě. Vývojový tým PowerShellu zavedl jmennou konvenci, která je v angličtině vyjádřena jako Verb-Noun, čili v češtině Sloveso-PodstatnéJméno. Zároveň se snaží (a dle mých zkušeností úspěšně) tuto konvenci prosadit. V současné době existuje malá skupina sloves pro cmdlety a je v hojné míře používána. Více se můžete dozvědět přímo v blogu vývojového týmu PowerShellu.
Seznam sloves ve verzi 1 je následující:
Pro podstatné jméno platí pravidlo, že musí být v jednotném čísle. Proto existuje cmdlet Get-QADUser a nikoli Get-QADUsers.
Velkou výhodou této snahy je možnost „odhadnout“ jméno cmdletu, který právě potřebujete. Z příkladů je to víceméně jasné: chcete-li zjistit aktuální datum, použijte Get-Date; chcete-li datum nastavit, použijte Set-Date.
Na základě předchozích řádek asi dokážete dát dohromady příkaz, kterým zjistíte běžící procesy – je to Get-Process.
Řekněme si ještě něco krátce k bezpečnosti PowerShellu. Microsoft se poučil z hrozeb, které ohrožovaly počítače pomocí skriptů ve VBS a jedním z kroků je, že skripty v PowerShellu (přípona PS1) jsou po nainstalování asociovány s poznámkovým blokem. Tím odpadá „náhodné“ spuštění destruktivního kódu pouhým dvojklikem.
Několik dalších bezpečnostních prvků si ukážeme na příkladu. Zkuste vytvořit textový soubor, který bude obsahovat pouze jednu řádku textu, na které bude zapsán cmdlet Get-Date. Uložte tento soubor jako skript.ps1. Spusťte PowerShell a přejděte v něm do adresáře s vytvořeným skriptem. Pro pohyb použijte příkaz cd, známý z cmd.exe. Následujícím příkazem zkuste skript spustit:
PS C:\Temp\PS> skript.ps1
The term 'skript.ps1' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At line:1 char:10
+ skript.ps1 <<<<
Narazili jste na další „bezpečnostní překážku“ – PowerShell vám neumožní spustit skripty z aktuálního adresáře, pokud napíšete pouze jejich jméno. Příkaz musíte napsat následujícím způsobem:
PS C:\Temp\PS> ./skript.ps1
File C:\Temp\PS\script.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ & <<<< "C:\Temp\PS\script.ps1"
Skript se vám opět nespustil, ale chybové hlášení je jiné. Dalším krokem k zabezpečení počítače jsou bezpečnostní politiky (v angličtině Execution policies), které hlídají, zda jsou spouštěné skripty digitálně podepsány. Po nainstalování je nastavena politika Restricted. V tomto módu je umožněno zapisování příkazů přímo v okně PowerShellu, ale pokud chcete spustit skript, PowerShell vám v tom zabrání a zobrazí chybu.
Bezpečnostní politiky jsou celkem čtyři: Restricted, AllSigned, RemoteSigned, Unrestricted. Pokud ji chcete změnit, použijte příkaz Set-ExecutionPolicy a jako parametr použijte jméno jedné ze jmenovaných politik.
Set-ExecutionPolicy RemoteSigned
zajistí, že skripty stažené z internetu nebo doručené mailem budou spuštěny, ale pouze pokud jsou podepsány důvěryhodným certifikátem. Nyní už bez problému spustíte skript, který jste vytvořili.
3. června 2009 23:31:26
Pokud se chcete o politikách dozvědět více, zkuste v PowerShellu spustit příkaz
Get-Help about_signing
Je vidět, že Microsoft se poučil z minulosti a již od začátku navrhl PowerShell i s ohledem na bezpečnost. Poslední krok je ale samozřejmě vždy na uživateli. Pokud změníte bezpečnostní politiku na Unrestricted, není chybou PowerShellu, že spustíte skript z neznámého zdroje a poškodíte svůj počítač, či celou síť.
Doporučení: Nechte na svých počítačích politiku nastavenou alespoň na RemoteSigned, vyhnete se tak mnoha případným problémům.
Velmi silnou stránkou PowerShellu je jeho nápověda. Již při instalaci se nainstalují tři zajímavé dokumenty: User Guide, Getting Started a Quick Reference. Dohromady se jedná asi o 150 stran doporučeníhodného čtení.
Další možností je nápověda vestavěná přímo uvnitř shellu, dostupná je pomocí příkazu Get-Help. Jako administrátoři máte možná snahu nápovědu zatracovat, podceňovat či vůbec tak nějak nenávidět. V tomto případě by to byla chyba. Nápověda je zpracována velice dobře a už se mnohokrát osvědčila.
Toto je základní výpis informace o vybraném cmdletu. Všimněte si posledních dvou řádek a jejich doporučení. Nejpodrobnější informace získáte pomocí přepínače –Full. Součástí nápovědy ke každému cmdletu je ukázka příkladů použití. Pokud použijete přepínače –Full nebo –Detailed, budou příklady zobrazeny na konci výpisu. Pokud chcete pouze výpis příkladů, použijte přepínač –Examples.
Get-Help Get-Date –Examples
V PowerShellu existuje ještě jeden typ nápovědy – tematická. Každé z témat popisuje použití některých částí PowerShellu, např. aritmetické operace, regulární výrazy, aliasy, atd. Seznam všech témat je zobrazen níže.
Dnes jsme si ukázali některé základní vlastnosti PowerShellu. Příště si povíme o objektech, rouře a provázanosti PowerShellu s .NET Frameworkem. Těšte se…
- David Moravec
Další díly seriálu:Seriál: Windows Powershell – PS pro programátory (část 6.)Seriál: Windows Powershell - souborový systém a registry (část 5.)Seriál: Windows Powershell – dolujeme data aneb jak na WMI (část 4.) Seriál: Windows Powershell – roury a aliasy (část 3.)Seriál: Windows Powershell – objekty a roury (část 2.)
Právě spouštíme lokální WWW.HOTMAIL.CZ. Je tedy obrovská příležitost si zaregistrovat email ala jméno@hotmail.cz apod.
Tedy go, go!
Radim
--
Já jen doplním několik zajímavých informací:
A pokud vás zajímá, jak vypadá Hotmail uvnitř, bude vás zajímat tenhle článek :).
- KFL
Na úvod se musím zmínit o největší události za posledních pár měsíců, alespoň z mého pohledu: kniha PowerShell In Action (autorem je Bruce Payette) je konečně k dostání i v papírové podobě. Pokud to s PowerShellem myslíte opravdu vážně, tato kniha by už měla ležet ve vašem nákupním košíku.
Při jedné kratší diskuzi na Twitteru jsem se dozvěděl, že někteří PowerShell nepotřebují (nebo si to alespoň myslí :)) a případně, že PowerShell má obskurní syntaxi a napsaný Y combinator je snad nečitelnější, než kdyby to autor napsal v perlu. A další otázka se týkala tutoriálu k PowerShellu. Proto jsem se rozhodl, že PowerShell zkusím představit očima programátora. Jako inspirace mi posloužilo Augiho povídání o javascriptu. Dnešní článek tedy bude spíše teoretický, ale budu se snažit jej co nejvíce odlehčit příklady. Cílem je ukázat základní podobnosti a rozdíly mezi PowerShellem a běžným programovacím jazykem. Více informací se dá najít buď v helpu PowerShellu, nebo například ve výše uvedené knize.
A zde je obsah dnešního článku:
PowerShell staví na .NET frameworku. Proto ti, kteří s .NET frameworkem pracují, získávají jednoznačnou výhodu – mohou samozřejmě využít při skriptování svých znalostí. PowerShell je zkompilovaný pro .NET 2.0/3.5. Dá se ale dosáhnout toho, že poběží v .NET 4 runtime. Jak? Otázka na SO obsahuje mnoho tipů. Ve zkratce nejjednodušší způsob je tento:
powershell_ise.exe.config
notepad $pshome\powershell_ise.exe.config
<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> <supportedRuntime version="v2.0.50727" /> </startup>
Obdobně pro PowerShell konzoli můžete změnit/vytvořit soubor $pshome\powershell.exe.config. Musíme ale počítat s tím, že start PowerShellu je při runtime .NET 4 daleko pomalejší.
$pshome\powershell.exe.config
Vzhledem ke svým základům – .NET frameworku – se nedá vymezit pevná sada typů, se kterou PowerShell pracuje. Místo toho můžeme poukázat na nejběžněji používané typy, které se většinou vyskytují také v jiných programovacích jazycích.
{ Write-Host toto je test }
Typ bool není potřeba popisovat. Proto zde zmíním pouze přetypování na [bool]:
[bool]1 # true [bool]0 # false [bool]'' # false [bool]'a' # true [bool]1.1 # true [bool]$null # false [bool][bool] # true [bool](1..10|Where-Object{$_ -gt 100 }) # false (1) [bool](@()) # false (2) [bool](@{}) # true
V praxi je důležité přetypování (1) a (2). Úzce souvisí s pipeline – prázdná sekvence se konvertuje na $false, neprázdná pak na $true:
$false
$true
if (Get-ChildItem d:\temp) { Write-Host Dir d:\temp is not empty }
Jaký je rozdíl mezi apostrofy a uvozovkami? Ukážeme na příkladu:
$today = Get-Date Write-Host "Dnes je $today" # vypíše Dnes je 05/27/2011 18:30:29 Write-Host 'Dnes je $today' # vypíše Dnes je $today
V případě, že použijeme uvozovky, proměné se vyhodnotí a poté se celý řetězec předá jako parametr cmdletu Write-Host. V případě apostrofů se ale řetězec vezme jako takový a vyhodnocení neprobíhá.
Zde bych rád upozornil na možnou chybu při formátování. Srovnejte:
$today # 27. května 2011 18:30:29 Write-Host $today # 27.5.2011 18:30:29 "$today" # 05/27/2011 18:30:29
Obdobná pravidla a nesrovnalosti platí například i pro floaty. Naštěstí se s tímto problémem dá dobře žít, pokud o něm víme.
Formátovat (datum) můžete standardními prostředky, které nabízí .NET, nebo samotný PowerShell. Konkrétně pro datum můžete přímo určit, v jakém formátu se má výstup vrátit takto:
Get-Date -Format yyyy-MM-dd # 2011-05-27 (Get-Date).ToString('yyyy-MM-dd') # 2011-05-27
V některých jazycích jsou považovány funkce za jeden ze základních typů. Stejně tak je tomu i v PowerShellu, kde anonymní funkce je reprezentovaná typem scriptblock. Scriptblock může vyžadovat parametry, nebo být bezparametrický:
$listC = { Get-ChildItem c:\ } # anonymní funkci zavoláme & operátorem & $listc $listCWithFilter = { param([string]$filter) Get-ChildItem c:\ -filter $filter } & $listCWithFilter *.txt
Hlavní využití scriptblocku je ovšem ve funkcích/cmdletech. Typickým příkladem jsou cmdlety Where-Object or Foreach-Object, kde scriptblock předáváme jako parametr.
Where-Object
Foreach-Object
Get-ChildItem c:\ | Where-Object {$_.PsIsContainer} | Foreach-Object {$_.LastWriteTime}
Přetypováním na [string] získáme kód scriptblocku. Pokud bychom naopak měli kód a potřebovali vytvořit scriptblock, pomůže nám metoda [scriptblock]::Create.
[scriptblock]::Create
& ([scriptblock]::Create('Write-Host (get-date)'))
Pokud se při vytváření scriptblocků neobejdete bez uzávěrů, použijte metodu GetNewClosure:
GetNewClosure
$scriptblocks = Get-ChildItem | Foreach-Object { $item = $_ { Write-Host Name is $item.Name } } $scriptblocks | Foreach-Object { & $_ } # versus $scriptblocks = Get-ChildItem | Foreach-Object { $item = $_ { Write-Host Name is $item.Name }.GetNewClosure() } $scriptblocks | Foreach-Object { & $_ }
Hashtable pravděpodobně každý .NET vývojář zná hlavně z dob před generikami. Princip je jednoduchý: jde o kolekci, která udržuje dvojice key-value. Vytvoříme ji pomocí literálu @{}. Při přístupu použijeme hranaté závorky, jak jsme zvyklí, nebo tečkové notace (usnadnění PowerShellu):
@{}
$translation = @{monday='po'; tuesday='ut'} $translation.wednesday = 'st' $translation['thursday'] = 'ct' $translation.ContainsKey('monday') # true $translation.ContainsKey('MONDAY') # true
Všimněte si, zápisu monday='po'. Levá strana před rovnítkem je uvedena bez apostrofů/uvozovek. Pokud PowerShell může levou stranu zkonvertovat na nějaký základní typ, udělá to. Jinak považuje výraz za řetězec. Poslední příklad také připomíná, že PowerShell je obecně case-insensitive a jak vidno, platí to i pro hashtable.
monday='po'
Jedna z ošklivých věcí v PowerShellu je procházení key-value párů. Je potřeba si nejdříve vrátit enumerátor a ten poslat do pipe. Důvodem tohoto neintuitivního chování je zřejmě skutečnost, že většina uživatelů by netušila, s jakým typem vlastně v pipeline budou pracovat (tj. neočekávali by property key a value).
key
value
$translation.GetEnumerator() | % { "{0} - {1}" -f $_.Key, $_.Value }
Čas od času se může také hodit sčítání objektů typu hashtable:
$prvni = @{1 = 'jedna'; 2='dva' } $druha = @{3 = 'tri' } $prvni + $druha
Hashtable se typicky v PowerShellu používá na dvě věci: splatting a vytváření custom objektů:
$parameters = @{Path='c:\'; Filter='*.txt' } Get-ChildItem @parameters | # splatting Foreach-Object { new-object PsObject -property @{ Name=$_.FullName; Size=$_.Length } # property pro custom objekt }
Velmi stručně řečeno se splatting hodí v situacích, kdy při psaní kódu ještě nemusíme vědět, s jakými parametry budeme chtít daný cmdlet zavolat. Upozorňuji, že nejde o hodnoty parametrů (argumenty), ale skutečně výčet použitých parametrů.
function GetItems { param($p) Get-ChildItem @p } $parameters = @{Path='c:\'} if ($env:computername -eq 'qa-test') { $parameters['filter'] = '*.xls' } GetItems $parameters
Proměnná $parameters udržuje seznam parametrů a jejich hodnot pro volání Get-ChildItem. A pouze na testovacím stroji vylistuje jen xls soubory.
$parameters
Get-ChildItem
Pole hraje jednu z klíčových rolí v PowerShellu. Může obsahovat jakýkoliv objekt, nekontroluje se typ. Pole vytvoříme pomocí literálu @(). V praxi se ještě často používá operátor čárky. Ten nám také vrátí pole. Jen je potřeba myslet na prioritu, s jakou jsou operátory vyhodnocovány.
@()
$arr1 = @('test') # jednoprvkové pole $arr2 = ,'test' # jednoprvkové pole, stejně jako $arr1 $arr3 = 'test1', 'test2' # dvouprvkové pole $fail = 1, 4-2 # chyba; musí být 1, (4-2)
Pro upřesnění: při použití @(...) PowerShell zkontroluje, jestli objekt uvnitř závorek je pole. Pokud ano, vrátí ono pole. Pokud není, zabalí objekt mezi závorkami do pole. Proto vícenásobná aplikace je zbytečná:
@(...)
$arr1 = @('test') $arr2 = @($arr1) # arr1 a arr2 jsou ekvivalentní $arr3 = @(@(@('test'))) # opět stejné jako arr1
Pole se dají sčítat. Následující příklad ukazuje, jak při sčítání polí dostat očekávané výsledky:
$arr1 = @('test') $arr2 = @('test2', 'test3') $result1 = $arr1 + $arr2 # co je uvnitř? (1) $result2 = ,$arr1 + ,$arr2 # a co tady? (2) # otestujeme $result1[1][1] # vrátí e $result2[1][1] # vrátí test3
Je patrné, že při sčítání dvou polí dojde k připojení prvků z druhého pole (1). Pokud bychom chtěli pole nechat izolované, je potřeba je zabalit jako jednoprvké pole (pomocí operátoru čárky) a tato zabalená pole sečíst (2).
PowerShell na první pohled působí jako dynamicky typovaný jazyk:
function Get-Length{ param($object) $object.Length } Get-Length 'test' Get-Length (Get-Item $profile)
V obou případech voláme property Length. při prvním volání předáváme řetězec, v druhém FileInfo. Ve skutečnosti je ale PowerShell staticky typovaný.
Length
PowerShell na pozadí každý objekt zabalí do instance typu PSObject. Zde se udržuje seznam dostupných metod a properties objektu. Můžeme se na něj podívat takto:
PSObject
$xml = [xml]'<root><test/></root>' $xml.PsObject # vrátí obalující objekt $xml.PsBase # vrátí proxovaný objekt
Díky tomuto obalení PowerShell může přidat další property k danému objektu:
$xml.root
Property root ve třídě XmlDocument samozřejmě obsažená není. Kvůli zjednodušení práce s XML ji tam PowerShell dodal, aby se dalo do XML dotazovat pomocí tečkové notace. Záznam o této property pak získáme takto:
root
XmlDocument
$xml.PsObject.Properties | Where-Object {$_.Name -eq 'root'}
Mezi základní aritmetické operátory patří + - * / %. Toto zřejmě nikoho nepřekvapí:
+ - * / %
$a = 2 $b = 3 $a + $b $a / $b # pozn. (1) $a / $a # pozn. (1) $a % $b 'test_' * $b # pozn. (2) $a + "10" # pozn. (3) 'test_' * "10" # pozn. (3)
Za povšimnutí stojí několik zjištění:
$a/$b
$a/$a
$a + "10"
'test_' * "10"
Syntaxe logických operátorů poněkud trpí nečitelností: -and -or -not -xor. Naštěstí alespoň operátor -not můžeme psát jako vykřičník:
-and -or -not -xor
-not
-not $true # je false ! $true # opět false
U logických operátorů se uplatní zkrácené vyhodnocování, tj. pokud nalevo od -and je $false, zbytek se nevyhodnocuje. Obdobně pro -or a $true.
-and
-or
Bitové operátory nezmiňuji, protože PowerShell nemá podporu pro bitové posuny. Z tohoto pohledu je práce na úrovni bitů nedotažená a nemá smysl se jí zabývat. V případě potřeby se dají najít řešení.
Většina operátorů přiřazení vychází z aritmetických, tj. += -= *= /= %=. A ten nejdůležitější je samozřejmě reprezentován rovnítkem: =. Zde není důvod se více rozepisovat. Uvedu jen jeden tip, který nebývá v ostatních jazycích běžný:
+= -= *= /= %=
=
$a = 1 $b = 2 $b, $a = $a, $b
Prohození hodnot dvou proměnných je velmi jednoduché. Ve skutečnosti jde o speciální případ obecnějšího konstruktu – dělení pole:
$array = 1,2,3,4 $first, $rest = $array # můžeme za jistých okolností použít pro iteraci polem $array = 'jablko',1,'hruska',2,'rybiz',3 do { $ovoce, $index, $array = $array Write-Host Ovoce $ovoce ma index $index } while ($array)
Porovnávací operátory jsou jedním z důvodů, proč je PowerShell na první pohled nečitelný. Nešlo o záměr, ale o racionální rozhodnutí. PowerShell byl primárně zaměřen na administrátory a kvůli tomu byl operátor > rezervován pro přesměrování do souboru. A od toho se pak už odvinuly další operátory. O jaké se jedná? -lt -le -eq -ne -ge -gt. Neboli less than, less or equal, equal, not equal, greater or equal, greater than.
>
-lt -le -eq -ne -ge -gt
Pokud tyto operátory budeme používat na řetězce, je potřeba mít na mysli, že porovnání neberou do úvahy case sensitivitu. Pokud potřebujeme přesné porovnání, použijeme operátorry -clt -cle -ceq -cne -cge -cgt.
-clt -cle -ceq -cne -cge -cgt
Opět připomínám mocné konverze prováděné na pozadí, tedy:
1 -eq 01 # žádné přetypování, 01 je 1 1 -eq "1" # přetypování ze stringu na int 1 -eq "01" # přetypování ze stringu na int "1" -eq 01 # přetypování z intu (tj. z 1) na string "01" -eq 01 # přetypování z intu (tj. z 1) na string ("1")
Pro porovnávání řetězců se naštěstí nemusíme uchylovat k prostředkům .NET frameworku, nabízí je totiž samotný jazyk: -match -like -notmatch -notlike. Rozdíl mezi -match a -like je možná již na první pohled patrný.
-match -like -notmatch -notlike
-match
-like
$matches
'123-45-67' -match '\d+-(?<n>(?<n1>\d+)-(?<n2>\d+))' #true $matches # dostaneme toto: #Name Value #---- ----- #n1 45 #n 45-67 #n2 67 #0 123-45-67 '123' -like '1' #false '123' -like '1*3' #true
K dispozici máme ještě další operátory. Ty už se používají na manipulaci s textem:
-replace
-split
-join
Při použití replace můžeme jako nahrazující výraz použít jednoduchý řetězec, ale můžeme se i odkázat na nepojmenovanou groupu (viz. $0), nebo pojmenovanou groupu (${grp}).
$0
${grp}
'toto je testovaci uryvek.' -replace 'to(?!\b)', '$0X' 'pouziti groupy' -replace 'ou(?<grp>.)','${grp}${grp}'
'toto je test' -split '\s+' 1,2,3,4 -join "+"
Doposud jsme používali operátory pro jednoduché typy ([int], [string]). Operátory se dají ovšem použít i na kolekce. Zde se ale změní sémantika.
Uvažujme porovnávací operátory. Výsledkem není výraz typu [bool], ale kolekce prvků, které vyhovují podmínce:
1..10 + 1..5 -eq 5 1..10 -lt 5
Při použití aritmetických operátorů nedojde k aplikování na prvky kolekce. Zafungují pouze násobení (stejně jako u řetězců) a sčítání (sečte dvě kolekce):
1..10 / 3 # chyba 1..10 + 15 # k poli připojí 15 1..10 * 2 # pole zduplikuje
Operátory typické pro pole pak jsou -contains -notcontains. Jejich význam je jasný:
-contains -notcontains
1,2,'3' -contains 3 1,2,'3' -notcontains 3
Řetězcové operátory -match -like vrací pouze ty prvky, pro které je vyhodnocení $true:
-match -like
'123', '145', '234', '345' -match '^1' # vrátí jen ty, které začínají jedničkou '123', '145', '234', '345' -like '1*' # obdoba
A manipulační řetězcové operátory můžeme použít také:
123, '123', '112233' -replace '1', 'X' 'abc', 'aabbcc', 'abbcc' -split 'b'
Všimněte si, že v příkladu na -replace jsem jako první položku v poli použil číslo. Připomínám, že opět dojde ke konverzi na řetězec.
Funkce musí být uvozena klíčovým slovem function. Poté následuje jméno. Parametry a tělo funkce pak můžeme zapsat více způsoby:
function mul($what, [int]$times) { $what * $times } function mul { param($what, [int]$times) $what * $times }
Častěji se používá druhý způsob, který se syntaxí odkazuje na scriptblock a v podstatě jej jen pojmenovává.
Funkci můžeme také vytvořit pomocí cmdletu New-Item, v praxi ovšem většinou není důvod ji využít:
New-Item
New-Item -path function: -name mul -value {param($what, [int]$times) $what * $times}
Jako hodnotu zde předáváme parametrizovaný scriptblock. Uvedený příklad využívá toho, že na funkce stejně jako například na souborový systém se můžeme dívat jako na hierarchickou strukturu – drive. Jejich seznam získáme pomocí cmdletu Get-PsDrive.
Get-PsDrive
Výše jsme si uvedli, že se scriptblocky (tedy anonymními funkcemi) se dá pracovat jako s jakýkoliv jiným typem. To stejné platí i pro funkce. Pokud bychom funkci chtěli získat, respektive odkaz na ni, použijeme cmdlet Get-Item:
Get-Item
function writetest { param($prefix) Write-Host $prefix : test -fore Green } function writetest2 { param($prefix) Write-Host $prefix : test2 -fore Blue } function writerCaller { # použití operátoru & na zavolání funkce; na konci předáváme parametry param($func) & $func 'this is writerCaller' } writerCaller (Get-Item function:writetest) writerCaller (Get-Item function:writetest2)
Právě jsme se dostali k nejdůležitějšímu místu dnešního článku. Funkce (potažmo cmdlety) voláme s parametry oddělenými mezerou a neuzavřené do závorek. Toto je jeden z nejčastějších omylů mezi zrychlenými programátory.
function mul { param($what, $times) Write-Host "Multiplying $what * $times" $what * $times } mul('test', 5) # ne! na $what se navázalo pole s dvěma prvky mul ('test', 5) # ne! na $what se navázalo pole s dvěma prvky mul 'test', 5 # ne! na $what se navázalo pole s dvěma prvky mul 'test' 5 # ano mul test 5 # také možné; zjednodušeně řečeno se neznámá hodnota považuje za řetězec
Výše je uvedeno volání, které spoléhá na pozicování parametrů. Stejně tak ale můžeme specifikovat, na který parametr se argument naváže:
mul -times 10 -what 'test'
Parametry mohou mít default hodnotu a při volání ani nemusíme všem parametrům argument předat.
function mul { param($what='test', $times=2) $what * $times } mul mul x mul -times 1
V PowerShell se nedají funkce přetěžovat. Místo toho se používá koncept parametrů sdružených do tzv. parameter set-u.
function Get-Size { param( [Parameter(ParameterSetName='dir')]$dir, [Parameter(ParameterSetName='file')]$file ) if ($PsCmdlet.ParameterSetName -eq 'dir') { (Get-ChildItem $dir -recurse | ? { !$_.PsIsContainer } | Select -expand Length | Measure-Object -sum).Sum } else { Get-Item $file | Select -expand Length } }
Více informací může poskytnout přímo PowerShell: help about_functions_advanced_parameters.
help about_functions_advanced_parameters
Mezi nejvýraznější prvky PowerShellu patří pipeline. Jde o vlastnost jazyka, která se používá na iterování prvky kolekce. Krom toho jazyk obsahuje i další konstrukty jako for, while, do/while. Více lze najít v dokumentaci, nebo na internetu. Protentokrát se zaměříme na pipeline.
V oblasti .NET frameworku podporuje pipeline snad jen F#, u ostatních jazyků se rozšíření neplánuje. V F# je pipeline jen syntaktickým cukrem:
let col = [1; 2; 5; 10] col |> List.map (fun i -> printfn "map1: %d" i; i*i) |> List.map (fun i -> printfn "map2: %d" i; i*i) |> List.iter (printfn "iter: %d") // ekvivalent: (List.iter (printfn "i3: %d") (List.map (fun i -> printfn "i2: %d" i; i*i) (List.map (fun i -> printfn "i1: %d" i; i*i) col))) // výstup: map1: 1 map1: 2 map1: 5 map1: 10 map2: 1 map2: 4 map2: 25 map2: 100 iter: 1 iter: 16 iter: 625 iter: 10000
Zápis s pomocí pipeline je jistě přehlednější. Je vidět, že se jednotlivé řádky a volání funkcí List.map/iter volají postupně na všech členech kolekce. V případě použití sekvencí se ovšem výstup radikálně změní:
List.map/iter
let col = seq { for i in [1;2;5;10] do printfn "yield: %d" i; yield i } col |> Seq.map (fun i -> printfn "map1: %d" i; i*i) |> Seq.map (fun i -> printfn "map2: %d" i; i*i) |> Seq.iter (printfn "iter3: %d") // výsledek yield: 1 map1: 1 map2: 1 iter3: 1 yield: 2 map1: 2 map2: 4 iter3: 16 yield: 5 map1: 5 map2: 25 iter3: 625 yield: 10 map1: 10 map2: 100 iter3: 10000
Zde je vidět důležitý rozdíl mezi oběma výsledky. U sekvencí dochází k lazy vyhodnocování, tj. vyhodnocují se až při požadavku (viz. yield). Proto se nejdříve zpracuje první prvek, prožene se přes všechna volání map/iter a až poté se pokračuje na další prvek. A proč to tu vlastně píšu? Protože PowerShell funguje podobně jako sekvence. Uvedeme si příklad.
yield
map/iter
# vyfiltruje podané objekty a vrátí jen soubory starší než 7 dnů function FilterFile { param([Parameter(ValueFromPipeline=$true)]$item) begin { Write-Host end: filtering -fore Green } process { if ($item.PsIsContainer) { return } # directory if ($item.LastWriteTime -lt (Get-Date).AddDays(-7)) { Write-Host Returning $item.Fullname -fore Blue $item } } end { Write-Host beg: filtering -fore Red } } # pro každý podaný soubor vrátí jeho první a poslední řádek function ReturnInterestingLines { param([Parameter(ValueFromPipeline=$true)]$file) begin { Write-Host beg: return interesting -fore Green } process { Write-Host Reading $file -fore Blue (Get-Content $file.FullName)[0,-1] } end { Write-Host end: return interesting -fore Red } } Get-ChildItem $psHome *.txt | FilterFile | ReturnInterestingLines
Zkuste si tento kus kódu zkopírovat do PowerShell konzole nebo ISE a spustit.
FilterFile
ReturnInterestingLines
O PowerShellu jistě každý uslyší ve spojení s objekty. V tomto smyslu se o objektově orientované programování jedná. Ale pokud programátor hledá v PowerShellu možnost, jak vytvářet třídu, z ní podědit, mít některé metody virtuální a podobně, bude zklamán. PowerShell se na tento typ programování nehodí. Na codeplexu sice existuje projekt psclass, který implements Inheritance, Polymorphism, encapsulation, and more!, případně je možné využít cmdletu Add-Type a opravdu si vytvořit svou třídu a zkompilovat ji. Přesto bych doporučil odprostit se od naučených objektových technik a využívat typový systém .NET frameworku.
Add-Type
V první verzi PowerShellu jsme se museli bez generik obejít. Ve V2 byla dodána podpora, ale bohužel ne kompletní. Můžeme sice vytvořit například List<string>, ale už nebyla dodána podpora pro volání generických metod. Čemu to vadí? Pokud jsme dostali neznámou assembly a chceme ji prozkoumat a vyzkoušet si práci s objekty této assembly, pak nemožnost zavolat generickou metodu omezuje naše možnosti.
List<string>
$list = New-Object System.Collections.Generic.List[string] $list.Add('i1') $list.AddRange([string[]]('i2', 'i3'))
Upozorním jen na dvě volání, která s generikami tolik nesouvisí, ale je dobré si je uvědomit:
$list.AddRange('i2', 'i3') # chyba $list.AddRange(('i2', 'i3')) # chyba
Při prvním volání by se mohlo zdát, že je všechno v pořádku. PowerShell zde ale neinterpretuje čárku jako operátor. Místo toho zde čárka odděluje jednotlivé argumenty. Druhé volání vyhodí chybu, protože jako argument předáváme [object[]]. Automatická konverze zde evidentně neproběhne.
Jak jsme si už řekli, volání generických metod v PowerShellu nemá přímou podporu. Přesto je ale možné, pokud využijeme prostředků .NET frameworku. Ukážeme si, jak použít již hotové řešení.
Add-Type -TypeDefinition @" public class TestGenerics { public string GetObjectType(T item) { return item.ToString() + " - " + typeof(T).FullName; } } "@ $t = New-Object testgenerics d:\Invoke-GenericMethod.ps1 ` -instance $t ` -methodName GetObjectType ` -typeParameters string ` -methodParameters 'test'
Vytvořili jsme si třídu TestGenerics a poté ji instanciovali a uložili do proměnné $t. Tato třída má jen jednu metodu s generickým parametrem. Poslední příkaz ukazuje, jakým způsobem je možné generickou metodu zavolat. Využijeme k tomu výše referencovaný skript, který jsme si uložili do souboru Invoke-GenericMethod.ps1.
$t
V PowerShellu rozeznáváme tři rozsahy platnosti proměnných: global, script, local.
Jednotlivé scope se do sebe zanořují s každým odložením na zásobník. Můžeme se podívat na příklad:
function writevar { param($func) Write-Host $func :: var is $var } function test1 { $var = 'test1' # (5) writevar test1 # (6) } function test2 { writevar test2 # (1) $var = 'test2' # (2) writevar test2 # (3) test1 # (4), (7) writevar test2 # (8) } test2
Zkusíme si rozebrat volání a vyhodnocování proměnné. Nadeklarovali jsme tři funkce a jdeme volat funkci test2. Pokud jsme deklaraci prováděli v konzoli, byli jsme ve scope global. V jejím těle se už nacházíme v zanořeném scope, ale global máme stále k dispozici.
test2
(1) Jako první krok volá writevar. Zanoříme se o jeden scope níž. Při vyhodnocování $var se postupuje od aktuálního (local) scope směrem nahoru. Nikde ale zatím nebyla $var definovaná, takže se vypíše prázdná hodnota.
writevar
$var
(2) Dalším krokem je přiřazení $var = 'test2'. Toto způsobí, že v lokálním scope se vytvoří proměnná a nastaví jí nějaká hodnota. Tato proměnná bude viditelná i v dalších podřízených scope.
$var = 'test2'
(3) Opět se volá writevar. Vytvoří se zanořený scope. Při vyhodnocování se zjistí, že proměnná v lokálním scope neexistuje a jde se o jedno výš (tj. scope funkce test2). Zde už byla proměnná definovaná, tedy je při vyhodnocování vrácena její hodnota.
(4) Po vrácení se zpět a zavolání funkce test1 nastane zajímavá situace: vytvoří se opět zanořený scope v test1 a v něm se přiřadí do proměnné jiná hodnota (5): $var = 'test1'. V tuto chvíli na stacku existují dvě proměnné: s hodnotou test2 a test1. Přiřazením v novém scope tedy nejsme schopni přepsat hodnotu proměnné v nadřazeném scope, místo toho nová proměnná překryje tu dřívější. Jde o dynamické vyhodnocování.
test1
$var = 'test1'
Set-Variable
function inner { Write-Host "inner: before" $inouter Set-Variable inouter 10 -scope 1 Write-Host "inner: after" $inouter } function outer { $inouter = -5 Write-Host "outer: before" $inouter inner Write-Host "outer: after" $inouter } outer
Samozřejmě ale nedoporučuji pro reálné použití.
(6) Voláme z test1 funkci writevar, která si opět vytvoří nový scope. V něm při vyhodnocování proměnnou $var nenajde. Pokračuje o jedno výš a prohledává nadřazený scope – to je ten, kde se do proměnné přiřadila hodnota test1. Najde a vypíše.
(7) Opustí se funkce writevar a hned potom i test1. Při tom se zruší scope, kde je definovaná proměnná s hodnotou test1.
(8) Proto další vypisování proměnné narazí v nadřazeném scope už jen na proměnnou s hodnotou test2.
Proměnná se dá i definovat v private scope. Takto definovaná proměnná není viditelná z podřízených scope. V praxi je samozřejmě na překážku vypisovat vždy, že jde o private. Proto se běžně používá defaultní local, u něhož se modifikátor vynechává.
function inner { Write-Host inner: $inouter # proměnná není vidět } function outer { $private:inouter = 10 inner # nedostane se na proměnnou inouter } outer
Výrazem zde rozumím jazykový konstrukt, který vrací nějakou hodnotu. Může to být volání funkce, operátoru na svých operandech a podobně.
$d = Get-Date
V případě, že PowerShell rozezná, že do nějaké proměnné přiřazujeme hodnotu, pak považuje pravou stranu od rovnítka za výraz, který má vyhodnotit. Proto v proměnné $d bude datum a ne reference na funkci. Odlišná situace ale nastává, pokud funkci použijeme jako argument při volání jiného příkazu:
$d
Write-Host Get-Date # vypíše get-date #vs. Write-Host (Get-Date) # vypíše skutečný datum
Zde PowerShell neví, že jde o funkci a Get-Date považuje pouze za řetězec (ani ne odkaz na funkci). Proto musíme pomoci použitím závorek a vynutit si vyhodnocení.
Get-Date
Při podobných vyhodnocování interpreter postupuje podle přesně definovaných pravidel, kdy se případný výraz snaží vyhodnotit. Některá z nich si ukážeme na příkladech.
function testfunc($p) { Write-Host Parameter type: $p.GetType() value: $p } testfunc get-date # string / get-date testfunc (get-date) # date / aktuální čas testfunc 1 # int / 1 testfunc 1.5 # double / 1.5 testfunc test # string / test (1) testfunc 'test' # string / test (2) testfunc ('test') # string / test (3) testfunc (test) # chyba $d = Get-Item $env:temp # temporary dir testfunc $d # DirectoryInfo / ..temp testfunc $d.Name # string / temp testfunc $d.FullName.Length # int / 32 (délka celé cesty) $f = { Get-Date } # anonymní fce testfunc $f # scriptblock / {get-date} testfunc & $f # chyba, takto nejde testfunc (& $f) # date / aktuální čas
Ve funkci testfunc jsme neurčili typ parametru $p, proto se neprovádí žádné konverze a na parametr se naváže předaná hodnota bez konverze. Proto si bez obav můžeme vypsat typ a hodnotu parametru.
testfunc
$p
Při předávání řetězce jako argumentu je dobré si zapamatovat, že uvozovky/apostrofy psát nemusíme, proto (1), (2) a (3) jsou ekvivalentní.
Stručně řečeno platí: pokud PowerShell pozná, že daná navazovaná hodnota může reprezentovat výraz, pak tento výraz vyhodnotí. Pokud ne, pak předpokládá, že daná hodnota je řetězec a zachází s ním dále jako s řetězcem.
Hranice hodnoty, kterou se interpreter snaží vyhodnotit jako výraz, je dána mezerami. Proto je už snad jasné, proč následující příkaz skončí chybou:
Get-ChildItem C:\Program Files
V případě, že si nejsme jistí, jak byly hodnoty navázány na parametry, můžeme použít cmdlet Trace-Command:
Trace-Command
Trace-Command -pshost -name ParameterBinding { Get-ChildItem c:\Program Files }
Z výpisu je pak jasné, že na parametr -Path byla navázána hodnota c:\Program a na parametr -Filter hodnota Files. Příkaz následně selhal, protože adresář c:\Program prostě neexistuje. Řešením je samozřejmě uzavřít cestu do uvozovek.
-Path
-Filter
Výrazy můžeme vytvořit i z řídících bloků, pokud je zabalíme do $(...). To se někdy může hodit, pokud potřebujeme vytvořit one-liner například kvůli spuštění z cmd.exe.
$(...)
# vypíše text modře odpoledne a zeleně jinak Write-Host modra? zelena? -fore $(if((Get-Date).Hour -ge 12){'Blue'}else{'Green'})
A tím jsme se pomalu dostali k vyhodnocování výrazů v řetězcích. Dopředu prozradím, že problematické situace řeší právě blok uzavřený do $(...). Příklady:
write-host "get-date" # get-date write-host "(get-date)" # (get-date) write-host "$(get-date)" # aktuální datum $d = Get-Item $env:temp # temporary dir write-host "$d" # (1) C:\Users\stej\AppData\Local\Temp write-host "$d.Name" # (2) C:\Users\stej\AppData\Local\Temp.Name write-host "$(d.Name)" # chyba write-host "$($d.Name)" # (3) Temp write-host "$(1; get-date; 'a','b'|%{$_*3})" # (4)
Je důležité se zapamovat, že při přístupu k property pomocí tečkové notace se nám vyhodnotí jen samotný objekt (proběhne konverze na string) a část od tečky dál se považuje za řetězec. Poslední příklad (4) navíc ukazuje, že výraz v závorkách může vracet více hodnot. Všechny tyto hodnoty se pak spojí do jednoho stringu.
Co přesně znamená "spojí"? Výraz $(1; get-date; 'a','b'|%{$_*3}) vrátí pole prvků. První bude číslo, druhý bude datum a poté dva řetězce. Toto pole je poté konvertováno na řetězec. Při konverzi je použita speciální proměnná $ofs, jejíž výchozí hodnota je mezera. Zkusme ji změnit na cokoliv jiného a uvidíme výsledek:
$(1; get-date; 'a','b'|%{$_*3})
$ofs
$ofs = '][' write-host "$(1; get-date; 'a','b'|%{$_*3})"
Snažil jsem se pohlédnout na PowerShell očima programátora a vypíchnout ty vlastnosti, které mohou být pro programátora zajímavé a kde může narazit na rozdíly mezi svým jazykem a PowerShellem. Článek tentokrát narostl do délky, přesto věřím, že se najde někdo, kdo ho přečte celý. V příštím díle se už zkusíme podívat na praktičtější použití.
- Josef Štefan
V tomto článku si představíme nástroje pro řešení případných problémů s Windows 7. Konkrétně se zaměříme na Windows Recovery Environment (WinRE) a některé další nástroje pro urychlení nasazení operačního systému Windows 7 a diagnostiku.
Windows Recovery Environment (WinRE) je prostředí založené na Windows Preinstallation Environment (WinPE) určené pro řešení zásadních potíží především se startem operačního systému.
WinRE je v případě Windows 7 dostupné resp. instalované automaticky. V případě Windows Server 2008 R2 je nutné, pokud jej chceme bootovat z lokálního disku, doinstalovat. V případě Windows 7, je obraz WinRE umístěn na druhé partition, která je vytvořena automaticky při instalaci.
Windows 7, pokud identifikuje problém se startem operačního systému, automaticky nabízí možnost startu WinRE prostředí – volba Launch Startup Repair.
Boot WinRE je shodný s bootováním Windows PE, startup konfigurace WinRE je rozšířena o tzv. Startup Repair nástroj, který se pokusí automaticky identifikovat případný problém.
Vyvolat nabídku na start WinRE je možné stlačením klávesy F8 při zapnutí počítače. V tomto případě, je nutné se do WinRE přihlásit lokálním účtem, který je členem skupiny Administrators. Po úspěšném přihlášení dojde k nabídce spuštění Startup Repair nástroje.
Po spuštění nástroje dojde k pokusu o automatické nalezení případného problému.
Windows RE je možné také modifikovat resp. rozšířit o vlastní nástroje.
Zdrojový obraz WinRE.wim je umístěn v instalačním zdroji Windows 7 v souboru \sources\install.wim v adresáři \Windows\system32\Recovery.
Modifikaci winre.wim souboru, provedeme shodným způsobem jako v případě Windows PE tj. boot.wim resp. winpe.wim. Využijeme interní nástroj dism.exe. Modifikace se sestává z následujících kroků:
Podrobné postupy jakým způsobem modifikovat winre.wim najdete na následující adrese: http://technet.microsoft.com/en-us/library/dd744388(WS.10).aspx
Pro správu Windows Recovery a implementaci modifikovaného WinRE.wim je možné využít interní nástroj příkazové řádky: REAgentC.exe
Výpis aktuálního nastavení Recovery prostředí v elevated kontextu:
ReAgentC /info
Detailní informace o využití nástroje reagentc.exe najdete na http://technet.microsoft.com/en-us/library/dd799242(WS.10).aspx
Již ve Windows Vista byly trasovací možnosti od předchozích verzí Windows radikálně přepracovány. Nyní tento systém poskytuje více informací/logů bez zásadního vlivu na výkon sledovaného systému. Jedná se o Event Tracing for Windows (ETW), typickým příkladem využití ETW je oblíbený diagnostický nástroj z řady Windows Sysinternals – „Process Monitor“ nebo Windows Performance Toolkit.
Interně ve Windows 7 je dostupný nástroj příkazové řádky logman. Ten umožňuje získávat informace z ETW.
Příkladem využití logman.exe, může být trasování průběhu přihlášení uživatele. Výsledný log soubor obsahuje detailní informace o přihlášení uživatele, vytvoření/použití profilu a další potřebné informace k nalezení případných problémů. Tyto informace jsou uloženy v bezpečném formátu, který je čitelný pouze po konverzi s využitím interních šablon společnosti Microsoft.
Příklad aktivace trasování uživatelského přihlášení resp. User Profile Service ve Windows 7 (vyžaduje elevated kontext):
logman -start profile -p {89B1E9F0-5AFF-44A6-9B44-0A07A7CE5845} 255 3 –ets
Zastavení trasování provedeme příkazem:
logman –stop profile –ets
Po zastavení trasování, je vytvořen soubor.etl, který je nutné zkonvertovat pomocí nástroje tracerpt.
Seznam dostupných služeb k trasování získáme příkazem:
logman query providers
Do Event Tracing for Windows, díky dostupnému API, může reportovat data jakýkoli aplikace, popis ETW je dostupný na stránkách http://msdn.microsoft.com.
Windows Automated Installation Kit 2.0 (WAIK) je sada nástrojů primárně určených pro přípravu instalace Windows 7 v podnikovém nasazení. WAIK obsahuje detailní dokumentaci popisující možnosti bezobslužné instalace Windows 7, migrace uživatelských data pomocí USMT 4.0 a modifikace obrazu Windows 7 dle požadavků dané společnosti.
Microsoft Application Compatibility Toolkit (ACT), aktuální verze 5.5, napomáhá organizacím řešit problémy s nekompatibilními aplikace na novém operačním systému. Identifikuje případné problémy v aplikacích a nabízí možná řešení, aniž by bylo nutné aplikaci upravovat.
Microsoft Deployment Toolkit 2010 (MDT), aktuálně je dostupný v BETA verzi na Microsoft Download Center. Jedná se o sadu nástrojů a návodů zefektivňující nasazení operačního systému a Microsoft Office. Napomáhá deployment administrátorům připravit různé scénáře instalace operačního systému a dalších aplikací včetně migrace uživatelských dat. Obsahuje řadu skriptů, které je možné upravovat dle specifických požadavků. Díky integraci např. do WDS, SMS 2003 OSD, System Center Configuration Manager 2007 MDT 2010 umožňuje rychleji vytvořit funkční proces instalace operačního systému.
Windows Deployment Services. S Windows Server 2008 byla role Windows Deployment Services rozšířena o podporu multicast přenosu resp. stažení obrazu operačního systému. Tato technologie umožňuje dramaticky zvýšit počet současně instalovaných desktopů. Podstatou je fakt, že příslušný obraz (image) je přenášen po síti pouze jednou na rozdíl od standardního SMB přenosu, kdy rozbalený image putuje tolikrát kolik je právě instalovaných desktopů současně. Multicast v této verzi však nastavil rychlost přenosu dle nejpomalejšího desktopu/sítové karty, to limitovalo ostatní počítače, které mohou obdržet obraz ve větší přenosové rychlosti. S Windows Server 2008 R2 je technologie multicast vylepšena o tzv. Multiple Stream Transfer. To umožní desktopům, efektivně stahovat obraz dle svých maximálních kapacit.
Windows Sysinternals Tools, všem dobře známé a volně dostupné diagnostické nástroje nemusím určitě nikomu představovat. V případě přechodu na nový operační systém velmi přínosným nástrojem je nepochybně „Process Monitor“ (náhrada regmon a filemon). Sysinternals tools jsou dostupné na adrese: http://technet.microsoft.com/en-us/sysinternals/default.aspx.
- Tomáš Rýdl (Microsoft)
První část seriálu
Když někomu řeknete, aby vám vysvětlil výhody PowerShellu, většinou se dozvíte, že jednou z nich je objektová roura. Mechanismus roury už většina z vás asi použila (nebo jste o ní alespoň slyšeli), horší to už bude zřejmě s tou její objektovostí. Práce s objekty vychází z toho, že PowerShell je postavený na platformě .NET Framework (vzpomínáte si, když jsme si v první části, že bez .NETu PowerShell nenainstalujete?). V dnešní části si povíme právě o objektech a rouře. O .NETu si povíme příště.
Začněme obecným vysvětlením principu objektů. Ti z Vás, kdo máte znalosti jakéhokoli objektového jazyka, můžete tuto část přeskočit. Rovnou se omlouvám některým .NET puristům – určité části budu záměrně zjednodušovat. Tento článek je psán z pohledu administrátora a (v tuto chvíli) není nutné vědět, co je například konstruktor.
Při svých prezentacích PowerShellu pro lidi zabývající se administrací systémů jsem zjistil, že některým z nich dělá problém pochopit základní princip. Ukazuji jim tedy analogii na lahvích různých tvarů a náplní. Při druhém vyprazdňování flašky s rumem je jim to již většinou jasné. Na stránky seriózního média, jakým bezesporu TechNet je, ovšem alkohol nepatří a tak se spokojíme s něčím méně kontroverzním. Upustíme od tradičních žárovek nebo aut a přeneseme si do objektů svět zvířat – budeme pracovat s objektem kočkovitá šelma.
Každý objekt si sebou nese sadu vlastností a metod (funkcí).V případě kočky mezi vlastnosti patří např. velikost, barva chlupů, barva očí, váha či oblíbené jídlo. Řeknu-li tedy, že máme kočku oranžové barvy s černými pruhy, váhou 250kg, velikostí XXXL, která pojídá s oblibou buvoly, bude vám jasné, že mluvím o tygrovi. Pokud taková kočka váží šest kilo, je tříbarevná, velikosti M, má ráda šunku a její oblíbené místo k válení je klávesnice mého notebooku, asi tušíte, kde byste takovou kočku hledali.
Stejně tak to je s objekty v počítačovém světě. Pokud se budeme bavit například o procesech jsou jejich vlastnostmi ProcessName, WorkingSet, StartTime nebo Id. Vlastnosti popisují určitý stav objektu v čase, pokud chcete takový stav změnit, použijete k tomu určené metody.
Kočka má například metody spát, jíst, značkovat, vrnět nebo plést se pod nohy. Pokud u kočky spustíte metodu spát, můžete se jít v klidu dívat na televizi (dokud nevyvoláte u kočky metodu probudit se, například otevřením dveří od ledničky). U procesů je to podobné (s tou výjimkou, že procesy naštěstí na ledničku nereagují), zavoláním určité metody změníme chování nebo stav procesu. Existují například metody Start(), Refresh() nebo Kill().
Všimněte si, že jsem za názvy metod psal kulaté závorky. Berte to jako mnemotechnickou pomůcku, pokud uvidíte při práci s objekty závorky, pracujete s metodou.
Objekty a objektový přístup obecně, mají jednu obrovskou výhodu. Relativně jednoduše s nimi dokážeme pracovat pomocí základních příkazů. Když jsme si šli vybírat do útulku objekt kočka, věděli jsme, že chceme určitou velikost, barvu, roztomilost a způsob chování (samozřejmě že to dopadlo úplně jinak, ale to nebyla chyba objektového přístupu, ale změny vstupních parametrů v okamžiku vstupu do místnosti plné mňoukajících koťátek). U procesů je to naštěstí exaktnější. Počítač vám běží pomalu a tak hledáte process, který zabírá nejvíc procesorového času či paměti a na ten se zaměříte. „Zmrzla“ vám určitá aplikace a tak hledáte process s jejím jménem, abyste ho ukončili, resp. zavolali nad oním procesem metodu Kill().
Některé z typů objektů (s jejich vlastnostmi a metodami) jsou vypsány v následující tabulce. Co je třída si řekneme na konci dnešního článku.
Jméno
Třída
Vlastnosti
Metody
Proces
System.Diagnostics.Process
ProcessName, WorkingSet, StartTime
Start(), Refresh(), Kill()
Služba
System.ServiceProcess.ServiceController
DisplayName, Satus, DependentServices
Start(), Stop(), Pause()
Soubor
System.IO.FileInfo
Name, Length, LastAccessTime
Open(), Delete(), Delete()
Klíče registru
Microsoft.Win32.RegistryKey
Name, SubKeyCount, ValueCount
OpenSubkey(), GetValue(), DeleteValue()
Datum
System.DateTime
Date, Hour, DayOfWeek
Add(), AddDays(), ToUniversalTime()
Text
System.String
CompareTo(), Contains(), ToLower()
Než si ukážeme jak přistupovat k vlastnostem a metodám objektů hromadně pomocí roury, ukážeme si, jak k nim přistupovat v případě jednoho objektu. V následujících ukázkách si nejdříve uložíme textový řetězec do proměnné ($text) a poté budeme přistupovat k jednotlivým vlastnostem a metodám.
Za chvíli si ukážeme, jak zjistit, které vlastnosti a metody lze pro konktétní typ objektu použít.
Tip: PowerShell podporuje doplňování příkazů pomocí klávesy tabulátor <Tab>. Pokud byste v předchozím příkladu napsali $te<Tab>.Le<Tab>, PowerShell zápis doplní na správnou formu ($text.Length). Tabulátorem můžete „cyklovat“ mezi možnými variantami – v případě, že napíšete pouze $text. (tečka je zde důležitá), můžete opakovaným použitím klávesy <Tab> procházet všechny dostupné vlastnosti a metody.
Další možností je doinstalovat nástroj PowerTab, který po stisknutí <Tab> zobrazí dostupné vlastnosti a metody přehledněji.
Mechanismus roury (v angličtině pipeline) se ve výpočetní technice používá od sedmdesátých let, kdy byla tato technika implementována do operačního systému UNIX. Její idea je geniálně jednoduchá: „Vezmi výstup jednoho příkazu a pomocí roury jej pošli na vstup příkazu dalšího.“ Roura se zapisuje pomocí znaku | a byla dostupná již v dřívějších verzích operačních systémů Microsoftu. V cmd.exe (nebo již v MS-DOSu) jste ji mohli bez problémů použít např. pro stránkování dlouhých výpisů:
C:\>dir /b /s *.txt | more
Výstup příkazu dir (seznam txt souborů) je poslán na vstup příkazu more, který zajistí zastavení výpisu po zaplnění obrazovky. V PowerShellu můžete rouru použít třeba takto:
PS C:\> dir *.ps1 | Sort -Property Length
Na výstupu příkazu dir jsou objekty (kolekce objektů) a každý z nich reprezentuje jeden soubor s příponou PS1. Tyto objekty jsou pomocí roury předány na vstup příkazu Sort, který je vezme a setřídí je podle vlastnosti Length. Na výstupu příkazu Sort máme tedy soubory PS1 seřazené podle velikosti (opět se zde nacházejí ve formě kolekce objektů, takže bychom je mohli další rourou poslat jinému příkazu). PowerShell ví, že vlastnost Length je číselný údaj a že s ním má tedy jako s číslem pracovat. Stejně tak ví, že když napíšeme
PS C:\> dir *.ps1 | Sort -Property LastWriteTime
chceme řadit soubory podle časového údaje a sám provede potřebné úkony. Pokud tedy pracujeme s objekty v rouře, stačí vědět, kterou vlastnost potřebujeme pro dosažení potřebných výsledků.
Pojďme si ukázat ještě pár jednoduchých příkladů a potom si řekneme, jak vlastně zjistíme, které vlastnosti obsahuje konktétní typ objektu.
Příkaz
Výsledek
dir | Sort -Property Length -Descending | Select -First 5
Pět největších souborů v adresáři
dir | Group -Property Extension | Sort -Property Count -Descending
Jednotlivé typy souborů, řazené podle počtu
dir | Measure-Object -Property Length -Sum
Celková velikost souborů v adresáři
Get-WmiObject Win32_LogicalDisk | ` Select Name, DriveType, FileSystem, Size, FreeSpace | ` Format-Table -AutoSize
Vypíše logické disky, jejich jméno, typ, souborový systém, velikost disku a volné místo. Výsledek zobrazí v tabulce.
Get-Process -Name notepad | Stop-Process
Ukončení notepadu
U posledního příkladu je dobré si uvědomit jednu věc – PowerShell najde všechny procesy, které se jmenují notepad a pošle je rourou dále. Stop-Process převezme opět všechny procesy a zastaví je. Pokud byste se překlepli a provedli následující příkaz (nezkoušet!!!)
Get-Process | Stop-Process
způsobili byste svému počítači (s Windows XP) modrou smrt, protože byste zastavili všechny běžící procesy. Abyste takovým věcem zabránili, existují v PowerShellu příkazy a přepínače, které si ukážeme v některém z následujících článků.
Nyní si ukážeme, jak zjistit, které vlastnosti a metody obsahuje konkrétní objekt. V PowerShellu je k tomuto účelu cmdlet Get-Member. Bez přehánění můžu prohlásit, že to je nejužitečnější cmdlet, který existuje. Ukažme si jeho použití nejprve na jednoduchém řetězci znaků (výstup byl zkrácen).
Vidíte, že řetězec má jednu vlastnost (Length) a množství metod (ve skutečnosti je jich 35). Jak je použít jsme si ukázali před chvílí. Pojď me si zobrazit vlastnosti objektu typu soubor.
¨
Zde vidíte, jak jsem zjistil, že existuje vlastnost LastWriteTime.
Get-Member je opravdu vynikající průzkumník a pomocník. Zvláště ze začátku jej budete používat velice často.
Ještě jednu věc je potřeba zmínit. Všechny objekty stejného typu (např. procesy) jsou odvozeny od tzv. třídy. Třída říká, jaké vlastnosti a metody bude objekt mít. Nemusíte si pamatovat, že proces (např. notepad.exe) je vlastně odvozen od třídy System.Diagnostics.Process. Je ale dobré vědět, kde tuto informaci hledat pro případ, že byste chtěli např. na MSDN hledat podrobnější informace o objektu. Příkaz Get-Member vám tuto informaci zobrazí v první řádce výpisu.
Můžete také použít následující kus kódu (schválně jsem použil relativně složitý a nečitelný zápis – chci vás tím nalákat na další část, kde si povíme mimojiné o aliasech):
Příkaz dir můžete změnit za jakýkoli jiný, který vás zajímá. Chcete-li ověřit, že text „Ahoj“ je opravdu string, můžete použít
Další díly seriálu:Seriál: Windows Powershell – PS pro programátory (část 6.)Seriál: Windows Powershell - souborový systém a registry (část 5.)Seriál: Windows Powershell – dolujeme data aneb jak na WMI (část 4.) Seriál: Windows Powershell – roury a aliasy (část 3.)Seriál: Windows Powershell – úvod (část 1.)
Kanty> Tento článek je prvním z celkem čtyřdílné série článků na téma Windows 8 licencování, které vás na TechNet blogu provázet do konce tohoto týdne. Autorem je licenční specialista Petr Janovský, který je připraven zodpovědět vaše upřesňující otázky, které můžete klást pod článkem v diskusi. Jen vás poprosím, s dotazy počkejte až do posledního, pátečního dílu seriálu. Otázka, na kterou nenajdete odpověď dnes, může být popsána v některém z následujících dílů.
Domácí uživatel má několik možností jak pořídit nový Windows 8. Nejvíce záleží na tom, jestli pořizuje nový počítač nebo pouze chce povýšit (upgradovat) operační systém na stávajícím počítači.
Nová zařízení bývají nejčastěji již vybavena předinstalovaným systémem Windows 8 nebo Windows 8 Pro. Jaký hardware, potažmo software uživatel zvolí, je zcela v jeho režii. Obecně platí, že levnější a také herní zařízení bývají distribuována s edicí Windows 8, která je určená pro domácí uživatele. Na druhou stranu „profi“ zařízení bývají předinstalovaná s edicí vhodnou do firemního prostředí, tedy Windows 8 Pro.
Je tedy možné vybírat ze dvou edic, tedy Windows 8 a Windows 8 Pro.
Licenční podmínky OEM licence dodávané společně s hardwarem:
Downgrade – možnost používat předchozí verze systému Windows:
K novým zařízením, která jsou dodávána bez operačního systému nebo s jiným operačním systémem než Windows, je možné pořídit OEM licenci pro osobní použití.
Jedná se o stejnou licenci jako klasická OEM licence dodávaná společně s hardwarem, nicméně pro ni platí jiné podmínky.
Je možné vybírat ze dvou edic, tedy Windows 8 a Windows 8 Pro.
Licenční podmínky OEM licence pro osobní použití:
V případě, že uživatel požaduje upgrade stávajícího operačního systému Windows (např. Windows 7/ Vista/ XP) na Windows 8 nebo Windows 8 Pro a nepořizuje si nový počítač, tak zakoupí krabicovou licenci Version Upgrade. Podmínkou je, aby stávající počítač již měl jakoukoliv licenci Windows v libovolné edici, např. OEM (Windows 7, Vista, XP,…). U licence Version Upgrade se tedy jedná o povýšení verze systému Windows.
Licenční podmínky krabicové licence Version Uprgade:
Pokud si uživatel pořídí nové zařízení s licencí Windows 8 OEM, ale kvůli vyšším funkcionalitám potřebuje přejít na Windows 8 Pro, tak zakoupí krabicovou licenci Windows 8 Pro Pack. Licence má obdobné podmínky jako Version Upgrade, nicméně se jedná o levnější variantu přechodu. Platí však, že Windows 8 Pro Pack je možné instalovat pouze na počítače s Windows 8. Jedná se tedy o povýšení edice Windows 8.
Licenční podmínky licence Windows 8 Pro Pack:
Uživatel, který používá nepravý operační systém Windows (stažený, vypálený, apod.), by pro svůj počítač měl pořídit legalizační sadu GGK Windows 8 Pro, a získat tak originální software. Podmínky licence GGK se velmi podobají podmínkám klasické OEM licence. Sada GGK je tedy určena pouze pro případy legalizace nepravého systému Windows.
V rámci GGK jsou dostupné obě edice Windows 8 i Windows 8 Pro.
Licenční podmínky GGK sady:
Pokud má uživatel zařízení s originálním operačním systémem (Windows nebo jiný operační systém např. Linux nebo Macintosh) a potřebuje další instanci s Windows 8 ať už do fyzického nebo do virtuálního prostředí, tak je možné pořídit OEM licenci pro osobní použití.
Pokud si uživatel sám sestavuje vlastní zařízení (počítač), tak je možné pořídit OEM licenci pro osobní použití.
- Petr Janovský, Microsoft
Virtualizační technologie Hyper-V s podporou 64-bitových hostitelských operačních systémů, práce se snapshoty hostitelských PC a možnost namapování virtuálního disku VHD přímo do prostředí Windows činí z Windows Serveru 2008 R2 prakticky ideální nástroj pro vytvoření a správu upravených instalačních obrazů (image) Windows. V tomto článku nabídnu postup pro vytvoření (zachycení) image a jeho úpravu pro pozdější nasazení Windows 7.
Zastánci old-school postupů by pro vytvoření referenčního image použili fyzický počítač, my využijeme výhod Hyper-V a referenční počítač s Windows 7 nainstalujeme jako virtuální s přidáním ovladačů pro hladký průběh přenosu image na koncové stanice. Nasnadě je, že takovýto postup poskytuje výhody rychlé úpravy obrazu, práci s několika verzemi s pomocí snapshotů a rychlý průběh testování.
Celý postup rozdělíme do několika kroků:
---------------------------------------------sysprep.xml pro zachovani driveru----------- <unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="x86"> <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> </component> </settings> </unattend>
---------------------------------------------sysprep.xml pro zachovani driveru-----------
<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="x86"> <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> </component> </settings> </unattend>
spusťte sysprep a nakonfigurujte jej takto: dále již sysprep dělá svou práci: pozn: pokud vám sysprep jako mě skončil s chybou, je třeba zastavit službu Windows Media Player Network Sharing Service
Edice
ImageX příkaz
Enterprise
E:\imagex /compress fast /check /flags “Enterprise” /capture D:
E:\install.wim “Windows 7 Enterprise” “upraveny image Windows7 Enterprise"
Professional
E:\imagex /compress fast /check /flags “Professional” /capture D:
E:\install.wim “Windows 7 Professional” “upraveny image Windows7 Professional
- Roman Černovský
Další díly seriálu:Nasazujeme Windows 7 – díl první
V předchozím díle jsme si ukázali jak lze jednoduše pracovat s objekty v rouře. Až doposud jsme pracovali s celou kolekcí objektů (např. všechny procesy, které nám PowerShell vrátil). Nyní si ukážeme, jak filtrovat objekty dle potřeby.
Pro práci s objekty slouží následující cmdlety:
Na ty nejčastěji používané se nyní podíváme podrobněji.
Jsou určitě nejpoužívanějšími z „objektových“ cmdletů. ForEach-Object přijme všechny objekty z roury a provede nad nimi danou operaci. Where-Object přijme také všechny objekty z roury, ale k dalšímu zpracování pošle pouze ty, které splňují danou podmínku. Čili:
Zpracuje z WMI všechny logické disky a vypíše jejich jméno, popis a prázdné místo v gigabytech. Pokud by nás zajímaly pouze pevné disky, mohli byste použít Where-Object pro odfiltrování nepotřebných záznamů:
Pomocí Where-Object jsme určili, že chceme pouze disky, které mají DriveType rovno tři (což lze jednoduše vyhledat v MSDN).
Pokud se vám nelíbí zobrazení výsledku, můžete použít operátor formátování (-f):
Tento cmdlet slouží k definování vlastností, které chceme předávat dále rourou. Srovnejte například následující příkazy:
Select-Object vezme z objektu uvedené vlastnosti a pošle je dále rourou. Tento cmdlet je užitečný hlavně při exportech, např. při použití Export-Clixml.
Poznámka: Možná si říkáte, proč nepoužít místo Select-Object např. Format-Table, když oba dávají stejné výsledky:
Slovo stejné bych měl dát do uvozovek. Rozdíl je v tom (zde se dopustím úmyslně zjednodušení), že Select-Object posílá rourou dál pořád objekty, kdežto Format-Table pouze zapisuje textovou informaci (!) na standardní výstup (zde konzole). Můžete si to vyzkoušet jednoduchým pokusem:
Ve druhém případě nebudou na výstupu žádná jména, protože Select-Object nemá na vstupu žádný objekt.
Často se stane, že potřebujete zjistit např. největší soubory v adresáři nebo procesy, které nejvíce zatěžují počítač. V těchto případech se hodí cmdlet Sort-Object. Některé příklady jsem uváděl v předchozím díle a proto je nyní pouze krátce připomenu:
Zde jsme seřadili procesy podle využití fyzické paměti (sestupně) a pět největších žroutů jsme vypsali.
Potřebujete statistiku vašich skriptů? Measure-Object je vhodným kandidátem:
Tento cmdlet se vám bude hodit, pokud chcete například zjistit počet souborů v adresáři podle typu:
Často se stane, že potřebujete porovnat určitý stav v čase. Nedávno jsem například řešil porovnání členství ve skupinách v AD. Jednoduše si porovnání můžete vyzkoušet následujícím způsobem:
Zde jsme si do proměnné $a uložili počáteční stav běžících procesů. Poté jsme spustili Notepad a do proměnné $b jsme uložili aktuální stav. Pomocí Compare-Object jsme oba stavy porovnali a ve výpisu je vidět rozdíl. Takovýmto jednoduchým způsobem můžete například dělat audit na vašem serveru.
Hezký skript, jehož středem je Compare-Object, je například k nalezení v článku Compare AD against snapshots od Dmitryho Sotnikova (PowerShell MVP).
Tyto dva cmdlety asi nebudete ze začátku moc používat, ale jelikož patří do skupiny s ostatními alespoň se o nich zmíním.
New-Object slouží k vytváření vlastních objektů. Pokud máte například organizační strukturu, se kterou chcete pracovat v PowerShellu, není nic jednoduššího než si pro každého člověka vytvořit objekt a poté s nimi pracovat v rouře.
Zde proměnná $companyStructure obsahuje seznam lidí ve firmě (vytvořený pomocí New-Object). Dále je již práce stejná jako se všemi dalšími objekty.
Tee-Object se používá uprostřed roury, pokud chcete „uschovat“ aktuální stav objektů a zároveň je poslat do další roury.
Na výstupu je pouze pět objektů, ale v souboru psid.txt jsou všechny objekty řazené podle Id.
V minulém díle jsem v posledním příkladu slíbil, že se dnes podíváme na aliasy. Alias můžeme chápat jako „zkratku“ při zápisu příkazů. Například
můžeme pomocí aliasu přepsat jako
Pokud jste v PowerShellu někdy zkusili příkaz dir, použili jste vlastně cmdlet Get-ChildItem. Seznam všech dostupných aliasů, můžete vypsat pomocí cmdletu Get-Alias.
Pokud chcete použít opačnou cestu, tedy zjistit všechny aliasy pro daný cmdlet, můžete použít následující příkaz. Ukážeme si v něm aliasy pro cmdlety, které jsme probírali v předchozí kapitole.
Vypíšeme všehny aliasy a pomocí Where-Object vyfiltrujeme pouze ty, které splňují naše podmínky. Výsledky pak pomocí Format-Table přehledně vypíšeme. Předchozí příklad můžeme přepsat pomocí aliasů následovně:
WTH? Zde jsem se úmyslně vrhl do absolutních obskurností. Takový zápis byste asi nikde vidět neměli. Chtěl jsem ukázat nebezpečí aliasů (a dalších „zkracovačů“). Pokud to přeženete, těžko se ve výsledku vyznáte. Na aliasy existují rozporuplné názory – někdo je nepoužívá vůbec, někdo částečně a někdo se v nich vyžívá. Zde bych asi doporučil obecně uznávané pravidlo. Ve skriptech používejte celé jméno, v konzoli se aliasům nebraňte (ale samozřejmě platí – používejte to, co nejvíce vyhovuje vám).
Další díly seriálu:Seriál: Windows Powershell – PS pro programátory (část 6.)Seriál: Windows Powershell - souborový systém a registry (část 5.)Seriál: Windows Powershell – dolujeme data aneb jak na WMI (část 4.)Seriál: Windows Powershell – objekty a roury (část 2.)Seriál: Windows Powershell – úvod (část 1.)
Autor článku: Miroslav Knotek
Small Business Server je komplexní serverové řešení pro malé společnosti, které si i u nás během řady let své existence našlo cestu do mnoha firem a organizací. Aktuálně je na trhu verze SBS 2008 a v tomto článku si popíšeme, jakých 10 hlavních novinek přináší ve srovnání s verzí předchozí.
SBS 2008 je postaven na aktuálně nejnovějších verzích všech integrovaných technologií:
SBS 2008 je nabízen výhradně v 64bitové verzi. Důvodem je možnost maximálního využití hardwarových možností dnešních serverů a také podpora běhu 64bitových aplikací jako je např. Microsoft Exchange Server 2007.
Výjimkou je druhý Windows Server 2008 Server v rámci Premium edice. U něj je možné zvolit, zda systém bude 32bitový nebo 64bitový.
Vylepšení v oblasti zabezpečení je celá řada, proto jen v bodech popíšeme ta nejdůležitější:
Vylepšené webové rozhraní „Vzdálené webové pracoviště” umožňuje bezpečný a jednotný přístup odkudkoli k pracovnímu desktopu v kanceláři nebo ke službám SharePoint, Outlook Web Access atd. bez nutnosti dalšího ověřování.
Příkladem dalšího rozvoje směrem k vyšší produktivitě je také těsnější integrace se službami SharePoint nebo podpora nových Windows Mobile zařízení.
Obrázek 1 Vzdálené webové pracoviště
SBS 2008 obsahuje inovované správcovské rozhraní, které mimo jiné umožňuje monitorování nejen samotného serveru, ale i jednotlivých stanic zařazených do domény SBS.
Nová konzola nabízí také mnoho nových průvodců, které umožňují pomocí několika málo kliků provést akce, které jsme dříve museli provádět pomocí mnohastránkového manuálního postupu. Např. přesun datového úložiště pro služby jako SharePoint nebo Exchange je dnes opravdu jednoduchou a rychlou záležitostí.
Obrázek 2 Přesun dat pomocí SBS konzoly
Instalátor SBS 2008 je nyní zjednodušen tak, že v podstatě nevyžaduje zadání žádných technických parametrů.
Dokončení konfigurace po instalaci je také maximálně ulehčeno a sada připravených průvodců Vám může pomoci například v těchto situacích:
· Vydání serverového digitálního certifikátu
· Konfigurace routeru/firewallu pro připojení k Internetu
· Pořízení internetové domény a konfigurace DNS
· Nastavení odesílání poštovních zpráv
Obrázek 3 Průvodce zakoupením Internetové domény
Zatímco u předchozí verze byla celá řada funkcí zapnutá nebo vypnutá pro všechny uživatele, SBS 2008 je mnohem flexibilnější v nastavení např. těchto oblastí:
· Nastavení přesměrování složek uživatelského profilu je možné na úrovni uživatele.
· Je možné přesně určit, jaké typy souborů budou moci uživatelé ukládat na souborový server.
· Uživatel má možnost spravovat si svá mobilní zařízení sám pomocí Outlook Web Access.
· Správce si může detailněji určit jaké reporty, s jakými informacemi o stavu sítě SBS mu budou zobrazovány nebo zasílány elektronickou poštou.
SBS 2008 podporuje klientský operační systém Windows Vista a plně využívá jeho nových funkcí pro co nejpohodlnější práci uživatele. Například si uživatel místo pamatování odkazů na Sharepoint, OWA může přidat do postranního panelu systému Windows miniaplikaci, která mu tyto služby jednoduše zpřístupní.
Obrázek 4 SBS miniaplikace pro Windows Vista
Nově s příchodem verze SBS 2008 máme možnost nakupovat CALy po jednom. Možnost nákupu v balíčcích 5 nebo 25 kusů, tak jak tomu bylo dříve, však zůstala také zachována.
Nový způsob zálohování na externí disk využívající technolologii VSS je mnohem rychlejší a umožňuje provést kompletní zálohu celého serveru v řádu minut. Důležitá je zde ale také informace, že Windows Backup již dále nepodporuje zálohování na pásková zařízení.
Výukový portál MVA začal kromě klasických technických školení, kde bylo licencování daného produktu či technologie obvykle zmíněno pouze okrajově, i školení přímo s licenční problematikou. V nedávné době přibyly následující kurzy:
Tyto nové kurzy se připojují k portfoliu již dříve uvedených kurzů s licenční tematikou:
Abych nezapomněl: na TechNet blogu jsme pro vás připravili vyhrazenou stránku s MVA kurzy, kde budeme na jednom místě sdružovat to nejzajímavější z MVA, roztříděné do jednotlivých kapitol podle produktů či oblastí.
- Kanty
Na výukovém portálu MVA jsou k dispozici dva nové kurzy, zaměřené na tematiku desktopové virtualizace. Konkrétně se dozvíte více o technologiích virtualizace desktopů VDI, aplikační virtualizace App-V, virtualizace uživatelského rozhraní UE-V a dalších:
Microsoft Desktop Virtualization
MDOP Application Virtualization Deep Dive
Zejména první kurz je více než výživný a kromě úvodních informací obsahuje samostatné moduly pro plánování, design, nasazení a správu VDI prostředí. Proto si za absolvování celého kurzu připíšete 139 bodů do svého MVA konta (druhý kurz vám přinese 47 bodů).
Čas od času vás zde na blogu informujeme o možnosti stažení e-knihy zdarma, obvykle z dílny Microsoft Press, ovšem jedná se o nabídky “jednou za čas”.
Tentokrát pro vás ovšem mám meganabídku v podobě stovek titulů s nejrůznější tématikou, které dává na svém blogu k dispozici Eric Lingman.
V odkazu naleznete e-knihy o Windows 8.1, Windows 8, Windows 7, Office 2013, Office 365, Office 2010, SharePoint 2013, Dynamics CRM, PowerShellu, Exchange Serveru, Lync 2013, System Center, Azure, Cloudu, SQL Serveru a mnoha dalších tématech.
Pokud tedy hodláte prázdninové měsíce využít ke studiu IT produktů a technologií a hledáte ten správný zdroj informací, neváhejte a blog Erica Lingmana navštivte.
Než začneme s dnešní dávkou informací, chtěl bych se zmínit o změně, která se udála ve světě PowerShellu od vydání posledního dílu tohoto seriálu. 27.října byl uvolněn PowerShell v2 pro platformy Windows XP a Windows Server 2003 a nyní je tedy nová verze PowerShellu dostupná pro všechny hlavní platformy od Microsoftu. PowerShell v2 můžete (a vřele vám to doporučuji) stahovat z http://support.microsoft.com/kb/968929 Vzhledem k této změně budu od tohoto dílu používat pro všechny příklady novou verzi. Zrovna u WMI se nám to bude velice hodit J
WMI (Windows Management Instrumentation) – technologie vynikající, leč – bohužel – částí administrátorů nenáviděná nebo (!) nepoznaná. Pro potřeby tohoto článku se spokojíme se zjednodušenou definicí, že WMI je technologie sloužící ke správě Windows systémů. Pokud byste se chtěli dozvědět víc, zkuste například mé oblíbené MSDN: http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Pro potřeby tohoto článku budu předpokládat, že znáte základní informace o WMI a že víte, co je třída, vlastnost, WQL nebo instance.
Náš hlavní kamarád pro dnešek bude gwmi – co to asi může být? Jedná se o alias - malý test, jestli si pamatujete minulý díl :)
Get-WmiObject je – dle mého názoru – základním příkazem pro práci s WMI v PowerShellu. Ve v1 byl pouze tento cmdlet. Ve v2 jsou navíc tyto cmdlety: Invoke-WmiMethod, Remove-WmiObject, Register-WmiEvent, Set-WmiInstance.
Pojďme si ukázat základní použití cmdletu Get-WmiObject. Potřebujeme například zjistit typ našeho počítače:
Jednoduché, efektivní. Pokud jste někdy pracovali s WMI ve VB Scriptu, musí vám předchozí příklad připadat jako zázrak. Ve VBS bylá práce s WMI – řekněme – trochu komplikovaná (já osobně jsem do WMI přistupoval s lehkým odporem). S PowerShellem se situace změnila. Get-WmiObject je prostě dar z nebes (možná trochu přeháním, ale vzhledem k tomu, že s WMI pracuji každý den, vím, o čem mluvím).
Při práci s WMI vás budou asi nejvíce zajímat třídy, jejichž jméno začíná na Win32. Můžeme si je vypsat tímto příkazem:
Nebudu zde vypisovat všechny vrácené třídy, zkuste si je vypsat sami. Na mém počítači jich je 476. Zajímavé jsou například (kromě již zmíněné Win32_ComputerSystem) i Win32_OperatingSystem, Win32_Product nebo Win32_QuickFixEngineering (+ dalších asi 20, které budete používat nejčastěji, ale zkuste je najít sami – každému bude vyhovovat něco jiného dle zaměření). Pojďme si ukázat ještě jeden krátký příklad a poté se podíváme na složitější konstrukce. Bude nás zajímat verze operačního systému a service pack.
Jeden z prvních parametrů, který určitě využijete je –computername. Již v PowerShellu v1 bylo možné je připojit na vzdálený počítač a zjistit informace z WMI. Stačilo použít právě tento parametr. Pokud si například chcete udělat inventuru instalovaný service packů na vaší síti, stačí použít následující příklad:
Daleko efektivnější než psát jména počítačů do konzole bude zřejmě čtení z textového souboru, takže náš příklad upravíme následovně:
Při čtení některé z objemnějších tříd v WMI je lepší využít některý z následujcích parametrů: Filter nebo Query. Důvody jsou dva – rychlost zpracování a objem přenášených dat (ve spojení s parametrem ComputerName). Ukážeme si tři různé přístupy k získání požadovaných informací a povíme si o jejich výhodách a nevýhodách. Úkolem bude zjistit, jestli máme na počítači nainstalován produkt PowerGUI (mimochodem vynikající, volně dostupný editor na PowerShell).
Pro zjištění instalovaných programů použijeme třídu Win32_Product. Prvním vaším nápadem bude možná útok „hrubou silou“ – gwmi Win32_Product – v záplavě ujíždějících obrazovek si poté zpětně najdete (nebo nenajdete) požadovanou informaci. Toto je samozřejmě cesta, ale pro naše potřeby ji budeme považovat za nevhodnou (i když někdy je tento styl to nejrychlejší, co v praxi máte).
Jako další by vás mohlo napadnout použít filtrování objektů z minulého dílu a použít Where-Object.
V tomto případě by se nám měl vrátit záznam pouze pro zmiňované PowerGUI. Tato metoda není špatná, ale má jednu vadu. PowerShell vznese dotaz do WMI, dostane zpět všechna data z třídy Win32_Product a poté je pomocí cmdletu Where-Object filtruje na základě našeho požadavku. Problém máme právě s oním slůvkem „všechno“. Objekty opravdu filtrujeme až na úrovni PowerShellu, což není úplně efektivní. Lepší je, pokud filtrujeme data přímo na úrovni WMI (čímž zrychlujeme provádění dotazu). Zpátky se nám pak vrátí pouze data splňující zadanou podmínku. Což v případě přístupu na vzdálený počítač snižuje zatížení sítě. Použijeme tedy parametr Filter.
Nyní jsme přenesli filtrování dovnitř WMI a zpět se nám vrací pouze data spňující podmínku uvnitř filtru. Zde již potřebujeme alespoň základní znalosti WQL (http://msdn.microsoft.com/en-us/library/aa394606(VS.85).aspx). Pokud chceme mít úplnou kontrolu nad filtrováním, můžeme použít parametr Query a příklad přepsat následujícím způsobem.
Nyní jsme použili kompletní dotaz pomocí WQL. Uvědomte si, že vše, co se nám vrací je opět objekt a proto můžeme použít například následující konstrukci:
Pokud se chcete podívat na srovnání rychlosti zmiňovaných přístupů, podívejte se například na http://powershell-cz.blogspot.com/2009/08/ziskavani-informaci-z-wmi.html
Osobně používám Get-WmiObject velmi často, a většinou používám buď první (hrubá síla) nebo poslední (Query) přístup. Při použití obou přístupů většinou ukládám vrácené objekty do proměnné, se kterou dále pracuji.
V PowerShellu v2 se objevila (mimojiné) možnost spouštět cmdlety na pozadí. Toto je obrovská výhoda při spouštění příkazů, které trvají dlouhou dobu. Můžete si běh příkazu přepnout do pozadí a dále pracovat v konzoli bez jejího blokování běžícím příkazem. Pokud budeme chtít poslední příkaz vylepšit, použijeme tedy
Dotaz do WMI se přesune na pozadí a okamžitě se objeví příkazový řádek. Můžete pracovat dále a za chvíli zjistit stav běžícího dotazu pomocí cmdletu Get-Job.
Je vidět, že job nám ještě stále běží. Pokud skončí, uvidíte následující výsledek:
State je nyní Completed a proto si můžeme zobrazit výsledek
Receive-Job přináší jedno nebezpečí. V případě, že jej použijete, jak bylo naznačeno, data obdržíte zpět, ale pokud si je neuložíte, znovu už je nezískáte. Zkuste zavolat příkaz znovu a uvidíte. Máte dvě možnosti: 1) uložit si výstup cmdletu Receive-Job do proměnné nebo 2) zavolat Receive-Job s parametrem –Keep.
Závěrem jedna malá odbočka k testovanému PowerGUI. Pokud se chcete podívat, jak přistupovat do WMI přes PowerGUI, stáhněte si tento produkt z www.powergui.org a prozkoumejte větev WMI Browser. Vynikajícím zdrojem pro průzkum WMI z PowerShellu je také WMI Explorer on /\/\o\/\/a.
Dnes jsme se lehce podívali na jednu novinku v PowerShellu v2 – joby. Vzhledem k tomu, že verze 2 je nyní standard budu ji v dalších dílech využívat vice. Po plánovaném posledním díle se zaměříme na novinky, které nám – administrátorům – výrazně ulehčují nebo zrychllují práci.
Další díly seriálu:Seriál: Windows Powershell – PS pro programátory (část 6.)Seriál: Windows Powershell - souborový systém a registry (část 5.)Seriál: Windows Powershell – roury a aliasy (část 3.)Seriál: Windows Powershell – objekty a roury (část 2.)Seriál: Windows Powershell – úvod (část 1.)
Tento měsíc začalo roční odpočítávání do konce technické podpory pro Windows Server 2003. Pokud vás v té souvislosti zajímá, jak co nejelegantněji přejít z WS2003 (případně 2008) na Windows Server 2012 R2 či rovnou do cloudu, na této online akci se dozvíte vše potřebné.
Akce s názvem Migrating Legacy Windows Server to 2012 R2 and Microsoft Azure se koná 24.7.2014 od 18:00, registrovat se můžete na portálu MVA.
V rámci kurzu se dozvíte, jaké nástroje máte k dispozici pro provedení migrace a jak migrovat klíčové služby systému pokud možno co nejefektivněji a s minimálními výpadky. Podíváte se i na možnost nasazení Windows Serveru 2012 R2 jako virtuálního stroje ve službě Microsoft Azure a využití možností hybridního cloudu.
Akce je rozdělena do následujících kapitol:
Microsoft Exchange Server 2010 obsahuje širokou škálu antispamových funkcí. Správným nastavením těchto technologií organizace všech velikostí získávají velmi mocný nástroj v boji s nevyžádanou poštou, což se odráží ve vyšší produktivitě práce uživatelů elektronické pošty.
Ochrana proti nevyžádané poště je rozdělena podle způsobu fungování do jednotlivých, tzv. antispam agentů. Každý agent má své vlastní unikátní nastavení, každý antispamový agent může být také bez ohledu na stav ostatních agentů vypnut či naopak zapnut. Antispamoví agenti jsou ve výchozím nastavení automaticky instalováni pouze v rámci volitelné role Edge. Pokud v Exchange organizaci tato role chybí, je možné a podporované doinstalování agentů na serveru v roli Hub Transport pomocí následujícího postupu:
Tento způsob ochrany je založen na důvěryhodnosti IP adresy serveru, který elektronickou poštu odesílá. Nastavení se skládá z následujících kroků:
V případě, že před Exchange serverem s instalovaným Connection filtering nebo Sender ID agentem existují další interní SMTP servery, je potřeba IP adresy těchto serverů uvést v nastavení:
Konfigurace interních SMTP serverů
Na Internetu existuje celá řada placených i neplacených služeb, které vedou evidenci důvěryhodných či naopak rizikových IP adres z hlediska rozesílání spamu. Tuto službu může náš Exchange Server dotazovat pro ověření IP adresy příchozího SMTP připojení. Je doporučeno vybrat 2-3 poskytovatele s vysokou reputací a garantovaným SLA. Pokud počet dotazů nepřesáhne 300 000 dotazů denně, je možné pro úvodní nastavení použít například široce využívaný RBL zen.spamhaus.org.
Vlastní nastavení pak provedeme:
Nastavení RBL
Pro snížení rizika zablokování pošty v případě, že se například obchodní partner ocitne se svým poštovním serverem na některém z RBL, je doporučeno IP adresy SMTP serverů klíčových partnerů přidat do IP allow listu dle následujícího návodu:
Konfigurace IP Allow List
Tato kontrola IP adres má dva zdroje dat:
Můžeme nastavit jak hodně restriktivně se má tato ochrana chovat a na jak dlouho zablokovat IP adresu se špatnou reputací. Protože například freemaily mívají běžně vysoké průměrné SCL, doporučuji nastavit tento typ ochrany ze začátku málo restriktivně a blokovat IP třeba jen na 4h. Pokud je vše v pořádku, můžete zkusit postupné zpřísnění nastavení.
Nastavení Sender Reputation
Tato ochrana je založena na testování e-mailové adresy odesílatele uvedené v hlavičce zprávy. Pokud chci globálně zakázat příjem zpráv z konkrétních e-mailových adres či celých domén, mohu je uvést zde:
Minimálně je doporučeno filtrovat zprávy, které nemají uvedenou adresu odesílatele vůbec.
Konfigurace Sender Filteringu
Tato ochrana je založena na testování e-mailové adresy příjemce uvedené v hlavičce zprávy. Pokud je požadováno zakázat příjem zpráv z Internetu pro konkrétní e-mailové adresy interních uživatelů, mohu je uvést zde:
Velmi důležitou volbou je zde “Block messages sent to recipients not listed in the Global Address List”. Rozesílatelé spamu se totiž často pokouší posílat poštu na sice existující doménu, ale neexistující e-mailové adresy. Exchange server samozřejmě takovouto zprávu nedoručí, ale přesto je jejím zpracováním zbytečně zatěžován včetně zodpovědnosti za odeslání NDR.
Řešením je kontrola existujících e-mailových adres ještě před vlastním přijetím zprávy. Tuto volbu tedy rozhodně nastavíme.
Blokování zpráv na neexistující adresy
Sender ID filtering kontroluje odchozí IP adresu SMTP serveru oproti seznamu schválených IP adres pro odesílání v doméně odesílatele. Tyto adresy jsou volitelně zveřejněny v DNS pomocí tzv. Sender ID TXT záznamu.
Pokud se zjistí, že e-mail je odeslán z neautorizované IP adresy, jedná se s vysokou pravděpodobností o nevyžádanou poštu a mohu s ní tak provést dvě akce:
Nastavení reakce na Sender ID kontrolu
Filtrování dle vlastního obsahu zprávy je velmi důležitou součástí ochrany proti nevyžádané poště. Pokročilý algoritmus se snaží ohodnotit na základě rozpoznaných charakteristických znaků nevyžádané pošty nebo známých spamových kampaní číslem SCL (Spam Confidence Level) pravděpodobnost toho, zda se jedná o korektní e-mailovou zprávu či naopak spam. SCL = 0 znamená korektní zprávu, SCL = 9 naopak značí v podstatě 100% pravděpodobnost, že se jedná o zprávu nevyžádanou. Správce pak pro jednotlivé úrovně SCL určuje akci, která se má provést. Na výběr je z následujících možností:
Dle praktických zkušeností je pro většinu firem nejvýhodnější následující seznam akcí, které uvádím včetně doporučených úrovní SCL:
Karanténu je doporučeno nepoužívat, pokud to není nezbytně nutné. Používání karantény totiž značně zatěžuje správce systému údržbou karanténní schránky, kterou je nutné pravidelně kontrolovat a také čistit.
První dvě akce nastavíme v EMC: Organization Configuration -> Hub transport -> Anti-spam -> Content Filtering.
Reakce filtrování obsahu dle SCL
SCL pro doručování do složky Nevyžádaná pošta se pak nastavuje pomocí EMS příkazem: Set-OrganizationConfig -SCLJunkThreshold 4
Pomocí nastavení povolených slov je možné dramaticky snížit tzv. false-positive (chybné zablokování korektní zprávy). Každá organizace by se měla zamyslet s ohledem na její předmět podnikání a vydefinovat si často používaná povolená slova. Pro firmu prodávající razítka to může být: razítko, razítka, objednávka atp.
Pokud je ve zprávě nalezené povolené slovo, SCL je automaticky nastaveno na hodnotu 0. Naopak pokud zpráva obsahuje blokované slovo, SCL bude stanoveno na úrovni 9.
Vše nastavíme v EMC: Organization Configuration -> Hub transport -> Antispam -> Content Filtering -> Custom Words
Určení povolených slov
V případě potřeby mohu také nastavit seznam příjemců pošty, pro které se bude filtrování obsahu zcela ignorovat.
Výjimky pro filtrování obsahu
Zajímavou možností je také nastavení vlastního textu pro NDR, který se posílá odesílateli při zamítnutí na základě obsahu.
Vlastní text nastavíme pomocí EMS příkazem: Set-ContentFilterConfig -RejectionResponse "Zprava byla vyhodnocena diky svemu obsahu jako spam"
V předcházejících kapitolkách jsme popsali základní nastavení antispamu, které je nutné provést víceméně vždy. V závěrečné části se zaměříme na rozšiřující nastavení, která nám pomohou využít všechny výhody Exchange 2010 antispamu opravdu na maximum.
Pokud má firma k dispozici pro své uživatele Exchange Enterprise CAL nebo Forefront Protection 2010 for Exchange Server, může využívat tzv. Premium Antispam, což zahrnuje následující výhody:
Jak premium antispam zapnout? V EMC najdeme v sekci Server Configuration -> Hub transport -> ServerName příkaz kontextového menu: Enable Anti-spam Updates. Dále nás již vede průvodce viz obrázek.
Aktivace Premium antispamu
Uživatel rozhraní Outlook Web Acces či Microsoft Office Outlook má možnost vytvořit si seznamy důvěryhodných odesílatelů (Safe Senders). Klient pak zprávy z těchto adres uživateli doručí vždy přímo do Doručené pošty. Jako uživatel tak mám možnost razantně ovlivňovat, jaké zprávy dojdou do Doručené pošty a jaké ne. Důležité je také vysvětlit, že bezpeční odesílatelé Uživatele A nejsou bezpečnými odesílateli pro uživatele B.
Na rozdíl od předchozí verze, v Exchange Server 2010 dochází automaticky pomocí Mailbox Assistant službě k publikování těchto seznamů z uživatelských schránek do Active Directory a následně tedy i do Exchange organizace.
V některých případech je požadováno nastavit jiné hranice SCL pro určené schránky. Nejen, že to je možné, ale dokonce můžeme pro konkrétního uživatele i jednotlivé typy filtrování zapnout/vypnout. Nastavení se provádí výhradně pomocí EMS. Uvedeme si 2 příklady:
Pokud chci vynechat z filtrování obsahu konkrétní e-mailové adresy odesílatele či celé domény, mohu toto nastavit v EMS pomocí příkazů
• Set-contentfilterconfig -BypassedSenderDomains microsoft.com • Set-contentfilterconfig -BypassedSenders knotek@kpcs.cz
- Martin Pavlis
Další díl seriálu: Exchange Server 2010 seriál – Instalace (část I.) Exchange Server 2010 seriál - Založení databází pro poštovní schránky a jejich konfigurace (část II.) Exchange Server 2010 seriál - Doménová jména a práce s nimi (část III.)Exchange Server 2010 seriál - Nastavení odesílání a přijímání poštovních zpráv (část IV.)
Následující postup popisuje přípravu bootovatelné USB klíčenky, která umožňuje instalaci Windows Vista (Windows 7) bez nutnosti použití instalačního DVD. Instalace pomocí USB klíčenky je (pokud počítač podporuje boot z USB klíčenky za použití USB 2.0) nesrovnatelně rychlejší než instalace z DVD.
Budete potřebovat USB klíčenku o kapacitě minimálně 4 GB (čím vyšší přenosovou rychlostí klíčenka disponuje, tím lépe) a dále instalační DVD Windows Vista, případně Windows 7.
Postup přípravy USB klíčenky je následující:
- Tomáš Kantůrek (Microsoft)
Aplikace zobrazuje informace z portálu Potraviny na pranýři a z WWW stránek Státní zemědělské a potravinářské inspekce (SZPI), které jsou určeny všem spotřebitelům nakupujícím potraviny v České republice.
Je zde rovněž možnost jednoduše vyplnit a odeslat podnět ke kontrole SZPI, na základě něhož může být zahájena kontrola u prodejce potravin. Místně příslušný inspektorát pro podání podnětu je určen dle aktuální polohy, samozřejmostí je rovněž možnost přiložit fotografii.
Součásti aplikace:
Některé funkce aplikace vyžadují pro svůj běh zjišťování polohy zařízení (GPS). Na základě udané polohy jsou zobrazena data pro příslušný region. Aplikace dále umožňuje při podání podnětu ke kontrole volitelně zadat kontaktní informace uživatele, které jsou předány Státní zemědělské a potravinářské inspekci za účelem řešení podnětu.
Aplikace je k dispozici:
Backup a Disaster Recovery jsou jedny z nejdůležitějších oblastí k zajištění tzv. Business Continuity. Na tyto klíčové potřeby IT samozřejmě reagují služby cloud prostředí Microsoft Azure. Služby Azure Backup už zde byly několikrát představeny a ještě určitě budou, protože jak víme, Microsoft Azure je jednou z nejrychleji se rozvíjejících platforem společnosti Microsoft.
Nyní se ale jedná o další významný posun ve službě Azure Site Recovery, která nejprve poskytovala řízení Disaster Recovery mezi datovými centry, která mezi sebou využívají Hyper-V repliku. Nedávno došlo k zásadnímu rozšíření a nyní můžeme replikovat své vlastní virtuální servery přímo do prostředí Azure. O této funkcionalitě psal kolega zde. Pokud ovšem sledujete trendy v produkci Microsoftu, jistě vám neuniklo, že aktuálním tématem je také Cloud Hybridní. Tedy prostředí, kde jsou IT zdroje společností rozmístěny nejen ve vlastních datových centrech (on-premise), ale částečně u lokálních poskytovatelů služeb (Service Providers) a v Microsoft Azure. Ovšem nejen to. Jsou také provozovány na různých platformách. Microsoft System Center dokáže celé takovéto prostředí efektivně řídit a spravovat. Microsoft Azure nyní poskytoval tyto služby primárně pro platformu Hyper-V s využitím repliky.
Microsoft nyní představilakvizici se společností InMage a jejich řešením InMage Scout. Zároveň byla tato technologie zařazena do služeb Azure Site Recovery a můžeme ji nyní využívat jako službu.
Toto řešení posouvá možnosti Azure Site Recovery o významný kus dál. Nyní bude možné replikovat přímo do prostředí Microsoft Azure nejen virtuální, ale také fyzické servery při zachování aplikační konzistence dat (u platformy Microsoft podpora VSS). U fyzických serverů jsou podporovány kromě Microsoftu také systémy Linux. Podporovaná virtualizační platforma je Hyper-V, VMware a Xen Server.
Pro provoz služby bude nutné mít aktivní Azure předplatné, službu Azure Site Recovery cloud service a licenci pro každý virtuální nebo fyzický server. Licence bude dostupná v Microsoft Enterprise Agreement od 1.srpna 2014. Do tohoto data je možné službu testovat jako trial.
Službu je možné aktivovat přímo v Azure portálu v části Recovery Services, pokud vstoupíte do konfigurace vaší cloud služby. V této části naleznete novou položku s názvem „Between two on-premises VMware sites“. Po výběru je možné stáhnout InMage Scout. Detailům a konfigurace této nové služby se budeme ještě věnovat.
S touto novou službou se jedná o skutečně velmi zajímavé možnosti v oblasti Business Continuity a Disaster Recovery.
Jan Matějka, MVPwww.mainstream.cz
Mobilní aplikace "TESCO Potraviny online" Vám přináší jedinečnou možnost nakoupit přímo z Vašeho tabletu! Nakupte odkudkoliv, bez front a s dovážkou pohodlně až domů! Jednoduše si vyberte zboží z naší široké nabídky, vložte do košíku a zvolte čas doručení.
Těšte se na další funkce, které Vám přineseme zanedlouho.
Služba dovozu potravin je dostupná v určitých lokalitách. Ověřit dostupnost ve Vaší lokalitě můžete zde:www.itesco.cz/potraviny-on-line-overeni-psc.html
Aplikace je k dispozici zdarma, pro Windows 8/8.1 (x86, x64 i ARM) můžete stahovat na Windows Store, pro Windows Phone 8/8.1 je k dispozici na Windows Phone Store.
Kanty> Onehdy za mnou s vyčítavým výrazem ve tváři přišla moje žena, třímajíc v ruce telefon. Vyčítavý výraz byl způsoben tím, že při její oblíbené hře jí na telefonu vyskočila neznámá hláška v angličtině, a neznámé hlášky v angličtině žena bytostně nesnáší. Očekává, že takovéto věci budu řešit já a už pouhý fakt, že mě nenapadlo, že by jí na telefonu mohla vyskočit neznámá hláška v angličtině, a že jsem celou věc neřešil proaktivně, byl důvodem vyčítavého výrazu.
Protože vyčítavý výraz na tváři mé ženy mívá obvykle neblahé následky v podobě studených večeří a podobných nepříjemností, provinile jsem chopil telefon s pevným úmyslem vyřešit vše co nejrychleji, v klidu a diskrétně. Ovšem už letmý pohled na uvedenou hlášku mě přepnul z módu provinilý manžel na vlnu zvídavý evangelista. Ta hláška totiž byla zajímavá a pro běžného uživatele skutečně matoucí. A abych zdokumentoval celý proces, který následoval, nainstaloval jsem si hru i na svůj telefon a dělal screenshoty.
Takže androidí virus ani antivirus na Windows Phone se nakonec nekonal Ale musím férově uznat, že celý proces, reklamním banerem počínaje, přes mobilní webovou stránku a výzvou k zaplacení pomocí SMS konče je opravdu dobře udělaný a sociální inženýrství zvládá na jedničku. Věřím, že ne-ajťák by se na to chytil, takže nezbývá než doporučit to, co vždy: pořádně číst, neklikat unáhleně a když si s něčím nevím rady, zajít za svým správcem sítě, který to rozpíchne za mě.
Pohodový víkend bez zavirovaných telefonů a dalších zařízení přejí
- Kanty, Danča a Honza
Lucie Seifertová a Lenka Eckertová Vás i Vaše děti velmi vtipnou formou provedou nebezpečími a úskalími internetu. Jedná se o unikátní internetovou aplikaci, která vychází ze stejnojmenné knihy Hustej Internet.
Zjistíte, že Hustej Internet je opravdu hustej!
Aplikace je k dispozici zdarma, pro Windows 8/8.1 (x86, x64 i ARM) můžete stahovat na Windows Store.
První část desetidílného seriálu na téma Exchange Serveru 2010 vám přináší popis instalace a konfigurace nového Exchange serveru. V dalších devíti dílech se posléze dozvíte vše o návazných krocích vedoucích k úspěšnému nasazení Exchange do produkčního prostředí.
Microsoft Exchange Server 2010 je hned po své instalaci téměř připraven na nasazení do produkčního prostředí. Nicméně i tak je potřeba několika dalších konfiguračních zásahů ze strany administr��tora, aby prostředí Exchange splňovalo naše představy o kvalitním poštovním serveru, který pomáhá zvyšovat produktivitu jeho uživatelů. Cílem tohoto článku je popsat konfigurační kroky doporučené pro základní nastavení Exchange Server 2010. Většina kroků popsaných dále se dá s úspěchem použít na jakékoli Exchange instalaci, v jakékoli firmě – nezáleží tedy na tom kolika Exchange servery disponujete, doporučení jsou univerzální. Své si v dokumentu tedy jistě najde nejen správce Exchange v malé firmě, ale také administrátor spravující vysoce dostupné prostředí. Pro toho, kdo se zajímá o nastavení vysoké dostupnosti je pro tyto účely v dokumentu speciální část, které se právě této problematice věnuje.
Obsah tohoto seriálu čerpá z dokumentu, který pro společnost Microsoft napsali externí autoři - Microsoft MVP – Martin Pavlis a Miroslav Knotek. Na tento dokument ve formátu PDF se můžete těšit na samý závěr, kdy si jej ze stránek TechnetBlogu CZ/SK budete moci stáhnout.
Instalace Exchange Server 2010 je poměrně jednoduchá a její popis není součástí tohoto dokumentu. Nicméně na internetových stánkách Microsoftu existuje celá řada velmi mocných pomocníků. Nejedná se pouze o nápovědu Exchange jako v minulosti, ale také o velmi kvalitní interaktivní nástroje, které vás celým krok po kroku provedou procesem instalace Exchange do vašeho prostředí.
Po instalaci Exchange serveru 2010 není server zalicencován. Toto slouží k využití instalace např. na zkušební/testovací server. Zkušební verze vyprší 120 dnů od data instalace. Takovýto server je vždy v edici Standard a nelze u něj požadovat podporu služeb společnosti Microsoft. Máte-li v Exchange organizaci servery, které nemají vložen Product Key, vždy při spuštění Exchange Management konzoly vám bude zobrazen seznam všech Exchange 2010 serverů bez licence a počet dní, které zbývají do vypršení zkušební verze. Pokud zkušební lhůta již vypršela, zobrazuje se varování pro každý takový server.
Obrázek 1: Seznam nezalicencovaných serverů
Vložení Product Key provedeme pomocí následujícího postupu:
Obrázek 2: Vložení Product Key
Po dokončení průvodce je nutné restartovat službu Microsoft Exchange Information Store. V závislosti na Product Key, který jste zadali, bude provedena změna edice serveru buď na Standard Edition, nebo na Enterprise Edition a jsou aktualizována veškerá potřebná nastavení.
V dalším dílu se můžete těšit na nastavení a konfiguraci databází.
Pro všechny zájemce o technologii Big Data vydal Microsoft zdarma knihu, a to hned ve třech různých formátech – PDF, ePUB a Mobi. Na 130 stranách je zde představena služba Azure HDInsight. HDInsight je implementace frameworku Apache Hadoop v rámci Windows Azure, který slouží ke správě, analýze a reportování nad „Big Data“.
V rámci knihy je vysvětleno, co to jsou tzv. „Big Data“, jak je v rámci Vaší organizace využít a jak s nimi pomocí HDInsight pracovat.
Stahovat můžete v některém z následujících formátů:
- Marek Chmel, MVP
Dnes byla na blogu oznámena změna názvu populárního cloudového úložiště SkyDrive, které bude nově k dispozici jako OneDrive. Změna se týká i firemní varianty SkyDrive Pro, jejíž nový název bude OneDrive for Business.
Noví uživatelé si budou zřizovat účty již na stránce www.onedrive.com, stávající uživatelé SkyDrive budou automaticky převedeni pod novou službu, bez ztráty dat či specifických migračních kroků.
Pro podrobnější informace se podívejte na blog OneDrive.
Dnes se podíváme na dva krátké tipy, které se vám mohou hodit v každodenní praxi. Upřímně řečeno – až do minulého týdne jsem netušil, jak může být první z nich tolik neznámý. Ale po jeho použití jsem uvedl v úžas několik opravdu chytrých lidí a proto se o něj s vámi také podělím. Předpokládám, že skalní fandové PowerShellu jej znají. Pokud mezi ně patříte, zkuste tento tip poslat dál. Třeba budete překvapeni, kolik lidí jej nezná.
Určitě to znáte – čas od času je potřeba převádět v IT světě mezi kB, MB, GB případně dále. Nejhorším způsobem výpočtu je čisté násobení/dělení tisícem. To už snad dnes nikdo nedělá a většina lidí dělí s konstantou 1024. Já při každém takovém počítání startuji PowerShell a používám jeho interní jednotky. Již od v1 je možné počítat s kB, MB a GB. V dalších verzích poté byly přidány ještě TB a PB.
Oblíbený příklad Jeffreyho Snovera (tvůrce PowerShellu) je na různých prezentacích toto:
Standardními způsoby by vám výpočet trval o trochu déle.
Před pár dny jsem byl svědkem hloučku IT lidí, kteří se různě dohadovali a smáli nějaké (určitě vtipné) aktivitě. Když jsem přišel blíž, zjistil jsem, že přepočítávají kB na MB. Každý měl jinou metodu, ale otevřená kalkulačka na webu byla jasným znamením, kam celé snažení směřuje. Zadáním bylo zjistit, kolik je 950000kB. Trochu nesměle jsem řekl, že jim tedy ukážu, jak bych postupoval já. Myslím, že ode mě nemohli čekat nic jiného, než že řeknu: „Spusť PowerShell.“ Po mém diktování zadal jeden z nich do okna formulku, a když se ukázal výsledek, byl jsem sám překvapen, jak všichni zareagovali. Žádný z nich tyto konstanty v PowerShellu neznal. Musím říct, že takhle jednoduchým trikem jsem již dlouho nikoho „nedostal“
Bez nějakých složitostí mátu tu nejlepší IT kalkulačku na každém svém serveru. Jedno z dalších častých použití je např. při vytváření souborů dané velikosti. Určitě znáte fsutil a jeho použití. Pokud chcete vytvořit soubor velikosti přesně 10MB, není nic jednoduššího než:
A velikost potvrdíme i přes GUI:
Dnes je moderní všude používat zkratky (já jim říkám aliasy) a jeden z nejčastějších je pro mě OGV - Out-GridView.
V poslední verzi můžete určit výstupní mód OGV a poté máte jednoduché grafické prostředí, ze kterého vám uživatelé mohou zadávat data. Naposledy jsem se s tím potkal při vytváření virtuálních počítačů ve Windows Azure. Pokud počítač vytváříte, je jedním z povinných parametrů i jméno image, ze kterého se počítač vytváří. Při standardním spuštění cmdletu Get-AzureVMImagevám obrazovkou projede množství informací tohoto typu:
Aktuálně je dostupných 228 imagů a pro vás je důležitý parametr ImageName. Proto v takovýchto případech rád přesměrovávám výstup do OGV a určuji výstupní mód. Do příkazové řádky zadám
Get-AzureVMImage | ogv -OutputMode Single | select ImageName
A v Out-GridView si vyfiltruji potřebný image.
Když poté výsledek potvrdím tlačítkem OK, zpátky do konzole se vrátí požadované jméno
Tímto způsobem můžete relativně jednoduše filtrovat z velké množiny dat pouze ta, která vás zajímají.
Pokud máte nějaký vlastní tip, budu rád když se o něj podělíte v komentářích. Přeji hodně zábavy při používání PowerShellu.
David Moravec, MVP Mainstream Technologies