Programování

Go pro: Příručka uživatele PowerShell k Power

Pokud jste zápasili s Windows 10, nepochybně jste o PowerShellu slyšeli. Pokud jste se v poslední době pokusili udělat něco fantastického s Win7 / 8.1, pravděpodobně přijde také PowerShell. Po letech spoléhání se na příkazový řádek systému Windows a hromadné dávkové soubory, je čas zaměřit se na něco výkonnějšího, adaptivnějšího - lepšího.

PowerShell je obrovským přírůstkem do sady nástrojů Windows a vzhledem k této enormnosti může vyvolat trochu strachu. Je to skriptovací jazyk, příkazový shell, podlahový vosk? Chcete-li spustit s poskytovateli, musíte propojit rutinu s instancovanou třídou .Net? A proč všechny podpůrné dokumenty hovoří o správcích - musím být profesionálním správcem Windows, abych to mohl použít?

Odpočinout si. PowerShell je silný, ale nemusí být zastrašující.

Následující průvodce je zaměřen na ty, kteří spustili příkaz Windows nebo dva nebo vytvořili dávkový soubor. Zvažte postupnou transformaci ze zvědavého prostředí PowerShell na prostředí PowerShell.

Krok 1: Roztočte to

První věc, kterou budete potřebovat, je samotný PowerShell. Pokud používáte Windows 10, již máte nainstalovanou PowerShell 5 - nejnovější verzi. (Win10 Anniversary Update has 5.1, but you won't know the difference with the Fall Update's 5.0.) Windows 8 and 8.1 ship with PowerShell 4, which is good good for mokré nohy. Instalace prostředí PowerShell ve Windows 7 není obtížná, ale vyžaduje zvláštní péči - a musíte si nainstalovat .Net Framework samostatně. JuanPablo Jofre podrobně popisuje, jak nainstalovat WMF 5.0 (Windows Management Framework), který zahrnuje PowerShell, kromě nástrojů, které pravděpodobně nebudete používat při spuštění, na MSDN.

PowerShell nabízí dvě rozhraní. Pokročilí uživatelé využijí plnohodnotné grafické uživatelské rozhraní známé jako Integrated Scripting Environment (ISE). Začátečníkům se však nejlépe hodí konzole PowerShell, jednoduché textové rozhraní připomínající příkazový řádek Windows nebo dokonce DOS 3.2.

Chcete-li spustit PowerShell jako správce ze systému Windows 10, klikněte na Start a přejděte dolů v seznamu aplikací do Windows PowerShell. Klikněte na tento řádek, klikněte pravým tlačítkem na Windows PowerShell a zvolte Spustit jako správce. V systému Windows 8.1 vyhledejte Windows PowerShell ve složce Windows System. Ve Win7 je ve složce Příslušenství. PowerShell můžete spustit jako „běžného“ uživatele sledováním stejné sekvence, ale levým kliknutím.

V jakékoli verzi systému Windows můžete pomocí prostředí Windows hledat PowerShell. Ve Windows 8.1 a Windows 10 jej můžete umístit do své „Ctrl-X“ nabídky „Napájení“ (klikněte pravým tlačítkem na prázdné místo na hlavním panelu a zvolte Vlastnosti; na kartě Navigace zaškrtněte políčko Nahradit příkazový řádek). Jakmile jej máte otevřený, je dobré připnout PowerShell na hlavní panel. Ano, bude se vám tolik líbit.

Krok 2: Zadejte staromódní příkazy systému Windows

Byli byste ohromeni, kolik syntaxe příkazového řádku systému Windows funguje podle očekávání v prostředí PowerShell.

Například, CD změní adresáře (aka složky) a dir stále uvádí všechny soubory a složky obsažené v aktuální složce.

V závislosti na tom, jak spustíte konzolu PowerShell, můžete začít na c: \ Windows \ system32 nebo na c: \ Users \. V příkladu obrazovky používám CD .. (všimněte si mezery), abyste se posunuli o jednu úroveň výše, a poté spusťte dir seznam všech souborů a podsložek ve složce C:\ adresář.

Krok 3: Nainstalujte soubory nápovědy

Příkazy jako CD a dir nejsou nativní příkazy prostředí PowerShell. Jsou to aliasy - náhražky skutečných příkazů PowerShellu. Aliasy mohou být pro ty z nás užitečné s pamětí prstů, kterou je těžké překonat. Ale ani se nezačnou dotýkat nejdůležitějších částí PowerShellu.

Chcete-li začít cítit samotný PowerShell, zadejte Pomoc následovaný příkazem, který znáte. Například na snímku obrazovky zadám pomoc dir.

To mi říká PowerShell dir je alias pro příkaz PowerShell Get-ChildItem. Jistě, pokud píšete get-childitem na PS C: \> výzva, uvidíte přesně to, co jste viděli s dir příkaz.

Jak je uvedeno ve spodní části obrazovky, soubory nápovědy pro PowerShell se neinstalují automaticky. Chcete-li je získat (vy dělat chcete je získat), přihlaste se do prostředí PowerShell v režimu správce a zadejte update-help. Instalace souborů nápovědy bude trvat několik minut a možná vám bude chybět několik modulů - Nápověda pro NetWNV a SecureBoot se na můj testovací stroj nepodařilo nainstalovat. Ale až budete hotovi, celý systém nápovědy vám bude k dispozici.

Od tohoto okamžiku zadejte získejte pomoc následuje příkaz („cmdlet“ v prostředí PowerShell, vyslovuje se „command-let“), který se vás týká a zobrazí veškerou nápovědu pro tuto položku. Například, get-help get-childitem vytvoří souhrn get-childitem možnosti. Také vás vyzve k zadání variací motivu. Tedy následující:

get-help get-childitem -příklady

produkuje sedm podrobných příkladů, jak používat get-childitem. Příkaz PowerShell

get-help get-childitem -detailed

zahrnuje těchto sedm příkladů a podrobné vysvětlení všech parametrů dostupných pro get-childitem rutina.

Krok 4: Získejte nápovědu k parametrům

V pomoc dir screenshot, možná jste si všimli, že jsou pod dvěma výpisy SYNTAX pro get-childitem. Skutečnost, že pro rutinu existují dvě samostatné syntaxe, znamená, že existují dva způsoby spuštění rutiny. Jak oddělujete syntaxe - a co znamenají parametry? Odpověď je snadná, pokud tento trik znáte.

Chcete-li získat všechny podrobnosti o parametrech pro get-childitem rutinu nebo jakoukoli jinou rutinu použijte -úplný parametr, jako je tento:

get-help get-childitem - plný

Tím se vytvoří seznam řádků, co můžete s rutinou dělat a co se může (ale nemusí!) Stát. Podívejte se na snímek obrazovky.

Při procházení podrobnostmi parametru je to poměrně snadné vidět get-childitem lze použít k načtení „podřízených“ položek (například názvů podsložek nebo názvů souborů) v místě, které určíte, se specifickými shodami znaků nebo bez nich. Například:

get-childItem „* .txt“ -recurse

načte seznam všech „* .txt”Soubory v aktuální složce a všech podsložkách (kvůli - rekurze parametr). Vzhledem k tomu, že:

get-childitem „HKLM: \ Software“

vrací seznam všech klíčů registru na vysoké úrovni HKEY_LOCAL_MACHINE \ Software.

Pokud jste se někdy pokusili dostat do registru pomocí příkazového řádku systému Windows nebo dávkového souboru, jsem si jist, že vidíte, jak silný tento druh přístupu musí být.

Krok 5: Přibijte jména

Existuje důvod, proč rutiny, které jsme dosud viděli, vypadají stejně: get-childitem, update-help, a získejte pomoc všichni se řídí stejnou slovesnou podstatnou konvenci. Milosrdně všechny rutiny prostředí PowerShell používají tuto konvenci, přičemž sloveso předchází podstatné jméno (singulární). Ti z vás, kteří tráví týdny bojováním o nejednotně pojmenované příkazy VB a VBA, si mohou vydechnout.

Chcete-li zjistit, kam jdeme, podívejte se na některé z nejběžnějších rutin (díky blogu Hey Ed Wilsona, Scripting Guy!). Začněte s rutinami, které zasahují do vašeho systému, a vytáhněte užitečné informace, například následující:

  • set-location: Nastaví aktuální pracovní místo na zadané místo
  • získat obsah: Získá obsah souboru
  • získat položku: Získá soubory a složky
  • copy-item: Zkopíruje položku z jednoho místa na druhé
  • odebrat položku: Odstraní soubory a složky
  • get-process: Získá procesy spuštěné v místním nebo vzdáleném počítači
  • get-service: Získá služby spuštěné v místním nebo vzdáleném počítači
  • invoke-webrequest: Získá obsah z webové stránky na internetu

Chcete-li zjistit, jak konkrétní rutina funguje, použijte získejte pomoc, jako v

get-help copy-item -full

Na základě jeho popisu nápovědy můžete snadno zjistit, co chce rutina. Například pokud chcete zkopírovat všechny soubory a složky z Dokumenty na c: \ temp, byste použili:

copy-item c: \ users \ [username] \ documents \ * c: \ temp

Jak zadáváte tento příkaz, uvidíte několik příjemných úprav zabudovaných do prostředí PowerShell. Například pokud zadáte copy-i a stiskněte klávesu Tab, doplní se PowerShell Kopírovat položku a prostor. Pokud napíšete rutinu nesprávně a PowerShell to nedokáže zjistit, dostanete velmi důkladný popis toho, co se stalo.

Vyzkoušejte tuto rutinu. (Může se vás pokusit přimět k instalaci programu ke čtení pole „o“. Pokud ano, ignorujte jej.)

invoke-webrequest askwoody.com

Získáte výstižný seznam prohlášení o obsahu webové stránky, záhlaví, obrázků, odkazů a dalších. Podívejte se, jak to funguje? Všimněte si v získejte pomoc výpis pro invoke-webrequest že invoke-webrequest rutina „vrací kolekce formulářů, odkazů, obrázků a dalších významných prvků HTML“ - přesně to, co byste měli vidět na obrazovce.

Některé rutiny vám pomohou ovládat nebo ovládat samotný PowerShell:

  • get-příkaz: Seznam všech dostupných rutin (je to dlouhý seznam!)
  • get-sloveso: Seznam všech dostupných sloves (levá polovina rutin)
  • jasný hostitel: Vymaže displej v hostitelském programu

Různé parametry (pamatujte, získejte pomoc) vám umožní omezit příkazy a zúžit možnosti, které vám mohou být užitečné. Chcete-li například zobrazit seznam všech rutin, které fungují se službami Windows, zkuste toto:

get-command * -service

Uvádí seznam všech sloves, která jsou k dispozici u servis jako podstatné jméno. Výsledek:

Získejte službu

Nová služba

Restartujte službu

Obnovit službu

Set-Service

Start-Service

Stop-Service

Pozastavit službu

Tyto rutiny můžete kombinovat s jinými rutinami, abyste se dostali téměř do jakékoli části prostředí PowerShell. To je místo, kde se do obrazu dostanou trubky.

Krok 6: Přiveďte potrubí

Pokud jste někdy používali příkazový řádek systému Windows nebo se proplétali dávkovým souborem, víte o přesměrování a kanálech. Jednoduše řečeno, obě přesměrování (> znak) a roury ( | znak) vezměte výstup z akce a přilepte ji na jiné místo. Můžete například přesměrovat výstup a dir příkaz do textového souboru nebo „posunout“ výsledek a ping příkaz do a nalézt, odfiltrovat zajímavé výsledky, například:

dir> temp.txt

ping askwoody.com | najděte „pakety“> temp2.txt

Ve druhém příkazu výše je nalézt příkaz hledá řetězec balíčky v potrubním výstupu stránky askwoody.com ping a vloží všechny řádky, které se shodují, do souboru s názvem temp2.txt.

Možná překvapivě první z těchto příkazů funguje dobře v prostředí PowerShell. Chcete-li spustit druhý příkaz, chcete něco takového:

ping askwoody.com | pakety výběrového řetězce | out-file temp2.txt

Používání přesměrování a kanálů značně rozšiřuje možnosti příkazového řádku systému Windows: Místo nekonečného posouvání dolů po obrazovce a hledání textového řetězce můžete například sestavit pipedovaný příkaz systému Windows, který provede kontrolu za vás.

PowerShell má schopnost propojení, ale není omezen na text. Místo toho vám PowerShell umožňuje předat celý objekt z jedné rutiny do další, kde je „objekt“ kombinací dat (nazývaných vlastnosti) a akcí (metod), které lze na datech použít.

Tvrdá část však spočívá v zarovnání objektů. Druh objektu dodávaného jednou rutinou musí odpovídat druhům objektů přijatých přijímající rutinou. Text je velmi jednoduchý druh objektu, takže pokud pracujete s textem, seřazování položek je snadné. Jiné objekty nejsou tak primitivní.

Jak na to přijít? Vítejte v získat člena rutina. Pokud chcete vědět, jaký typ objektu produkuje rutina, proveďte to potrubím získat člena. Například pokud se snažíte zjistit procesy běžící na vašem počítači a zúžili jste možnosti na get-process rutina, tady je návod, jak zjistit, co get-process rutina produkuje:

get-process | získat člena

Spuštění tohoto příkazu vytvoří dlouhý seznam vlastností a metod pro get-process, ale na samém začátku seznamu vidíte typ objektu, který get-process vytváří:

Název_typu: System.Diagnostics.Process

To vám také říká následující snímek obrazovky get-process má vlastnosti zvané Rukojeti, název, NPM, ODPOLEDNE, SI, VM, a WS.

Pokud chcete manipulovat s výstupem z get-process abyste s ním mohli pracovat (na rozdíl od toho, aby na monitoru zobrazoval dlouhý seznam aktivních procesů), musíte najít další rutinu, se kterou budete pracovat System.Diagnostics.Process jako vstup. Chcete-li najít ochotnou rutinu, jednoduše použijete… počkáte… PowerShell:

get-command -Parametertype System.Diagnostics.Process

Tím se vytvoří seznam všech rutin, které zvládnou System.Diagnostics.Process.

Některé rutiny jsou proslulé tím, že přijímají téměř jakýkoli druh vstupu. Šéf mezi nimi: kde-objekt. Možná matoucí, kde-objekt projde každou položkou zaslanou potrubím a použije libovolná kritéria výběru, která požadujete. Nazývá se speciální značka $_. který vám umožní procházet každou položkou v kanálu, jednu po druhé.

Řekněme, že jste chtěli přijít se seznamem všech procesů běžících na vašem počítači, které se nazývají „svchost„—V PowerShell mluvit, chcete se shodovat na název majeteksvchost. Vyzkoušejte tento příkaz prostředí PowerShell:

get-process | kde-objekt {$ _. Název -eq „svchost“}

The kde-objekt rutina se na každého dívá System.Diagnostics.Process položka, porovnává .Název této položky na „svchost“; pokud se položka shoduje, vyplivne konec trubky a zadá se na váš monitor. Podívejte se na snímek obrazovky.

$config[zx-auto] not found$config[zx-overlay] not found