• Seriál: Windows Powershell – úvod (část 1.)

    1 PowerShell

    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í.

    1.1 Instalace

    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

    1.2 První krůčky

    Po spuštění uvidíte následující modrou obrazovku – tato modrá (#012456) je dobrá.

    clip_image002

    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.

    1.3 Základní pojmy

    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.

    1.3.1 Cmdlet

    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.

    1.3.2 Jmenná konvence

    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í:

    ps_group

    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.

    1.4 Bezpečnost

    Ř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.

    PS C:\Temp\PS> ./skript.ps1

    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.

    1.5 Nápověda

    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.

    ps_list  
    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.

    ps_list3

    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.)

  • HOTMAIL.CZ - rychle registrujte emailové adresy (zatím jsou i křestní jména! :))

    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í:

    • Hotmail nabízí neomezenou velikost schránky
    • pro české uživatele migraci pošty z jiných freemail služeb (Seznam, Centrum, Gmail)
    • pro české uživatele rovněž automatickou konfiguraci pošty
    • možnost synchronizace pošty s mobilními telefony

    A pokud vás zajímá, jak vypadá Hotmail uvnitř, bude vás zajímat tenhle článek :).

    - KFL

  • Seriál Windows PowerShell: PowerShell z pohledu programátora (část 19.)

    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:

    Framework

    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:

    1. Otevřete PowerShell config. Config pro ISE se jmenuje powershell_ise.exe.config a otevřete jej příkazem notepad $pshome\powershell_ise.exe.config. Je možné, že zatím neexistuje a bude jej potřebovat vytvořit.
    2. Do configu přidejte tento záznam:
      <startup useLegacyV2RuntimeActivationPolicy="true">
          <supportedRuntime version="v4.0"/>
          <supportedRuntime version="v2.0.50727" />
      </startup>
    3. A restartujte ISE.

    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ší.

    Typy

    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.

    • číslo – reprezentované typy [int], [int64], [float], [decimal], …
    • bool – tedy hodnota ano/ne. K těmto hodnotám přisluší konstanty $true a $false.
    • řetězec – řetězce je možné zapisovat do apostrofů i do uvozovek a mohou se roztáhnout přes více řádek.
    • scriptblock – je v podstatě anonymní funkce. Zapisuje se do složených závorek. Příklad: { Write-Host toto je test } je anonymní funkce, která nic nevrací, pouze vypíše nějaký text na obrazovku.
    • hashtable – je reprezentovaná starou známou System.Collections.Hashtable.
    • pole – je pole obecných objektů, tj. System.Object[].

    Bool

    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:

    if (Get-ChildItem d:\temp) { 
      Write-Host Dir d:\temp is not empty
    }

    Řetězec

    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

    Scriptblock

    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.

    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('Write-Host (get-date)'))

    Pokud se při vytváření scriptblocků neobejdete bez uzávěrů, použijte metodu 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

    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.

    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).

    $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.

    Array

    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).

    Dynamičnost

    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ý.

    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:

    $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:

    $xml.PsObject.Properties | Where-Object {$_.Name -eq 'root'}

    Operátory

    Aritmetické

    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í:

    • (1) PowerShell inteligentně pozná, jestli již je potřeba pracovat s plovoucí čárkou, nebo ne. Proto vrací pro $a/$b typ [double] a pro $a/$a typ [int].
    • (2) Pokud použijeme operátor násobení s řetězcem na levé straně a číslem na pravé, PowerShell provede zopakování řetězce.
    • (3) PowerShell používá poměrně mocný systém konverzí. Proto zafunguje nejen výraz $a + "10", ale i 'test_' * "10". PowerShell neumí násobit dva řetězce, proto automaticky zkonvertuje druhý řetězec na číslo a provede násobení řetězce číslem.

    Logické

    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:

    -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.

    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í.

    Přiřazení

    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ání

    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.

    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.

    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")

    Řetězcové operátory

    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 bere jako pravý operand regulární výraz a vrací $true, pokud levý operand odpovídá regulárnímu výrazu. Jinak vrací $false. V prvním případě pak ještě naplní automatickou proměnnou $matches, která obsahuje groupy regulárního výrazu.
    • -like pracuje s wildcardy
    '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 nahrazuje kus textu jiným na základě regulárního výrazu
    • -split rozděluje text na základě regulárního výrazu
    • -join spojí objekty do jednoho řetězce

    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}).

    '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 "+"

    Operátory na polích (kolekcích)

    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ý:

    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:

    '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

    Deklarace

    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 -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.

    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:

    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)

    Volání

    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.

    Pipeline

    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í:

    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.

    # 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.

    • Na výstupu nejdříve vidíme zelený text z begin bloků
    • Následují modré zprávy o zpracování prvního souboru. Tyto zprávy pochází nejdříve z funkce FilterFile a hned poté z ReturnInterestingLines. Na výstup jsou pak vypsány příslušné řádky ze souboru. Tady je patrná analogie se sekvencemi v F#. Také se nejdříve zpracuje první položka a až poté následují další.
    • Na konci se nachází zprávy o end bloku.

    OOP

    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.

    Generiky

    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 = 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.

    Metody

    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.

    Scope, platnost proměnných

    V PowerShellu rozeznáváme tři rozsahy platnosti proměnných: global, script, local.

    • global označuje scope, který je přístupný pro všechny funkce/cmdlety a vždy je poněkud riskantní v něm něco měnit. Nikdy nevíme, jestli jiný kus kódu neovlivníme.
    • script je obdoba globálního, ale tentokrát už platí pro jednotlivé skripty. Je vytvořen, když běží skript. Stejné platí i pro modul a uvnitř definované funkce.
    • local se explicitně nedeklaruje. Je to ale scope, ve kterém jste právě teď. Pokud vytvoříte proměnnou, pak ji vytváříte v local scope.

    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.

    (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.

    (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.

    (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í.

    Ve skutečnosti můžeme použít cmdlet Set-Variable, který nám proměnnou nastaví v libovolném scope:
    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

    Vyhodnocování výrazů

    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:

    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í.

    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.

    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 -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.

    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:

    $ofs = ']['
    write-host "$(1; get-date; 'a','b'|%{$_*3})"

    Závěrem

    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

  • Windows 7: Nástroje pro opravu, diagnostiku a deployment

    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)

    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.

    clip_image002

    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.

    clip_image004

    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.

    clip_image006

    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ů:

    • Namontování příslušného winre.wim pomocí příkazu dism.exe,
    • pomocí dism.exe můžeme přidat doplňkové balíčky či ovladače,
    • zároveň můžeme přidat externí (oblíbené) nástroje,
    • pomocí nástroje příkazové řádky, dism.exe odmontujeme wim soubor s potvrzením změn,
    • z takto upraveného wim souboru můžeme vytvořit externí boot médim (je nutné jej přejmenovat na boot.wim) např. CDROM nebo jej integrovat do nainstalovaného operačního systému.

    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

    clip_image008

    Detailní informace o využití nástroje reagentc.exe najdete na http://technet.microsoft.com/en-us/library/dd799242(WS.10).aspx

    Tracing

    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.

    Ostatní nástroje

    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)

  • Seriál: Windows Powershell – objekty a roury (část 2.)

    První část seriálu

    Důležité vlastnosti

    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ě.

    Objekty

    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

    Length

    CompareTo(), Contains(), ToLower()

    Přístup k vlastnostem a metodám objektů

    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.

    ps1

    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.

    clip_image002

    Roura

    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ů.

    Zjištění vlastností a metod objektu

    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).

    ps5

    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.

    ps6 ¨

    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):

    ps7

    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

    ps8

     

    - 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 – úvod (část 1.)

  • Licencování Windows 8 poprvé – domácí uživatelé

    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.

    1/ Pořízení nového počítače/ notebooku/ tabletu s předinstalovaným systémem Windows 8 – licence OEM

    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:

    • OEM licence je dodávána jakou součást zařízení, nepořizuje se samostatně (kromě případu pro osobní použití viz případy níže)
    • licence je navždy svázaná se zařízením, s kterým byla dodána
    • licence není časově omezená, její platnost závisí na době používání původního hardwaru
    • v případě výměny celého hardwaru nebo výměny základní desky končí platnost licence
    • v případě výměny ostatních součástí (tj. pamětí, disku, procesoru) licence stále platí, protože výměna těchto součástí není považována za výměnu celého počítače
    • technickou podporu a veškeré záruky poskytuje výrobce hardwaru nebo instalátor systému a nemusí se jednat o neplacené služby
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s OEM licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • doklady legálnosti systému jsou nalepený COA štítek nebo nálepka Windows a nabývací doklad
    • licenční podmínky jsou popsány ve smlouvě Microsoft Software License Terms

    Downgrade – možnost používat předchozí verze systému Windows:

    • Windows 8 – není možné instalovat a používat předchozí verze
    • Windows 8 Pro – namísto zakoupené verze je možné používat Windows 7 Professional nebo Vista Business. V případě downgradu si koncový uživatel sám zajistí médium nebo mu ho pomůže zajistit prodejce (není to jeho povinností). Pro aktivaci předchozí verze je potřeba kontaktovat aktivační linku na: 800 100 074

    2/ Pořízení nového počítače/ notebooku/ tabletu s jiným operačním systémem než Windows nebo bez operačního systému – licence OEM pro osobní použití

    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í:

    • licence není časově omezená a je možné jí přenést na jiný hardware
    • technická podpora není poskytována
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s OEM licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • licenční podmínky jsou popsány ve smlouvě pro osobní použití, zde: www.windows.com/personaluselicense
    • není možné používat předchozí verze produktu (downgrade)
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad
    • není možné používat více jak 5 licencí celkem pro komerční účely

    3/ Upgrade operačního systému Windows na stávajícím zařízení – krabicová licence (FPP) , Version Upgrade

    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.

    Je možné vybírat ze dvou edic, tedy Windows 8 a Windows 8 Pro.

    Licenční podmínky krabicové licence Version Uprgade:

    • licence není časově omezená a je možné jí přenést na jiný hardware (ale pouze na hardware, který již má některou licenci Windows)
    • omezenou technickou podporu poskytuje spol. Microsoft
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s krabicovou licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • licenční podmínky jsou popsány ve smlouvě Microsoft Software License Terms
    • není možné používat předchozí verze produktu (downgrade)
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad

    4/ Upgrade operačního systému Windows 8 na Windows 8 Pro – krabicová licence (FPP) , Windows 8 Pro Pack

    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:

    • licence není časově omezená a je možné jí přenést na jiný hardware (ale pouze na hardware, který již má licenci Windows 8)
    • omezenou technickou podporu poskytuje spol. Microsoft
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s krabicovou licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • licenční podmínky jsou popsány ve smlouvě Microsoft Software License Terms
    • není možné používat předchozí verze produktu (downgrade)
    • licenci je možné přenést pouze s licencovaným počítačem
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad

    5/ Legalizace nepravého operačního systému Windows – sada GGK (Get Genuine Kit)

    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:

    • GGK je možné pořídit pro počítač, na kterém je nainstalovaná nepravá verze operačního systému Windows
    • licence je navždy svázaná se zařízením, kde je původně aktivována
    • licence není časově omezená, její platnost závisí na době používání daného hardwaru
    • v případě výměny celého hardwaru nebo výměny základní desky končí platnost licence
    • v případě výměny ostatních součástí (tj. pamětí, disku, procesoru) licence stále platí, protože výměna těchto součástí není považována za výměnu celého počítače
    • omezenou technickou podporu poskytuje spol. Microsoft
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s GGK licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad

    6/ Instalace dalšího (např. druhého) operačního systému Windows v rámci počítače, který byl původně dodán s operačním systémem (Windows OEM nebo Linux/ Macintosh,...) – licence OEM pro osobní použití

    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í.

    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í:

    • licence není časově omezená a je možné jí přenést na jiný hardware (opět za podmínky, že na novém hardwaru se bude jednat o další operační systém)
    • technická podpora není poskytována
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s OEM licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • licenční podmínky jsou popsány ve smlouvě pro osobní použití, zde: www.windows.com/personaluselicense
    • není možné používat předchozí verze produktu (downgrade)
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad
    • není možné používat více jak 5 licencí celkem pro komerční účely

    7/ sestavení vlastního počítače – licence OEM 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í.

    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í:

    • licence není časově omezená a je možné jí přenést na jiný hardware (opět na vlastně sestavovaný počítač nebo na počítač, kde se bude jednat o druhý operační systém, viz př. 6)
    • technická podpora není poskytována
    • je možné používat 32 nebo 64 bit verzi produktu (pouze jednu současně)
    • počítače s OEM licencí není možné poskytovat třetím stranám, tzn., že platí zákaz půjčování, poskytování na leasing, pronájmu nebo komerčního hostingu
    • licenční podmínky jsou popsány ve smlouvě pro osobní použití, zde: www.windows.com/personaluselicense
    • není možné používat předchozí verze produktu (downgrade)
    • doklady legálnosti systému jsou COA štítek, produktový klíč a nabývací doklad
    • není možné používat více jak 5 licencí celkem pro komerční účely

    - Petr Janovský, Microsoft

  • Nasazujeme Windows 7 - vytvoření a přizpůsobení obrazu Windows 7 (Vista) s pomocí Hyper-V - díl druhý

    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ů:

    1. Instalace Windows 7 do referenčního virtualního stroje
    2. Vytvoření snapshot po čisté instalaci Windows

      Tento krok je volitelný. Nabízí však možnost rychlého návratu v případě nepovedené úpravy referenční instalace Windows 7.

      image 
    3. Instalace aplikací
      Obsahem tohoto kroku je přizpůsobení Windows před vytvořením image, který budete dále šířit na jiné počítače. Patří sem instalace programů, aktualizací, ovladačů zařízení.

      pozn.: Pokud byste chtěli udělat změny do uživatelského prostředí, které se aplikují na všechny nově přihlášené uživatele, doporučuji tento článekobsahující rady jak přizpůsobit výchozí profil na počítači s Windows 7. Customize Default user profile in Windows 7 - http://support.microsoft.com/?id=973289. Další možností je správa uživatelského profilu pomocí zásad či předvoleb skupinových politik po instalaci počítače.

      image
    4. Zobecnění instalace Windows pro instalaci na další počítače
      před samotnou instalací na jiné počítače je třeba odstranit jednoznačné informace dané instalace. K tomu slouží známý nástroj Sysprep. Ve Windows 7 je již standardně obsažen, najdete jej v adresáři c:\windows\system32\sysprep.

      pozn. Sysprep ve výchozím stavu odstraní ovladače pro zařízení detekované procesem PnP. Pro zachování ovladačů je třeba vytvořit odpovědní soubor sysprep.xml (viz.http://technet.microsoft.com/en-us/library/cc766514(WS.10).aspx). Následně spustíte sysprep s těmito přepínači :
      c:\windows\system32\sysprep\sysprep.exe
      /oobe /generalize /unattend:c:\temp\sysprep.xml  /shutdown  

    ---------------------------------------------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:

    image 

    dále již sysprep dělá svou práci:
     
    image

    pozn: pokud vám sysprep jako mě skončil s chybou, je třeba zastavit službu Windows Media Player Network Sharing Service

    image

    1. Vypnutí virtuální stanice a připojení vhd souboru virtuálních Windows 7
      virtuální stroj s Windows 7 je již vypnutý. nástroj Sysprep to již zařídil. Teď je třeba připojit virtuální vhd harddisk a sejmout obraz. Pokud nemáte Windows 7, či Windows server 2008 R2, lze použít nástroj vhdmount http://technet.microsoft.com/en-us/evalcenter/bb738033.aspx 

      a. nejprve je třeba vyexportovat snapshot do separatniho vhd souboru

      image

      b. dále namapovat disk VHD pomocí Server management (správa serveru) a následně v Disk management zvolit Attach VHD

      pozn.: možná vás napadne i možnost namapování do adresářové struktury pomocí nástroje dism.exe, výběr je tedy široký.

      image
      image

      c. namapovaný virtuální disk (VHD soubor):

      image
    2. sejmutí WIM obrazu pomocí IMAGEX:

      image

      celá podoba příkazu pro různé edice Windows:

      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


      Právě jsme dokončili vytvoření image pro distribuci na koncové počítače. Získali jsme přizpůsobený obraz Windows 7 alespoň částečně tak jak bychom ho chtěli. V dalším pokračování se budeme věnovat různým metodám nasazení.

      poznámka: vytváření upraveného obrazu Windows 7 pro nasazení ve společnosti lze i automatizovanějšími metodami, kterým se budeme věnovat v dalších pokračováních seriálu. I když – ať již obraz vytvoříte jakkoli, na konci procesu máte obraz ve formátu wim. Po konverzi do vhd pomocí wim to vhd máte opět možnost obraz spravovat v prostředí Hyper-v a následně opět provést export do wim. Uff…možností je celá řada. Radím zvolit strategii správy obrazů až po přečtení celé serie článků.

    - Roman Černovský

    Další díly seriálu:
    Nasazujeme Windows 7 – díl první

  • Seriál: Windows Powershell – roury a aliasy (část 3.)

    Práce s objekty v rouře

    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:

    ps1

    Na ty nejčastěji používané se nyní podíváme podrobněji.

    ForEach-Object a Where-Object

    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:

    ps2

    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ů:

    ps3

    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):

    ps4

    Select-Object

    Tento cmdlet slouží k definování vlastností, které chceme předávat dále rourou. Srovnejte například následující příkazy:

    ps5

    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:

    ps6

    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:

    ps7

    Ve druhém případě nebudou na výstupu žádná jména, protože Select-Object nemá na vstupu žádný objekt.

    Sort-Object

    Č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:

    ps8

    Zde jsme seřadili procesy podle využití fyzické paměti (sestupně) a pět největších žroutů jsme vypsali.

    Measure-Object

    Potřebujete statistiku vašich skriptů? Measure-Object je vhodným kandidátem:

    ps9

    Group-Object

    Tento cmdlet se vám bude hodit, pokud chcete například zjistit počet souborů v adresáři podle typu:

    ps10

    Compare-Object

    Č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:

    ps11

    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).

    New-Object, Tee-Object

    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.

    ps12

    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.

    ps13

    Na výstupu je pouze pět objektů, ale v souboru psid.txt jsou všechny objekty řazené podle Id.

    Aliasy

    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

    ps14

    můžeme pomocí aliasu přepsat jako

    ps15

    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.

    ps16

    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.

    ps18

    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ě:

    ps19

    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).


    - 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 – objekty a roury (část 2.)
    Seriál: Windows Powershell – úvod (část 1.)

  • Novinky v SBS 2008

    Autor článku: Miroslav Knotek

    Úvod

    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í.

    1. SBS modernější

    SBS 2008 je postaven na aktuálně nejnovějších verzích všech integrovaných technologií:

    • Windows Server 2008 Standard
    • Microsoft Exchange Server 2007 Standard
    • Windows SharePoint Services 3.0
    • Windows Server Update Services 3.0
    • Microsoft Forefront Security for Exchange Server
    • SQL Server 2008 Standard for Small Business (Pouze v edici Premium)

    2. SBS výkonnější

    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ý.

    3. SBS bezpečnější

    Vylepšení v oblasti zabezpečení je celá řada, proto jen v bodech popíšeme ta nejdůležitější:

    • Windows Firewall je vždy zapnut, a to dokonce již během instalace SBS.
    • SBS 2008 obsahuje integrované antivirové řešení pro poštovní systém - Forefront for Exchange Server (licence je na 120 dní, pak je nutné její prodloužení).
    • V průběhu instalace je vytvořen nový správcovský účet a vestavěný účet administrátora je vypnut
    • POP3 konektor podporuje SSL
    • SBS je nyní podporován výhradně jako řešení s jedním síťovým rozhraním, které je připojeno do vnitřní sítě LAN. Celá LAN pak musí být chráněna dedikovaným firewallem.

    4. SBS podporující vyšší produktivitu

    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í.

    sbs1

    Obrázek 1 Vzdálené webové pracoviště

    5. SBS snadněji spravovatelný

    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í.

    sbs2

    Obrázek 2 Přesun dat pomocí SBS konzoly

    6. SBS snadno nasaditelný

    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

    sbs3

    Obrázek 3 Průvodce zakoupením Internetové domény

    7. SBS flexibilnější

    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.

    8. SBS uživatelsky přívětivější

    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í.

    sbs4

    Obrázek 4 SBS miniaplikace pro Windows Vista

    9. SBS s flexibilnějším nákupem CALů

    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.

    10. SBS s lepší ochranou dat

    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í.

  • Nové licenční kurzy na MVA

    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

  • Nové MVA kurzy: desktopová virtualizace

    MVA_LogoNa 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ů).

    - Kanty

  • Megakolekce e-knih zdarma!

    Č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.

    - Kanty

  • Powershell seriál – dolujeme data aneb jak na WMI (část 4.)

    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.

    1.1 Jak získat data z WMI

    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 :)

    ps1

    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:

    ps2

    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:

    ps3

    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.

    ps4

    1.2 Parametry cmdletu Get-WmiObject

    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:

    ps5

    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ě:

    ps6

    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.

    ps7

    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.

    ps8

    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.

    ps9

    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:

    ps10

    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.

    1.3 Parametr AsJob

    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

     ps11

    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.

     ps12

    Je vidět, že job nám ještě stále běží. Pokud skončí, uvidíte následující výsledek:

     psXC

    State je nyní Completed a proto si můžeme zobrazit výsledek

    ps13

    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.


    - 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 – roury a aliasy (část 3.)
    Seriál: Windows Powershell – objekty a roury (část 2.)
    Seriál: Windows Powershell – úvod (část 1.)

  • MVA živě: Migrating Legacy Windows Server to 2012 R2 and Microsoft Azure

    MVA_LogoTento 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:

    • Introduction to Windows Server On-Premises Migration Tools​
    • Active Directory Migration
    • Migrating Windows Server 2003 Workloads to Windows Server 2012 R2
    • Migrating WSUS to Windows Server 2012 R2
    • Migrating Clustering to Windows Server 2012 R2
    • Migrating Hyper-V VMs to Microsoft Azure

    - Kanty

  • Exchange Server 2010 seriál - Nastavení antispamových funkcí (část V.)

    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.

    Podmínky pro využití antispamových funkcí

    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:

    1. Přihlásíme se na Hub Transport server
    2. Start -> Programy -> Microsoft Exchange Server 2010 -> Exchange Management Shell (EMS)
    3. Spustíme příkaz Install-AntispamAgents.ps1
    4. Provedeme restart služby "Microsoft Exchange Transport"

    Filtrování dle připojení (Connection filtering)

    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ů:

    Konfigurace IP adres interních SMTP serverů

    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í:

    1. EMC (Exchange Management Console): Organization Configuration -> Hub Transport -> Global Settings -> Transport Settings -> Message Delivery

    clip_image002

    Konfigurace interních SMTP serverů

    Konfigurace RBL (real-time block list)

    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:

    1. V EMC: Organization Configuration -> Hub Transport -> Anti-Spam -> IP Block List Providers dle následujícího obrázku:

    clip_image004

    Nastavení RBL

    Konfigurace IP Allow List

    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:

    1. EMC: Server Configuration -> Hub transport -> ServerName -> Anti-spam -> IP Allow List

    clip_image006

    Konfigurace IP Allow List

    Služba Sender Reputation

    Tato kontrola IP adres má dva zdroje dat:

    • Pomocí MU/WSUS získáváme aktuální seznam IP a jejich reputací na základě dat ze služby Hotmail
    • Server vytváří vlastní hodnocení IP na základě průměrného SCL zpráv přijatých z této IP, sledování anomálií v rámci SMTP relace atd.

    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í.

    clip_image008

    Nastavení Sender Reputation

    Filtrování dle odesílatele (Sender filtering)

    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:

    1. EMC: Organization Configuration -> Hub transport -> Anti-spam -> Sender Filtering

    Minimálně je doporučeno filtrovat zprávy, které nemají uvedenou adresu odesílatele vůbec.

    clip_image010

    Konfigurace Sender Filteringu

    Filtrování dle příjemce (Recipient filtering)

    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:

    1. EMC: Organization Configuration -> Hub transport -> Antispam -> Recipient Filtering

    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.

    clip_image011

    Blokování zpráv na neexistující adresy

    Filtrování dle Sender ID (SenderID filtering)

    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:

    • Odmítnout (není doporučeno)
    • Smazat (není doporučeno)
    • Označit a znevýhodnit v rámci content filteringu a výsledného skóre SCL

    clip_image013

    Nastavení reakce na Sender ID kontrolu

    Filtrování dle obsahu (Content filtering)

    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í:

    • Zprávu smazat bez NDR
    • Zprávu odmítnout
    • Zprávu umístit do karantény
    • Zprávu doručit uživateli, ale do zvláštní složky „Nevyžádaná pošta”

    Nastavení akce

    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:

    • Zprávu smazat bez NDR – SCL = 9
    • Zprávu odmítnout – SCL = 7, 8
    • Zprávu doručit uživateli, ale do zvláštní složky „Nevyžádaná pošta” – SCL = 4, 5, 6

    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.

    clip_image015

    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

    Konfigurace povolených a blokovaných slov

    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

    clip_image017

    Určení povolených slov

    Specifikace výjimek pro konkrétní uživatele

    V případě potřeby mohu také nastavit seznam příjemců pošty, pro které se bude filtrování obsahu zcela ignorovat.

    clip_image019

    Výjimky pro filtrování obsahu

    Nastavení vlastního textu NDR při zamítnutí zprávy

    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"

    Vybrané tipy pro optimalizaci antispamu

    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.

    Premium Antispam

    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:

    • Denní aktualizace IMF content filteru (standardně jen 1x za 14 dní)
    • Několikrát denně IP reputation aktualizace
    • Několikrát denně aktualizace spamových kampaní

    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.

    clip_image020

    Aktivace Premium antispamu

    SafeList Aggregation

    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.

    Individuální nastavení SCL akcí pro konkrétní schránku

    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:

    • Set-mailbox id "Miroslav Knotek" –SCLRejectEnabled $false –SCLQuarantineEnabled $false –SCLDeleteEnabled $false – žádná zpráva pro Miroslava Knotka nebude ani smazána, ani odmítnuta ani předána do karantény
    • Set-mailbox id "Miroslav Knotek" –SCLRejectThreshold 5 – zprávy pro Miroslava Knotka se budou odmítat již proSCL = 5

    Whitelisting domény nebo adresy odesílatele

    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.)

  • Jak připravit Windows Vista nebo Windows 7 instalační USB klíčenku

    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í:

    • Připojte USB klíčenku do počítače s nainstalovaným operačním systémem Windows Vista (případně Windows 7).
    • Klikněte na tlačítko Start a do pole vyhledávání napište „cmd“.
    • Klikněte pravým tlačítkem na program „cmd“ a zvolte možnost „Spustit jako správce“. Otevře se příkazový řáde systému Windows s oprávněním správce.
    • V příkazové řádce napište „diskpart“ a potvrďte pomocí klávesy Enter. V příkazové řádce se dostanete do konzole programu Diskpart.
    • Pomocí příkazu „list disk“ vypište seznam všech disků aktuálně dostupných na daném počítači. Vyhledejte požadovanou USB klíčenku a u ní přiřazené číslo disku.
    • Pomocí příkazu „select disk X“ (kde X je číslo disku zjištěné v předchozím bodě) vyberte USB klíčenku.
    • Nyní klíčenku upravte pomocí následujících příkazů (každý příkaz potvrďte klávesou Enter):
      • Clean
      • Create partition primary
      • Select partition 1
      • Format fs=ntfs quick
      • Active
    • Pomocí dvojího zadání příkazu „exit“ ukončete Diskpart a následně zavřete příkazový řádek
    • Pomocí Windows Exploreru či jiného správce souborů zkopírujte kompletní obsah instalačního DVD Windows Vista (Windows 7) na USB klíčenku.
    • Pokud nyní vyberete USB klíčenku jako zaváděcí médium u nenainstalovaného počítače, spustí se standardní instalace Windows Vista (Windows 7).

    - Tomáš Kantůrek (Microsoft)
     

  • Aplikační okénko: Potraviny na pranýři

     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:

    • Novinky z portálu Potraviny na pranýři
    • Nevyhovující potraviny dle aktuální polohy
    • Tematické kontroly SZPI
    • Novinky z WWW stránek SZPI
    • Formulář pro podání podnětu ke kontrole

    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:

    - Kanty

  • Azure Site Recovery: jízda pokračuje

    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.

    image

    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, MVP
    www.mainstream.cz

  • Aplikační okénko: Tesco Potraviny online

    Tesco Potraviny onlineMobilní 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

  • Co IT-týden dal: Androidí virus na Windows Phone

    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.

    Začněme tedy ve hře. Úkolem je skládat dohromady ptáky stejných barev, což je princip hry, který už si vyzkoušel snad každý. Zajímavý je ale banner ve spodní části obrazovky, který vybízí ke stažení a vypadá, jako by pocházel přímo z telefonu (ve skutečnosti je to reklamní banner, ale to BFU nepozná). Zachoval jsem se jako zvídavý BFU a na odkaz “Download” kliknul. wp_ss_20140523_0012
    Následující hláška mě informovala, že při poslední návštěvě webové stránky byl můj telefon nakažen virem. A byl jsem nabádán ke spuštění procesu opravy stisknutím tlačítka OK. Nejsem specialista na Windows Phone, ale přece jen něco málo o tomto systému vím, takže mi došlo, že mě reklamní banner hodil na web, který je hezky designován pro mobilní přístroje a momentálně mi ukazuje klasickou zprávu z webové stránky (ostatně na to nemusím být expert, je to napsáno nahoře, že). Jako správný BFU jsem kliknul na OK. wp_ss_20140523_0003
    Další stránka, znalec jistě pozná, že jsme stále v mobilním Internet Exploreru. BFU to asi nepozná, a tak mu nezbývá, než se divit, že jeho Windows Phone je schopen chytit Android virus. Dlužno dodat, že dobrá čeština uživatele ještě více utvrdí v tom, že jde o autentickou zprávu z telefonu. Coby správný průzkumník neváhám a pokračuji volbou Zkontrolovat. wp_ss_20140523_0004
    Následuje krásná webová animace, simulující skenování telefonu včetně souborů, složek a aplikací. BFU si tiše hryže nehty a doufá v čistý výsledek testu. Odborníci vědí, že aplikace na Windows Phone běží v sandboxovaném, uzavřeném prostředí, stahovat je lze pouze ze Store a než se dostanou na Store, jsou proti virům důkladně kontrolovány. A i kdyby kontrolou prošly, díky sandboxu přístup k systému jednoduše stejně nemají. wp_ss_20140523_0006
    Po skončení “skenování” mi byla nabídnuta komplexní zpráva o tom, že můj telefon je opravdu, ale opravdu zavirován, a abych se zákeřného viru zbavil, mám stáhnout aplikaci Windowss. Jako ajťák vím, že jsem pořád na webové stránce (ale opravdu pěkný design, to se musí nechat), coby BFU se chci zbavit viru a tak klikám na “Stáhnout”. wp_ss_20140523_0008
    A tady už začíná jít do tuhého. Z Windowss se vyklubal Android Antivirus & Security, který je placený a pro další informace mám zadat své mobilní číslo. Skript na stránce je docela chytrý, číslo 123456789 odmítá jako neplatné. Zas tak chytrý ale není, 602602602 schroupnul, takže pokračujeme. wp_ss_20140523_0009
    A tady se konečně dostáváme k jádru pudla. Jsem vyzván k zaslání SMS na prémiové číslo, což by mi přidalo 99 Kč na telefonním účtu. Tak nehoráznou sumu odmítám dát a s pokusem končím. Stejně mi ale vrtá hlavou, co by vlastně bylo, kdybych tu SMSku poslal. Pořád se mi totiž nechce věřit, že by se fakticky stáhnul a nainstalovat Androidí antivir. Takže začínám zkoumat malá písmenka dole na stránce. wp_ss_20140523_0011
    A už to mám! Žádný antivirus, přátelé. Za pouhých 99 Kč dostanu nové mobilní vyzvánění! Sice jsem se celou dobu třásl strachy o svůj zavirovaný telefon, ale když už nic, tak si budu aspoň jinak zvonit, no není to paráda? wp_ss_20140524_0001

    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

  • Aplikační okénko: Hustej internet

    LogoLucie 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!

    Hustej Internet snímek obrazovky 3

    Aplikace je k dispozici zdarma, pro Windows 8/8.1 (x86, x64 i ARM) můžete stahovat na Windows Store.

    - Kanty

  • Exchange Server 2010 seriál – Instalace (část I.)

    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.

    1. Instalace Exchange Server 2010

    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í.

    2. Vložení čísla Product Key

    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.

    01_Seznam nezalicencovaných serverů Obrázek 1: Seznam nezalicencovaných serverů

    Vložení Product Key provedeme pomocí následujícího postupu:

    1. Exchange Management konzola (dále EMC): sekce Server Configuration
    2. Vybereme server, který nemá vložen Product Key (má odlišnou ikonu)
    3. Spustíme průvodce pro vložení Product Key a vložíme licenční číslo

    02_Vložení Product KeyObrá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í.


    - Martin Pavlis
     

  • E-kniha zdarma: Introducing Microsoft Azure HD Insight

     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

  • SkyDrive je mrtvé, ať žije OneDrive

    OneDrive-LogoDnes 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.

    - Kanty

  • Seriál Windows PowerShell: Krátké tipy na prázdniny (část 48.)

    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á.

    Převod mezi megy a kily

    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.

    clip_image002

    Oblíbený příklad Jeffreyho Snovera (tvůrce PowerShellu) je na různých prezentacích toto:

    clip_image004

    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“

    clip_image006

    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ž:

    clip_image008

    A velikost potvrdíme i přes GUI:

    clip_image010

    OGV

    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:

    clip_image012

    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.

    clip_image014

    Když poté výsledek potvrdím tlačítkem OK, zpátky do konzole se vrátí požadované jméno

    clip_image016

    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