Spuneți Bună ziua la PowerShell

PowerShell a fost în curs de dezvoltare de peste zece ani. Microsoft continuă să investească în dezvoltarea și adoptarea sa. Aceste investiții au transformat ușurința și robustețea cu care dezvoltatorii și administratorii pot automatiza sarcini Windows.


Ce este PowerShell?

PowerShell rezolvă provocările de administrare și adaptabilitate prin integrarea fără probleme a .NET Framework.

PowerShell este cadrul Microsoft de automatizare a sarcinilor, alcătuit dintr-un shell de linie de comandă, un mediu de scripting integrat (ISE), un limbaj de scripting construit pe .NET Framework, un API care vă permite să găzduiți PowerShell în aplicațiile .NET și este distribuit platforma de automatizare. PowerShell oferă acces complet la COM și WMI, permițându-vă să efectuați sarcini atât pe sistemele Windows locale, cât și pe cele de la distanță.

PowerShell este o nouă platformă de rasă pentru automatizare, deoarece rezolvă provocările de administrare și adaptabilitate prin integrarea fără probleme a .NET Framework. Este bine pentru dezvoltatori, administratori, testeri și multe altele. Bazat pe .NET, instrumentul reduce costurile, oferind în același timp dezvoltatorilor și administratorilor o modalitate simplă și eficientă pentru a automatiza, măsura și îmbunătăți toate procesele.


Urmați de-a lungul

În acest intro, voi sublinia o parte din adâncimea și lățimea pe care PowerShell le aduce la masă. Lucruri precum pipeline-ul de schimbare a jocului, REPL (read, eval, print loop), integrarea .NET și multe altele.

Dacă executați Windows 7 sau 8, PowerShell este deja instalat. Descarcă PowerShell v3 pentru Windows 7 aici. Aveți nevoie de Windows 7 SP1, iar descărcarea funcționează și pentru Windows 2008 R2 SP1 și Windows 2008 SP2. Dacă executați Vista, XP sau Windows 2003, va trebui să vă instalați pentru PowerShell v2 aici.


Pentru ce este bine? Absolut totul!

De la implementarea mai multor resurse către Azure, manipularea software-ului dvs. pentru integrarea continuă, accesarea serviciilor web sau a punctelor finale REST. PowerShell v-ați acoperit și vă oferă mult mai mult.

  • Slice și zăpadă text, XML, CSV, și JSON cu ușurință
  • Încorporați PowerShell pentru a oferi capabilități de scripting pentru aplicațiile C #
  • Creați aplicații GUI de cinci până la zece ori mai rapide, cu un cod mai mic
  • Folosiți capabilitățile PowerShell de a lucra cu Internetul
  • Interacționați cu DLL-uri și creați obiecte, afișați automat proprietățile și metodele de apelare în sesiuni interactive live
  • Construiți limbi specifice domeniului (DSL) și vocabulare pentru a exprima mai clar soluțiile
  • Lucrați cu Microsoft Office prin intermediul modelului Object Component (COM)
  • Caracteristicile PowerShell v3

Booststrapping PowerShell

Ce este un cmdlet? Un cmdlet este blocul de bază în PowerShell și este exprimat ca pereche de verbe-substantive, ajutându-i să devină auto-descriptivi. De exemplu:

PS C: \> Get-Date Duminică, 26 Mai 2013 8:46:16 AM

PowerShell include sute de cmdlete de bază și puteți scrie propriile dvs..

Memorează două Cmdleturi

PowerShell facilitează descoperirea. Ori de câte ori mergeți pe ecranul albastru al PowerShell și nu sunteți sigur ce să faceți, utilizați Get-comandă.

Get-comandă cmdlet primește toate comenzile instalate pe computer, inclusiv cmdlet-uri, aliasuri, funcții, fluxuri de lucru, filtre, scripturi și aplicații.

În esență, Get-comandă vă arată toate lucrurile pe care le puteți face în sesiunea curentă PowerShell.

Get-comandă

Get-comandă suporta metacaractere. Să spunem că vreau să văd toate cmdlet-urile care au verbul, Invoca?

Get-Command Invoke *

Iată ce obțin după ce am apăsat introduce.

CommandType Name ModuleName ----------- ---- ---------- Funcția Invoke-AsWorkflow Funcția PSWorkflowUtility Invoke-Background Funcția ShowUI Invoke-BrowserControl Funcția AutoBrowse Invoke-Line isepack Function Invoke -Line Funcția PowerShellPack Invoke-Office365 Funcția pipeworks Funcția Invoke-Pester Pester Funcția Invoke-WebCommand Cmdlet Invoke-CimMethod CimCmdlets Cmdlet Invoke-Command Microsoft.PowerShell.Core Cmdlet Invoke-Expression Microsoft.PowerShell.Utility Cmdlet Invoke-History Microsoft.PowerShell.Core Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Invoke-RestMethod Microsoft.PowerShell.Utility Cmdlet Invoke-TroubleshootingPack DepanarePack Cmdlet Invoke-WebRequest Microsoft.PowerShell.Utility Cmdlet Invoke-WmiMethod Microsoft.PowerShell.Management Cmdlet Invoke-WSManAction Microsoft.WSMan.Management

Ce sunt cmdalele care se termină în elementul substantiv?

Get-Command * -Item

Rețineți că începeți să vedeți alte verbe, cum ar fi Clear, New, Remove și Set.

CommandType Name ModuleName ----------- ---- ---------- Cmdlet Clear-Item Microsoft.PowerShell.Management Cmdlet Copy-Item Microsoft.PowerShell.Management Cmdlet Get-Item Microsoft.PowerShell.Management Cmdlet Invoke-Item Microsoft.PowerShell.Management Cmdlet Move-Item Microsoft.PowerShell.Management Cmdlet Articol nou Microsoft.PowerShell.Management Cmdlet Eliminați-Item Microsoft.PowerShell.Management Cmdlet Redenumiți-Item Microsoft.PowerShell.Management Cmdlet Set-Item Microsoft.PowerShell.Management

Apoi voi folosi câteva cmdleturi pentru a rezuma ceea ce este disponibil în sesiunea mea într-unul dintre casetele mele când lansez consola PowerShell.

Get-Command | Group CommandType -NoElement | Ordonați numărătoarea

Eu chem Get-comandă, grupați-l și sortați-l. Aici, văd că am 1000 de oameni cu care să lucrez. Am rulat PowerShell v3 cu module suplimentare instalate, astfel încât kilometrajul dvs. poate varia.

Numar numar ----- ---- 2487 Functie 1184 Cmdlet 38 Alias ​​1 Filter

De ce module provin aceste cmdleturi? Putem răspunde la această întrebare în felul următor:

Get-Command -CommandType Cmdlet Grupul ModuleName -NoElement | Ordonați numărătoarea

Sunt multe lucruri pe care le pot realiza cu PowerShell.

Numărare Nume ----- ---- 379 ShowUI 164 Hyper-V 157 Azure 92 Microsoft.PowerShell.Utility 82 Microsoft.PowerShell.Management 78 WebAdministration 55 Microsoft.PowerShell.Core 22 Dism 18 Internațional 17 PKI 16 PSScheduledJob 13 Microsoft. WSMan.Management 12 CimCmdlets 10 Microsoft.PowerShell.Security 9 TrustedPlatformModule 8 BitsTransfer 8 MsDtc 6 Țevi de rețea 6 Kds 5 AppLocker 5 SecureBoot 5 Microsoft.PowerShell.Diagnostics 4 NetSecurity 4 Appx 3 WindowsErrorReporting 2 Microsoft.PowerShell.Host 2 DepanarePachete 1 PSWorkflow 1 DnsClient

Obține ajutor

Obține ajutor face exact acest lucru, afișează ajutor pentru cmdlet ești ce să știți mai multe despre. Nu numai că este ușor să obțineți ajutor, este ușor de creat / inclus ajutor pentru cmdlet / funcțiile avansate pe care le dezvoltați, un subiect pentru un alt articol. A avea ajutor la vârful degetelor este un economizor de timp uriaș.

Obțineți-ajutor Invoke-Command

Aici este o versiune prescurtată a ieșirii.

NAME Get-Process SYNOPSIS Obține procesele care rulează pe computerul local sau pe un computer la distanță. SYNTAX Get-Process [[-Name] ] [-Numele calculatorului ] [-FileVersionInfo []] [-Module []] [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -Dar  [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -InputObject  [] DESCRIERE cmdlet Get-Process obține procesele pe un computer local sau la distanță ... 

Mai ușor; există un comutator pentru aceasta în cmdletul Get-Help care vă duce aici.

Obțineți-ajutor Get-Process -Online

Vreți să vedeți doar exemple de utilizare a cmdlet-ului? Folosește -Exemple intrerupator. În plus, puteți să copiați și să inserați un exemplu direct în consola și să îl executați.

Get-Help Get-Process -Examples

Este atât de ușor și rapid.

NAME Get-Process SYNOPSIS Obține procesele care rulează pe computerul local sau pe un computer la distanță. -------------------------- EXEMPLUL 1 ---------------------- ---- PS C: \> Get-Process Această comandă primește o listă cu toate procesele care rulează pe computerul local. Pentru o definiție a fiecărei coloane, consultați secțiunea "Note suplimentare" din subiectul Ajutor pentru Get-Help. -------------------------- EXEMPLUL 2 ---------------------- ---- PS C: \> Get-Process winword, explorer | format-list *

PowerShell funcționează cu ușurință cu serviciile Web

W3C definește un "serviciu Web" ca fiind:

[...] un sistem software conceput pentru a sprijini interacțiunea interactivă între mașină și mașină printr-o rețea. Are o interfață descrisă într-un format prelucrat de mașină (în mod special WSDL). Alte sisteme interacționează cu serviciul Web într-o manieră prescrisă de descrierea sa folosind mesaje SOAP, de obicei transmise prin HTTP cu o serializare XML în combinație cu alte standarde legate de Web.

PowerShell face munca rapidă a Webservices, folosind Nou-WebServiceProxy cmdlet. Schimba $ zipcode, rulați-l și obțineți cele mai recente informații despre vreme.

$ zipCode = "96826" $ svc = New-WebServiceProxy http://wsf.cdyne.com/WeatherWS/Weather.asmx $ rezultat = $ svc.GetCityForecastByZIP ($ zipCode) # Transformarea rezultatelor $ result.ForecastResult | ForEach [PSCustomObject] @ City = $ rezultatul.City State = $ result.State Date = $ _. Date.ToString ("d") Descriere = $ _ Desciption DaytimeHigh = $ _ Temperatures.DaytimeHigh

Rezultat

Am stocat obiectul proxy în $ SVC și apoi apelați GetCityForecastByZIP , captarea rezultatelor în $ rezultat. Încărcarea prin matricea ForecastResult, transformez înregistrarea pe date. Rețineți că Oraș și DaytimeHigh sunt la diferite niveluri în ierarhie.

Tehnica pe care o folosesc este crearea de perechi cheie / valoare pentru hashtable. @ este sintaxa PowerShell pentru un nou hashtable. Utilizarea [PSCustomObject] este un PowerShell accelerator, care îmi permite, dintr-un singur lucru, să creez un obiect particularizat dintr-un material hashtable.

Weather.asmx serviciul web a returnat XML ierarhic. Într-o mână de comenzi PowerShell, am redimensionat datele și am formatat-o ​​(data) după cum îmi place. Pentru acest exemplu, am ales să îl las pe PowerShell să-l tipărească. Odată ce am datele din sesiunea PowerShell, sunt acum conectat la ecosistemul PowerShell și pot conduce cu ușurință această gamă de obiecte personalizate în alte cmdlet-uri pentru ao împinge la alt serviciu web, pentru a genera HTML, a le salva într-un fișier, a crea un CSV fișier sau exportați-l într-o bază de date SQL.

Orașul Data Data Descriere DaytimeHigh ---- ----- ---- ----------- ----------- Honolulu HI 5/22/2013 Dusuri 76 Honolulu HI 5/23/2013 Parțial noros 76 Honolulu HI 5/24/2013 Parțial noros 77 Honolulu HI 5/25/2013 Parțial noros 77 Honolulu HI 5/26/2013 Parțial noros 77 Honolulu HI 5/27/2013 Parțial noros 77 Honolulu HI 5/28/2013 Parțial înnorat 77

Lucrul cu CSV, JSON și XML

Împărțirea și modelarea formatelor text este un spot dulce PowerShell. Aici, voi converti trei formate comune unui obiect PowerShell. Pentru CSV și JSON, voi folosi corect ConvertFrom- * cmdlets, iar pentru XML, voi folosi accelerator care ia XML și creează un XMLDocument.

# Utilizați CSV $ csv = "Nume, Age'r'nJohn, 10" | ConvertFrom-Csv $ csv Nume Varsta ---- --- John 10 # Foloseste JSON $ json = "Nume: 'Tom', Varsta: 20" | ConvertFrom-Json $ json Nume Varsta ---- --- Tom 20 # Utilizare XML $ xml = ([xml] [/ xml] "dezgoli30") .data.record $ xml Nume Vârsta ---- --- Harry 30 # Combină toate cele trei $ csv, $ json, $ xml Nume Vârstă ---- --- John 10 Tom 20 Harry 30 # Adăugați vârste $ csv, $ json, $ xml |% $ sum = 0 $ sum + = $ _. vârstă $ sum 60

Deci, am luat trei formate eterogene și, în cele din urmă, am efectuat o agregare pe un câmp. Am putut recupera fiecare dintre aceste fluxuri de date din diverse locuri, CSV-ul dintr-o partajare de rețea, JSON-ul pentru o interogare REST și XML-ul dintr-un serviciu Web. Cum am spus, acesta este un spot dulce PowerShell.


Căutare Twitter

Să folosim API-ul REST API pentru căutare în linia de comandă. Construiesc urlul pe care îl poți folosi în browser-ul tău și apoi folosesc cmdletul PowerShell Invocați-RestMethod. Trimite o cerere către serviciul REST și determină dacă răspunsul este XML sau JSON. Aici solicit un răspuns JSON astfel, Invocați-RestMethod convertește rezultatele într-o serie de obiecte PowerShell. Le conduc la Selectați cmdlet (un alias al verb-substantivului Selectați-obiect) alegând doar trei câmpuri. Gândiți-vă la acest lucru ca o proiecție, similară LINQ sau SQL.

$ query = "PowerShell" $ url = "http://search.twitter.com/search.json?q=$query" (Invoke-RestMethod $ url). Rezultatele | Selectați create_at, de_user_name, text

Rezultat

Este atât de ușor. Consultați un videoclip pe care l-am făcut pentru versiunea 2: "PowerShell, ShowUI și API-ul Twitter". O aplicație mini WPF Twitter în mână de PowerShell.

created_at from_user_name text ---------- -------------- ---- Sâmbătă, 25 Mai 2013 vitor pombeiro @brunomlopes un falar sobre Powershell "à minha maneira" Sat , 25 mai 2013 Jeffery Hicks Știați că ISE #PowerShell are opțiuni de pornire? În sâmbătă, 25 mai 2013 Pat Richard @mwjcomputing Da - a folosit întotdeauna $ MyInvocation.MyCom Sâm, 25 mai 2013 Rob Fairman "#PowerShell Script pentru ștergerea #Windows Event Logs" ht Sat, 25 Mai 2013 Jim Priestley Automatizarea implementărilor SharePoint în Windows #Azure usin Sâmbătă, 25 Mai 2013 VT Technology RT @jangwoo_park: â € œ @ VTTechnology: Export Multiple Virtua Sâm, 25 mai 2013 Aryan Nava Utilizarea PowerShell pentru a vizualiza site-ul creat pe precedentul Sat, 25 Mai 2013 Aryan Nava PowerShell Sfaturi pentru SQL Server http://t.co/lVW2AY5BYZ Sâmbătă, 25 Mai 2013 Private Cloud Tech Călătoria spre Cloud Private Part 3 - Infrastruc Sat, 25 mai 2013 Dr. Tom Shinder Călătoria spre Cloud Private Part 3 â € "Infrastruc Sat, 25 mai 2013 Jacob Daniels RT @ tech_faq: Windows Server Manager se bazează pe Windows Sat, 25 mai 2013 CodeCruiser 10 sfaturi pentru SQL Server PowerShell Scripter http: // t.

Compilarea C # pe Fly în PowerShell

PowerShell este un limbaj interpretat. Deci, va exista o pedeapsă. Nu este o preocupare majoră, dar, uneori, veți avea nevoie de viteza unui limbaj compilat. PowerShell vă permite să compilați C # în zbor în memorie în sesiunea PowerShell, utilizând -TypeDefinition parametru pe Add-Type cmdlet. Rețineți aici-string identificate de către @ "" @. Ele sunt foarte utile când citezi textul. Vă încurajez să explorați mai multe Add-Type și regulile de citare ale PowerShell.

Add-Type -TypeDefinition @ "public class TestInline public lung Fibonacci (long n) lung a = 0; lung b = 1; pentru (idx lung id = 0; idx < n; idx+=1)  long temp = a; a = b; b = temp + b;  return a;   "@ $obj = New-Object TestInline 1… 10 | ForEach  $obj.Fibonacci($_) 

Interacționează cu DLLS

Acum, să zic că nu ți-am dat codul sursă - doar DLL-ul compilat. Nici o problema: Add-Type are o -cale parametru.

Add-Type -Path. \ FibLib.dll $ obj = Test-Obiect New-Object 1 ... 10 | Pentru fiecare $ obj.Fibonacci ($ _)

Acordați o atenție deosebită acestui lucru. Utilizarea Add-Type acest mod este modul in care inlaturati cu usurinta orice DLL .NET provenit de la oricine, daca nu au furnizat deja o interfata PowerShell. Acest lucru este adevărat dacă DLL-ul este de la Microsoft, DELL, Citrix sau alt dezvoltator.


În încheiere

Deci, asta o face deocamdată. Doriți să vedeți mai mult conținut specific Powershell pe Nettuts +? Spuneți-ne mai jos!

Cod