Si Hei til PowerShell

PowerShell har vært i utvikling i over ti år. Microsoft fortsetter å investere i utvikling og adopsjon. Disse investeringene har forvandlet lettheten og robustheten som utviklere og administratorer kan automatisere Windows-oppgaver.


Hva er PowerShell?

PowerShell løser administrasjons- og tilpasningsutfordringer ved å integrere .NET Framework sømløst.

PowerShell er Microsofts oppgaveautomatiseringsramme, som består av et kommandolinjeskall, et integrert skriptmiljø (ISE), et skriptspråk bygget på .NET Framework, en API som lar deg være vert for PowerShell i .NET-applikasjonene, og den er distribuert automatiseringsplattform. PowerShell gir full tilgang til COM og WMI, slik at du kan utføre oppgaver på både lokale og eksterne Windows-systemer.

PowerShell er en ny raseplattform for automatisering, ved at den løser administrasjons- og tilpasningsutfordringer ved å integrere .NET Framework sømløst. Det er bra for utviklere, administratorer, testere og mer. Basert på .NET, reduserer verktøyet kostnader, samtidig som utviklere og administratorer får en enkel og bedriftsklar måte å automatisere, måle og forbedre alle sine prosesser på..


Følg etter

I denne introduksjonen vil jeg markere noe av dybden og bredden som PowerShell bringer til bordet. Ting som spillbytterobjektet, REPL (lese, eval, utskriftsløkke), .NET-integrering og mer.

Hvis du kjører Windows 7 eller 8, er PowerShell allerede installert. Last ned PowerShell v3 for Windows 7 her. Du trenger Windows 7 SP1, og nedlastingen fungerer også for Windows 2008 R2 SP1 og Windows 2008 SP2. Hvis du kjører Vista, XP eller Windows 2003, må du slå deg ned for PowerShell v2 her.


Hva er det godt for? Absolutt alt!

Fra å distribuere flere ressurser til Azure, for å håndtere programvaren din, bygger du kontinuerlig integrering, får du tilgang til webtjenester eller REST-sluttpunkter. PowerShell har du dekket og gir så mye mer.

  • Slice and dice text, XML, CSV, og JSON med letthet
  • Legg inn PowerShell for å gi skriptfunksjoner for C # -appene dine
  • Lag GUI-applikasjoner fem til ti ganger raskere med mindre kode
  • Utnytte PowerShells muligheter til å jobbe med Internett
  • Interagere med DLLer og lage objekter, automatisk vise egenskaper og samtale metoder i live interaktive økter
  • Bygg domenespesifikke språk (DSL) og vokabularer for å uttrykke løsninger tydeligere
  • Arbeid med Microsoft Office via komponentobjektmodellen (COM)
  • PowerShell v3-funksjoner

Bootstrapping PowerShell

Hva er en cmdlet? Et cmdlet er den grunnleggende byggestenen i PowerShell og uttrykkes som et verb-substantivpar, som bidrar til å gjøre dem selvbeskrivende. For eksempel:

PS C: \> Get-Date søndag 26 mai 2013 08:46:16

PowerShell inneholder hundrevis av kjerne-cmdlets, og du kan skrive din egen.

Husk to Cmdlets

PowerShell gjør det enkelt å utforske. Når du går opp til den blå skjermen av PowerShell og er usikker på hva du skal gjøre, bruk Get-Command.

De Get-Command cmdlet får alle kommandoer som er installert på datamaskinen, inkludert cmdlets, aliaser, funksjoner, arbeidsflyter, filtre, skript og programmer.

I hovedsak, Get-Command viser deg alt du kan gjøre i dagens PowerShell-økt.

Get-Command

Get-Command støtter jokertegn. La oss si at jeg vil se alle cmdletene som har verbet, Påkall?

Get-Command Invoke *

Her er hva jeg får etter å ha trykket Tast inn.

CommandType Name ModuleName ----------- ---- ---------- Funksjon Invoke-AsWorkflow PSWorkflowUtility Funksjon Invoke-Background ShowUI Funksjon Invoke-BrowserControl AutoBrowse Funksjon Invoke-Line isepack Funksjon Invoke -Line PowerShellPack Funksjon Invoke-Office365 Pipeworks Funksjon Invoke-Pester Pester Funksjon Invoke-WebCommand Pipeworks Cmdlet Invoke-CimMethod CimCmdlets Cmdlet Invoke-kommando 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-FeilsøkingPack FeilsøkingPack Cmdlet Invoke-WebRequest Microsoft.PowerShell.Utility Cmdlet Invoke-WmiMethod Microsoft.PowerShell.Management Cmdlet Invoke-WSManAction Microsoft.WSMan.management

Hva er cmdlets som slutter i substantivelementet?

Get-Command * -Item

Merk at du begynner å se andre verb, som Clear, New, Remove and Set.

CommandType Name ModuleName ----------- ---- ---------- Cmdlet Clear-Item Microsoft.PowerShell.Management Cmdlet Copy-Item Microsoft.PowerShell.Management Cmdlet Get-Item Microsoft.PowerShell.Management Cmdlet Invoke-objekt Microsoft.PowerShell.Management Cmdlet Flytt-element Microsoft.PowerShell.Management Cmdlet Nytt element Microsoft.PowerShell.Management Cmdlet Fjern-element Microsoft.PowerShell.Management Cmdlet Rename-Item Microsoft.PowerShell.Management Cmdlet Set-Item Microsoft.PowerShell.Management

Deretter skal jeg bruke noen få cmdlets for å oppsummere hva som er tilgjengelig i min økt på en av mine bokser når jeg starter PowerShell-konsollen.

Get-Command | Gruppe CommandType -NoElement | Sorter Count - Avvikende

Jeg ringer Get-Command, gruppere det og sortere det. Her kan jeg se at jeg har 1000 + Cmdlets å jobbe med. Jeg kjører PowerShell v3 med flere moduler installert, slik at kjørelengde kan variere.

Count Name ----- ---- 2487 Funksjon 1184 Cmdlet 38 Alias ​​1 Filter

Hvilke moduler kommer disse cmdletene fra? Vi kan svare på dette spørsmålet på denne måten:

Få kommandoen -CommandType Cmdlet | Gruppe Modulnavn -NoElement | Sorter Count - Avvikende

Det er mye jeg kan få oppnådd med PowerShell.

Count Name ----- ---- 379 ShowUI 164 Hyper-V 157 Azure 92 Microsoft.PowerShell.Utility 82 Microsoft.PowerShell.Management 78 Webadministrering 55 Microsoft.PowerShell.Core 22 Dism 18 International 17 PKI 16 PSScheduledJob 13 Microsoft. WSMan.Management 12 CimCmdlets 10 Microsoft.PowerShell.Security 9 TrustedPlatformModule 8 BitsTransfer 8 MsDtc 6 Pipeworks 6 Kds 5 AppLocker 5 SecureBoot 5 Microsoft.PowerShell.Diagnostics 4 NetSecurity 4 Appx 3 WindowsErrorReporting 2 Microsoft.PowerShell.Host 2 Feilsøkingspakke 1 PSWorkflow 1 DnsClient

Få hjelp

Få hjelp gjør akkurat det, det viser hjelp til cmdleten du er hva du skal vite mer om. Ikke bare er det lett å få hjelp, det er lett å lage / inkludere hjelp for de cmdlets / avanserte funksjonene du utvikler, et emne for en annen artikkel. Å ha hjelp på fingertuppene er en stor tidsbesparende.

Get-Help Invoke-kommando

Her er en Forkortet versjon av utgangen.

NAME Get-Process SYNOPSIS Får prosessene som kjører på den lokale datamaskinen eller en ekstern datamaskin. SYNTAX Get-Process [[-Name] ] [-ComputerName ] [-FileVersionInfo []] [-Module []] [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -Id  [] Get-Process [-ComputerName ] [-FileVersionInfo []] [-Module []] -InputObject  [] BESKRIVELSE Get-Process cmdlet får prosessene på en lokal eller ekstern datamaskin ... 

Lettere enda; Det er en bryter for dette på Get-Help cmdlet som tar deg hit.

Get-Help Get-Process-Online

Vil du bare se eksempler på hvordan du bruker cmdlet? Bruke -eksempler bytte om. I tillegg kan du kopiere og lime eksempel direkte inn i konsollen og kjøre det.

Get-Help Get-Process-Eksempler

Det er så enkelt og raskt.

NAME Get-Process SYNOPSIS Får prosessene som kjører på den lokale datamaskinen eller en ekstern datamaskin. -------------------------- Eksempel 1 ---------------------- ---- PS C: \> Get-Process Denne kommandoen får en liste over alle løpende prosesser som kjører på den lokale datamaskinen. For en definisjon av hver kolonne, se avsnittet "Tilleggsbeskrivelser" i Hjelpemnet for Get-Help. -------------------------- Eksempel 2 ---------------------- ---- PS C: \> Get-Process winword, explorer | format-liste *

PowerShell fungerer enkelt med webtjenester

W3C definerer en "Web-tjeneste" som:

[...] et programvare system utviklet for å støtte interoperabel maskin-til-maskin interaksjon over et nettverk. Den har et grensesnitt som beskrives i et maskinprosessabelt format (spesielt WSDL). Andre systemer samhandler med webtjenesten på en måte som er foreskrevet av beskrivelsen ved hjelp av SOAP-meldinger, vanligvis overført ved hjelp av HTTP med en XML-serialisering i forbindelse med andre web-relaterte standarder.

PowerShell gjør rask arbeid av Webservices, ved hjelp av New-WebServiceProxy cmdlet. Endre $ postnummer, løp det og få den siste værinformasjonen.

$ zipCode = "96826" $ svc = Ny-WebServiceProxy http://wsf.cdyne.com/WeatherWS/Weather.asmx $ result = $ svc.GetCityForecastByZIP ($ zipCode) # Forvandle resultatene $ result.ForecastResult | ForEach [PSCustomObject] @ City = $ result.City State = $ result.State Date = $ _. Date.ToString ("d") Beskrivelse = $ _. Beskrivelse DaytimeHigh = $ _. TemperaturesDaytimeHigh

Resultat

Jeg lagrer proxy objektet i $ SVC og ring deretter GetCityForecastByZIP metode, innfange resultatene i $ resultat. Løper gjennom ForecastResult-arrayet, forvandler jeg posten på dataene. Legg merke til at By og DaytimeHigh er på forskjellige nivåer i hierarkiet.

Teknikken jeg bruker er å skape nøkkel / verdi par for hashtable. @ er PowerShell syntaks for en ny hashtable. Ved hjelp av [PSCustomObject] er en PowerShell akselerator, som tillater meg å lage et egendefinert objekt fra en hashtable.

De Weather.asmx webservice returnerte hierarkisk XML. I en håndfull PowerShell-kommandoer formaterte jeg dataene og formaterte den (Date) etter min smak. For dette eksempelet valgte jeg å la PowerShell skrive ut det. Når jeg har dataene i PowerShell-økten, er jeg nå koblet til PowerShell-økosystemet og kan lett røre denne rekke egendefinerte objekter til andre cmdlets for å skyve den til en annen webtjeneste, generere HTML, lagre den i en fil, opprette en CSV fil eller eksporter den til en SQL-database.

Bystat Dato Beskrivelse DagtimeHøyde ---- ----- ---- ----------- ----------- Honolulu HI 5/22/2013 Dusjer 76 Honolulu HI 5/23/2013 For det meste 76 Honolulu HI 5/24/2013 For det meste 77 Honolulu HI 5/25/2013 For det meste 77 Honolulu HI 5/26/2013 For det meste 77 Honolulu HI 5/27/2013 For det meste 77 Honolulu HI 5/28/2013 Delvis skyet 77

Arbeider med CSV, JSON og XML

Tekstformater for skiving og dicing er et PowerShell-søtsmål. Her konverterer jeg tre vanlige formater til et PowerShell-objekt. For CSV og JSON bruker jeg riktig ConvertFrom- * cmdlets, og for XML, vil jeg bruke akselerator som tar XML og lager et XMLDocument.

# Bruk CSV $ csv = "Name, Age'r'nJohn, 10" | ConvertFrom-Csv $ csv Navn Alder ---- --- John 10 # Bruk JSON $ json = "Navn: 'Tom', Alder: 20" | ConvertFrom-Json $ json Navn Alder ---- --- Tom 20 # Bruk XML $ xml = ([xml] [/ xml] "Harry30") .data.record $ xml Navn Alder ---- --- Harry 30 # Kombiner alle tre $ csv, $ json, $ xml Navn Alder ---- --- John 10 Tom 20 Harry 30 # Legg opp aldre $ csv, $ json, $ xml |% $ sum = 0 $ sum + = $ _. alder $ sum 60

Så tok vi tre heterogene formater, og på slutten utførte vi en aggregering over ett av feltene. Jeg kunne ha hentet hver av disse datafeedene fra forskjellige steder, dele CSV fra et nettverk, JSON for en REST-spørring og XML fra en webtjeneste. Som jeg sa, er dette et PowerShell-søtsmål.


Twitter Søk

La oss bruke Twitters søk REST API på kommandolinjen. Jeg konstruerer Url, som du kan bruke i nettleseren din, og deretter bruker jeg PowerShell cmdlet Påkall-RestMethod. Den sender en forespørsel til REST-tjenesten og bestemmer om svaret er XML eller JSON. Her ber jeg om et JSON-svar, Påkall-RestMethod konverterer resultatene til en rekke PowerShell-objekter. Jeg rører dem til Å velge cmdlet (et alias av verb-substantivet Velg-Object) velger å bare tre felt. Tenk på dette som en projeksjon, som ligner på LINQ eller SQL.

$ query = "PowerShell" $ url = "http://search.twitter.com/search.json?q=$query" (Invoke-RestMethod $ url) .resultater | Velg created_at, from_user_name, text

Resultat

Det er så enkelt. Sjekk ut en video jeg gjorde for versjon 2: "PowerShell, ShowUI og Twitter API". En mini WPF Twitter app i håndfull PowerShell.

created_at from_user_name tekst ---------- -------------- ---- lørdag, 25. mai 2013 vitor pombeiro @brunomlopes a falar sobre Powershell "i minha maneira" lør , 25. mai 2013 Jeffery Hicks Visste du at #PowerShell ISE har oppstartsmuligheter? I lørdag, 25. mai 2013 Pat Richard @ mwjcomputing Yeah - hadde alltid brukt $ MyInvocation.MyCom lørdag, 25. mai 2013 Rob Fairman "#PowerShell Script for Clearing #Windows Event Logs" ht lør, 25. mai 2013 Jim Priestley automatiserer SharePoint Deployments i Windows #Azure usin lørdag, 25. mai 2013 VT Technology RT @jangwoo_park: @ VTTechnology: Eksporter flere virtuelle lør, 25. mai 2013 Aryan Nava Bruke PowerShell å vise Nettsted opprettet på forrige da lør, 25. mai 2013 Aryan Nava PowerShell Tips for SQL Server http://t.co/lVW2AY5BYZ Lør, 25. mai 2013 Privat Cloud Tech Reisen til Privat Cloud Del 3 - Infrastruc Sat, 25. mai 2013 Dr Tom Shinder Reisen til Private Cloud Part 3 â € " "The Infrastruc Sat, 25. mai 2013 Jacob Daniels RT @tech_faq: Windows Server Manager er basert på Windows Sat, 25. mai 2013 CodeCruiser 10 tips for SQL Server PowerShell Scripter http: // t.

Kompilere C # på fly i PowerShell

PowerShell er et tolket språk. Så vil det bli en straff. Det er ikke en stor bekymring, men noen ganger trenger du hastigheten på et kompilert språk. PowerShell lar deg kompilere C # i fly i minnet i PowerShell-økten din, ved å bruke -TypeDefinition parameter på Legg-Type cmdlet. Legg merke til her-string identifisert av @ "" @. De er veldig nyttige når du siterer tekst. Jeg oppfordrer deg til å utforske mer med Legg-Type og PowerShells sitateregler.

Add-Type-TypeDefinition @ "offentlig klasse TestInline offentlig lang Fibonacci (lang n) lang a = 0; lang b = 1; for (lang idx = 0; idx < n; idx+=1)  long temp = a; a = b; b = temp + b;  return a;   "@ $obj = New-Object TestInline 1… 10 | ForEach  $obj.Fibonacci($_) 

Samhandler med DLLS

Nå, la oss si at jeg ikke ga deg kildekoden - bare den kompilerte DLL. Ikke noe problem: Legg-Type har en -Sti parameter.

Add-Type -Path. \ FibLib.dll $ obj = Testobjekt for nytt objekt 1 ... 10 | ForEach $ obj.Fibonacci ($ _)

Vær særlig oppmerksom på dette. Ved hjelp av Legg-Type Denne måten er hvordan du enkelt kan pakke inn noen. NET DLL fra noen, hvis de ikke allerede har gitt et PowerShell-grensesnitt. Dette er sant om DLL er fra Microsoft, DELL, Citrix eller en annen utvikler.


I Avslutning

Så det gjør det for nå. Vil du se mer Powershell-spesifikt innhold på Nettuts +? Gi oss beskjed nedenfor!