Geek School Naučte se, jak automatizovat Windows pomocí PowerShell
V tomto vydání Geek School vám pomůžeme pochopit výkonný skriptovací jazyk PowerShell, který je postavený přímo do Windows a je mimořádně užitečný v prostředí IT.
Zatímco tato série není strukturována kolem zkoušky, učení PowerShell je jednou z nejdůležitějších věcí, které můžete udělat jako správce sítě, takže pokud existuje jedna věc, kterou se chcete naučit pomoci vaší IT kariéře, tak to je. Navíc je to spousta legrace.
Úvod
PowerShell je nejmocnější nástroj pro automatizaci, který společnost Microsoft nabízí, a to jak shell, tak skriptovací jazyk.
Vezměte prosím na vědomí, že tato série je založena na PowerShell 3, který je dodáván s Windows 8 a Server 2012. Pokud používáte systém Windows 7, stáhněte si aktualizaci PowerShell 3, než budete pokračovat.
Setkání s Console a ISE
Existují dva způsoby interakce s PowerShell z krabice, konzoly a integrovaného skriptovacího prostředí - také známého jako ISE. ISE se výrazně vylepšila od odporné verze dodávané s PowerShell 2 a lze ji otevřít stisknutím kombinace kláves Win + R pro vyvolání spouštěcího pole, zadáním příkazu powershell_ise a stisknutím klávesy enter.
Jak vidíte, ISE rozděluje rozdělené zobrazení, takže můžete rychle skriptovat, zatímco výsledek je stále schopen vidět v dolní polovině ISE. Spodní část ISE, kde jsou vytištěny výsledky vašeho skriptu, lze také použít jako příkaz REPL - podobně jako příkazový řádek. V3 ISE konečně přidala podporu pro intellisense jak v podokně skriptu, tak v interaktivní konzoli.
Případně můžete komunikovat s PowerShell pomocí PowerShell Console, což je to, co budu používat pro většinu této série. Konzola PowerShell se chová podobně jako příkazový řádek - jednoduše zadáváte příkazy a spouští výsledky. Chcete-li otevřít konzolu Windows PowerShell Console, znovu stiskněte kombinaci kláves Win + R a otevřete spouštěcí schránku a zadejte příkaz powershell a stiskněte klávesu enter.
REPL výzvy, jako je tento, jsou úžasné pro okamžité uspokojení: zadáte příkaz a získáte výsledky. Zatímco konzola nenabízí intellisense, nabídne něco nazvaného dokončení tabulátoru, který funguje stejně - jednoduše začněte psát příkaz a stisknutím záložky procházíte možnými zápasy.
Používání systému nápovědy
V předchozích verzích PowerShell byly při instalaci systému Windows zahrnuty soubory nápovědy. Toto řešení bylo z velké části vhodné, ale zanechalo nám významný problém. Když tým nápovědy PowerShell musel přestat pracovat na souborech nápovědy, vývojáři PowerShell stále měli obsazeno kódování a provádění změn. To znamená, že při dodávání PowerShell byly soubory nápovědy nesprávné, protože neobsahovaly novější změny provedené v kódu. Chcete-li tento problém vyřešit, PowerShell 3 je dodáván bez nápovědy a obsahuje aktualizovaný systém nápovědy. To znamená, že předtím, než uděláte cokoliv, budete chtít stáhnout nejnovější soubory nápovědy. Můžete to udělat otevřením PowerShell Console a spuštěním:
Aktualizace - Nápověda
Blahopřejeme vám k tomu, že jste vedli váš první příkaz PowerShell! Pravdou je, že příkaz Update-Help má mnohem více možností, než jednoduše spustit, a vidět je, budeme chtít zobrazit nápovědu pro příkaz. Chcete-li zobrazit nápovědu pro příkaz, jednoduše projděte název příkazu s nápovědou k parametru Name příkazu Get-Help, například:
Get-Help -Name Update-Help
Pravděpodobně se zajímáte, jak interpretovat celý tento text, tak proč existují dvě spousty informací v sekci syntaxe a proč jsou tam tak mnoho závorek? Nejdříve nejdříve: důvod, proč jsou dvě části informací v sekci syntaxe, je to, že představují různé způsoby, jak spustit příkaz. Jedná se o technicky nazývané sady parametrů a můžete je používat pouze po jednom (nelze kombinovat parametry z různých sad). Na výše uvedeném snímku obrazovky vidíte, že horní sada parametrů má parametr SourcePath, zatímco v dolní části není. Důvodem je, že byste použili horní sadu parametrů (ta, která obsahuje SourcePath), kdybyste aktualizovali soubory nápovědy z jiného počítače v síti, která je již stáhli, zatímco byste neměli zadávat zdrojovou cestu, pokud jste jen chtěl chytit nejnovější soubory od společnosti Microsoft.
Chcete-li odpovědět na druhou otázku, existuje určitá syntaxe, která pomáhají soubory a tady je:
- Hranaté závorky kolem názvu parametru a jeho typu znamená, že je volitelný parametr a příkaz bude bez něj fungovat bez problémů.
- Hranaté závorky kolem názvu parametrů znamenají, že parametry jsou parametry polohy.
- Věc napravo od parametru v hranatých závorkách říká typ dat, který očekává parametr.
Zatímco byste se měli naučit číst syntaxi souboru nápovědy, pokud si někdy nejste jisti o určitém parametru, jen přidejte -Full na konec příkazu get help a přejděte dolů na sekci parametrů, kde vám řekne něco o každém parametr.
Získat-Nápověda -Name Update-Help -Full
Poslední věc, kterou potřebujete vědět o systému nápovědy, je, jak ji můžete použít k objevení příkazů, což je ve skutečnosti velmi snadné. Vidíte, PowerShell přijímá zástupné symboly téměř kdekoli, takže jejich použití spolu s příkazem Get-Help vám umožní snadno zjistit příkazy. Například hledám příkazy, které se zabývají službami Windows:
Získat-Nápověda -Name * služba *
Jistě, všechny tyto informace nemusí být vhodné pro netopýra, ale věřte mi, věnujte si čas a naučte se používat systém nápovědy. Přichází prakticky po celou dobu, dokonce i pokročilým scriptoři, kteří to dělají už léta.
Bezpečnostní
To by nebylo správným úvodem bez uvedení bezpečnosti. Největší starostí pro tým PowerShell je, že PowerShell se stává nejnovějším a nejlepším bodem útoku pro skripty. Zavedli několik bezpečnostních opatření, aby se ujistili, že tomu tak není, a tak se na ně podívejme.
Nejzákladnější forma ochrany pochází ze skutečnosti, že přípona souboru PS1 (přípona používaná k označení skriptu PowerShell) není registrována u hostitele PowerShell, který je skutečně registrován v programu Poznámkový blok. To znamená, že pokud dvakrát kliknete na soubor, otevře se s poznámkou místo spuštěním.
Zadruhé nelze spustit skripty ze shellu zadáním názvu skriptu, musíte zadat úplnou cestu ke skriptu. Takže pokud jste chtěli spustit skript na vaší jednotce C, budete muset zadat:
C: \ runme.ps1
Nebo pokud jste již v kořenové složce jednotky C, můžete použít následující:
.\ runme.ps1
Konečně PowerShell má něco nazývané Execution Policies, které vás brání ve spouštění starého skriptu. Ve skutečnosti ve výchozím nastavení nelze spustit žádné skripty a pokud chcete, aby byly spuštěny, je třeba změnit zásady provádění. Existují 4 pozoruhodné prováděcí zásady:
- Omezený: Toto je výchozí konfigurace v PowerShell. Toto nastavení znamená, že žádný skript nemůže běžet, bez ohledu na jeho podpis. Jediná věc, kterou lze v PowerShell spustit s tímto nastavením, je individuální příkaz.
- AllSigned: Toto nastavení umožňuje skripty spouštět v PowerShell. Skript musí mít přidružený digitální podpis od důvěryhodného vydavatele. Před spuštěním skriptů od důvěryhodných vydavatelů se zobrazí výzva.
- RemoteSigned: Toto nastavení umožňuje spouštění skriptů, ale vyžaduje, aby skript a konfigurační soubory stažené z Internetu měly přidružený digitální podpis od důvěryhodného vydavatele. Skripty spuštěné z místního počítače nemusí být podepsány. Před spuštěním skriptu neexistují žádné výzvy.
- Neomezený: Umožňuje spuštění nepodepsaných skriptů včetně všech skriptů a konfiguračních souborů stažených z Internetu. Zahrnuje soubory z aplikace Outlook a Messenger. Riziko zde spočívá ve spouštění skriptů bez jakéhokoli podpisu nebo zabezpečení. Znovu jsme se rozhodli, že nás toto nastavení nikdy nepoužíváte.
Chcete-li zjistit, jaké jsou vaše aktuální zásady pro nastavení, nastavte konzolu PowerShell Console a zadejte:
Get-ExecutionPolicy
Pro tento kurz a většinu ostatních okolností je zásada RemoteSigned nejlepší, takže pokračujte a změňte zásady pomocí následujícího.
Poznámka: Musí to být provedeno z vyvýšené konzoly PowerShell.
Set-ExecutionPolicy RemoteSigned
To je vše pro tyhle lidi, zítra se s tebou podíváme na další zábavu PowerShell.
Odmítnutí odpovědnosti: Správným pojmem příkazu PowerShell je cmdlet a od této chvíle budeme používat tuto správnou terminologii. Prostě bylo vhodnější nazývat jim příkazy pro tento úvod.
Máte-li nějaké dotazy, můžete mi píše @taybgibb, nebo zanechte komentář.