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.
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å..
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.
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.
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.
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
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
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 *
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
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
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] "") .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 Harry 30
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.
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
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.
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($_)
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.
Så det gjør det for nå. Vil du se mer Powershell-spesifikt innhold på Nettuts +? Gi oss beskjed nedenfor!