pondělí, 8. února 2010

Get-PSNews |? {$_.Week –eq ‘05’}

Poznámka: S hrůzou jsem zjistil, že jsem minulý týden nastavil špatný datum publikování novinek. Zároveň to bylo dnees asi poprvé, kdy jsem to nezkontroloval hned ráno. Dvě chyby pro jeden článek je až moc.

Poslední týden nebyl tentokrát na novinky nijak bohatý. Přesto se našlo pár zajímavostí.

středa, 3. února 2010

Anketa: Jak používáte PowerShell?

Po delší době jsem zde s další anketou. Ještě se vrátím k těm předchozím. Co se týče novinek, obnovil jsem je opět v týdenním režimu, který vám zřejmě vyhovuje nejvíc. Mě osobně taky :) Zároveň jsem neopustil možnost, napsat o nějaké novince, která mne opravdu zaujala, okamžitě. Přechod na angličtinu plánuju se spuštěním nového webu.

Jaká je tedy nová otázka? Zajímalo by mě, pro jakou příležitost používáte PowerShell nejčastěji. Pokud spravujete Exchange, volba je jasná. Pracujete s SCOM, Active Directory, SharePointem, ... Nebo jste většinu času na helpdesku a PowerShell používáte pro vzdálenou správu? Či si jenom skriptujete pro radsot a ulehčujete si práci různými vychytávkami?

Nejčastější možnosti jsem dal jako možnosti v anketě a pokud nenajdete to vaše správné využití, nebojte se nechat komentář pod tímto článkem.

Druhé vydání knihy "PowerShell - Podrobný průvodce skriptováním"

Přemýšlím, jestli nejdřív hledat ikonu typu "víme první" nebo sáhnout do lednice pro nějaké dobré víno a slavit potichu.

Včera večer jsem dělal malý úklid ve svých poznámkách otagovaných jako "someday" a narazil na Napsat Patriku Malinovi, jestli chystá update knížky na v2. O knize Microsoft Windows PowerShell - Podrobný průvodce skriptováním jsem se zde již zmiňoval. Jako jediný počin svého druhu na českém trhu si určitě zaslouží pozornost. Napsal jsem panu Malinovi a dostal následující odpověď.


Pekny vecer.

Pisete jako na zavolanou :-)

... v potu tvare dopracovavam dalsi kapitolu a chystam se ji odeslat redaktorovi. Kniha o PowerShellu 2 je velmi blizko -- tedy odevzdani rukopisu urcite, protoze brzy asi umru a nic vic uz ze mne nevypadne ;-) ...

Protoze ted uz jsem i ja uveril, ze to dodelam, asi to muzete kdyz tak vypustit jako drb do sveta :-))

Zdravi PM


Tradááá - pouštím tedy drb, raduji se a doufám, že pan Malina neumře a ještě hodně toho z něj vypadne :) Bez jeho přednášek by mi bylo fakt smutno.

neděle, 31. ledna 2010

Get-PSNews |? {$_.Week –eq ‘04’}

Uplynulý týden byl opět nabitý zajímavý novinkami a také jedním velkým jubileem. Pro mne osobně se vše neslo v tónu Active Directory.

  • Můj oblíbený produkt – PowerGUI - se dočkal verze 2.0. Novinkou jsou snapshoty v administrační konzoli. Pokud vás zajímají další změny, můžete se podívat do release notes.
  • Začal jsem pracovat na dalším článku pro TechNet Flash, tentokrát na téma Active Directory. Proto se mi hodil další online meeting UKPSUG (UK PowerShell User Group), který se věnoval tématu Windows 2008 R2 AD cmdlets. Pokud již W2K8 R2 používáte, může se vám hodit Quick Reference Guide od Jonathana Medda.
  • Další témata meetingů UKPSUG jsou WMI & WQL (na ten se zvlášť těším) a Windows 7. Obojí z pohledu PowerShellu. Více na stránce Richarda Siddawaye.
  • A ještě jednou Richard – oznámil progres u jeho knihy PowerShell in Practice.
  • Další (velmi vítanou) novinkou je informace o další knize od Manning PublicationsPowerShell in Action, Second Edition. Prvních 15 kapitol je téměř hotovo a měly by být “circulated shortly”. Oproti původnímu plánu byly přidány tři nové kapitoly, takže zatím je celkem plánováno 19 kapitol a čtyři přílohy.
  • Třetí knihou v dnešním přehledu je PowerShell 2.0 TFM. E-book už je dostupný na stránkách Sapien Press. Pokud s PowerShellem začínáte, toto je dle mého názoru pro vás ta nejvhodnější kniha.
  • PowerShell Community Extensions jsou nyní ve fázi bety verze 2.0. Stahovat můžete přímo ze stránek PSCX.
  • Stejcz publikoval skript pro hledání překladu na slovnik.cz. Dost mě to potěšilo, protože jsme se o tomto skriptu před nějakou dobou bavili a já se u něho zasek :( Pokud chcete hledat překlady slov mezi angličtinou a češtinou, podívejte se na modul Translate.

Poslední příspěvek mne vedl z zamyšlení na téma “proč mám rád, když programátoři vytvářejí skripty”. Vzhledem k tomu, že mne ve škole programování nebavilo (dneska bych si kvůli tomu nejradši dal sám pár facek), doháním vše až nyní. Vím, že to je marná snha, ale čtení kódu po zkušenějším mne baví. Více v některém z dalších článků.

Doplnění: Pro samá písmenka jsem zapomněl zmínit to jubileum :( Můj oblíbený PowerScripting Podcast se dočkal epizody s pořadovým číslem 100! Gratuluji Halovi a Jonathanovi a děkuji jim za práci, kterou odvádějí. Jejich podcast byl pro mne impulsem, který mne nakopl v mém PowerShellovském bádání.

čtvrtek, 28. ledna 2010

PSRemoteRegistry modul

[EN: Autotranslation]

Jak jsem již psal v posledních Get-PSNews, Shay Levy publikoval modul PSRemoteRegistry. Než se vrhneme na popis, podívejme se, jaké možnosti pro přístup do registru (lokálně či vzdáleně) máme nyní.

  1. Lokálně přes PSDrives: Get-PSDrive -PSProvider *Registry - asi nejčastější metoda, kterou budete používat z konzole nebo ve skriptech.
  2. Vzdáleně přes např. Invoke-Command, Enter-PSSession, ...
  3. Vzdáleně či lokálně přes WMI pomocí třídy StdRegProv. Obsahuje množství zajímavých metod, pokud jste v dobách VBS chtěli prohledat vzdálený registr, byla metoda EnumKey možná vaše první volba.
  4. Vzdáleně či lokálně před .NET třídy Microsoft.Win32.Registry*

Právě čtvrtý způsob využívá popisovaný modul, který zmiňované třídy zapouzdřuje do funkcí. Stáhnout si jej můžete z MSDN, kde je zároveň popsáno, jak jej správně importovat do PowerShellu. Seznam dostupných funkcí je vypsán na stránkách modulu, sami si jej můžete vylistovat pomocí Get-Command -Module PSRemoteRegistry. V tomto článku se můžete podívat na matici funkcí a dostupných parametrů. Součástí modulu je i tématická nápověda about_RemoteRegistry_Module.

Nejprve si ukážeme práci s lokálním počítačem a na konci článku uvedu, jak se lze dotazovat vzdálených počítačů. Otestujme, jestli existuje námi požadovaná větev.

PS C:\> Test-RegKey -Key "SOFTWARE\Makovec"
False



Neexistuje, takže ji vytvoříme

PS C:\> New-RegKey -Key SOFTWARE -Name Makovec
PS C:\> Test-RegKey -Key "SOFTWARE\Makovec"
True



Výborně, nyní si vytvoříme pár testovacích hodnot

PS C:\> 1..10 | % { Set-RegString -Key SOFTWARE\Makovec -Value "RegString$_" -Data $(Get-Random) -Force }



Všimněte si parametru -Force. Pokud jej neuvedete, budete vyzváni, abyste potvrdili zápis (bezpečnostní pojistka). Nyní si můžeme hodnoty zkontrolovat.

PS C:\> Get-RegKey -Key SOFTWARE -Name Makovec
ComputerName Hive Key SubKeyCount ValueCount
------------ ---- --- ----------- ----------
NETBOOK LocalMachine SOFTWARE\Makovec 0 10

PS C:\> Get-RegKey -Key SOFTWARE -Name Makovec | Get-RegValue
ComputerName Hive Key Value Data Type
------------ ---- --- ----- ---- ----
NETBOOK LocalMachine SOFTWARE\Makovec RegString1 1249268748 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString2 1967993881 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString3 1010703330 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString4 86413294 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString5 917742177 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString6 74280723 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString7 526159413 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString8 205545931 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString9 286790375 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString10 2007859651 String



Pojďme si ukázat příklad ze života. Potřebujeme zjistit, na jakém portu komunikuje náš SMS klient na jednotlivých počítačích.

PS C:\> 'PC1','PC2','PC3','PC4' | Get-RegValue -Key SOFTWARE\Microsoft\CCM -Value httpport | ft ComputerName, Value, Data -AutoSize

ComputerName Value Data
------------ ----- ----
PC1 HttpPort 1234
PC2 HttpPort 1111
PC3 HttpPort 1234
PC4 HttpPort 1234


Vidíme, že PC2 potřebuje nutně změnu. Pokud pustíte skript přes více počítačů ve vaší síti, může se stát (a určitě se stane), že některé počítače budou nedostupné a obdržíte chybovou zprávu: Get-RegValue : Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path was not found. Pro tyto případy jsou všechny funkce z PSRemoteRegistry modulu vybaveny parametrem -Ping a pokud jej použijete dostanete jasnou zprávu, kde se stala chyba.

PS C:\> 'PC1','PC2','PC3','PC4' | Get-RegValue -Key SOFTWARE\Microsoft\CCM -Value httpport -Ping | ft ComputerName, Value, Data -AutoSize

WARNING: [PC2] doesn't respond to ping.
WARNING: [PC3] doesn't respond to ping.
ComputerName Value Data
------------ ----- ----
PC1 HttpPort 1234
PC4 HttpPort 1234


Do připravovaného článku pro TechNet Flash jsem přidal ukázku, jak použít předchozí příklad na všechny počítače ve vaší doméně. Abych nezapomněl, měli bychom po sobě uklidit.

PS C:\> Remove-RegKey -Key SOFTWARE\Makovec -Force


Musím přiznat, že PSRemoteRegistry jsem okamžitě přidal do svého profilu a za těch pár dní, co jej používám se stal nenahraditelným pomocníkem. Pokud budete někdy potřebovat přistupovat ke vzdáleným registrům, tento modul je pro vás prostě must have.

Uložení záložek z IE7

[EN: Autotranslation]

Poslední dobou se na konci každého pracovního dne probírám otevřenými záložkami v Internet Exploreru a říkám si, kdy to asi budu číst. Většinou přes den otvírám všechno, co mi přijde zajímavé (což jsou pro mne na Twitteru všechny zprávy o PowerShellu :) a pak nestíhám všechno přes den číst. Proto jsem začal používat Evernote a nepřečtené stránky si synchronizuji, abych si je přečetl večer doma. Jelikož jsem vždy ručně kopíroval všechny adresy, nebylo to zrovna pohodlné a rychlé. Rozhodl jsem se, že si tedy udělám skript, který mi všechny otevřené stránky do Evernote klienta nahraje.

Nejprve jsem si myslel, že budu každou instanci IE spouštět z PowerShellu a na konci dne prostě projdu všechny záložky. Což jsem samozřejmě zavrhl okamžitě (vzhledem k množství oken otevíraných externími aplikacemi). Začal jsem brouzdat a objevil příspěvek na Stack Overflow. Celé řešení využívalo COM Shell.Application, který jsem následně využil.

Nejprve jsem jako součást skriptu přidal i možnost exportu do Evernote. Pak jsem ale podlehl (správné :) myšlence na modularitu a pro export vytvořil novou funkci Export-Evernote. Tak můžu v rouře volat libovolný cmdlet a výsledky si číst doma.

Celá funkce tedy vypadá následovně:

function Export-IETabName {

$(
New-Object -Com 'Shell.Application').Windows() |
? {
$_.Name -eq 'Windows Internet Explorer' } |
? {
$_.LocationURL -notlike 'https://remedy*' } |
Select LocationName, LocationURL

}
# function Export-IETabName

Ze všech objektů, které vrátí metoda Windows(), vyberu instance Internet Exploreru, vyfiltruji záložky obsahující stránky, které doma číst nechci (zde Remedy) a dále posílám pouze jméno stránky a její adresu. Před odchodem, tedy mohu použít následující kód

PS C:\> Export-IETabName | Export-Evernote -Sync


a poté mohu s klidem vypnout počítač a odejít.

neděle, 24. ledna 2010

Get-PSNews |? {$_.Week –eq '03'}

Uplynulý týden se nesl ve znamení následujících událostí

Posledních několik týdnů se také mluví o větší popularizaci PowerShellu mezi (hlavně) administrátory. Nejvíce je nyní v této souvislosti asi slyšet Jeff Hicks (samozřejmě ale není jediný), který byl hostem v dnes již jednou zmiňovaném podcastu Mind of Root. Poté napsal i krátký příspěvek v jeho blogu. Proto bych chtěl dnešní noviky opět ukončit několika otázkami a budu moc rád, pokud mi na ně odpovíte (klidně se rozepište více :)). Mé odpovědi najdete v komentářích.

  1. Jak dlouho s PowerShellem pracujete?
  2. Pro jaké úkoly PowerShell používáte?
  3. Snažíte se propagovat PowerShell ve vaší práci a nebo si jej radši necháváte pro sebe, abyste měli náskok před kolegy.