Go pro: Strömanvändarhandboken till PowerShell

Om du har kämpat med Windows 10 har du utan tvekan hört talas om PowerShell. Om du nyligen har försökt göra något snyggt med Win7 / 8.1, kommer PowerShell förmodligen också upp. Efter år av att ha förlitat sig på Windows-kommandoraden och slungade batchfiler är det dags att sätta sikte på något mer kraftfullt, mer anpassningsbart - bättre.

PowerShell är ett enormt tillskott till Windows verktygslåda, och det kan framkalla lite rädsla med tanke på den enorma omfattningen. Är det ett skriptspråk, ett kommandoskal, ett golvvax? Måste du länka en cmdlet med en instantierad .Net-klass för att kunna köras med leverantörer? Och varför pratar alla supportdokument om administratörer - måste jag vara en professionell Windows-administratör för att kunna använda det?

koppla av. PowerShell är kraftfullt, men det behöver inte vara skrämmande.

Följande guide riktar sig till dem som har kört ett Windows-kommando eller två eller jimmied en batchfil. Betrakta det som en steg-för-steg-omvandling från PowerShell nyfiken till PowerShell-kapabel.

Steg 1: Vrid upp det

Det första du behöver är PowerShell själv. Om du använder Windows 10 har du redan PowerShell 5 - den senaste versionen - installerad. (Win10 Anniversary Update har 5.1, men du vet inte skillnaden med Fall Update's 5.0.) Windows 8 och 8.1 levereras med PowerShell 4, vilket är tillräckligt bra för att dina fötter ska bli blöta. Installera PowerShell på Windows 7 är inte svårt, men det tar extra försiktighet - och du måste installera .Net Framework separat. JuanPablo Jofre beskriver hur man installerar WMF 5.0 (Windows Management Framework), som inkluderar PowerShell, förutom verktyg som du sannolikt inte kommer att använda när du startar, på MSDN.

PowerShell erbjuder två gränssnitt. Avancerade användare kommer att gå till det fullständiga GUI, känt som ISE (Integrated Scripting Environment). Nybörjare betjänas dock bäst av PowerShell Console, ett enkelt textgränssnitt som påminner om Windows-kommandoraden eller till och med DOS 3.2.

För att starta PowerShell som administratör från Windows 10, klicka på Start och bläddra ner listan över appar till Windows PowerShell. Klicka på den raden, högerklicka på Windows PowerShell och välj Kör som administratör. I Windows 8.1 letar du efter Windows PowerShell i Windows systemmapp. I Win7 finns det i mappen Tillbehör. Du kan köra PowerShell som en ”normal” användare genom att följa samma sekvens men med ett vänsterklick.

I valfri version av Windows kan du använda Windows-sökning för att leta efter PowerShell. I Windows 8.1 och Windows 10 kan du placera den på din Ctrl-X "Power-meny" (högerklicka på en tom plats i aktivitetsfältet och välj Egenskaper. På fliken Navigation markerar du rutan för Ersätt kommandotolken). När du väl har öppnat det är det en bra idé att fästa PowerShell i din aktivitetsfält. Ja, du kommer att gilla det så mycket.

Steg 2: Skriv gammaldags Windows-kommandon

Du skulle bli förvånad över hur mycket Windows-kommandoradsyntax fungerar som förväntat i PowerShell.

Ändrar till exempel cdkataloger (aka mappar) och dirlistar fortfarande alla filer och mappar som ingår i den aktuella mappen.

Beroende på hur du startar PowerShell-konsolen kan du börja vid c:\Windows\system32eller vid c:\Users\. I skärmdumpsexemplet använder jag cd ..(notera utrymmet) för att flytta upp en nivå åt gången och kör sedan för diratt lista alla filer och undermappar i C:\katalogen.

Steg 3: Installera hjälpfilerna

Kommandon som cdoch dirinte är inbyggda PowerShell-kommandon. De är alias - ersätter riktiga PowerShell-kommandon. Alias ​​kan vara praktiskt för oss som har svårt att övervinna fingerminne. Men de börjar inte ens röra vid de viktigaste delarna av PowerShell.

För att börja få en känsla för PowerShell själv, skriv helpföljt av ett kommando du känner. I skärmdumpen skriver jag till exempel help dir.

PowerShell-hjälp berättar att det dirär ett alias för PowerShell-kommandot Get-ChildItem. Visst nog, om du skriver get-childitemvid PS C:\>prompten ser du exakt vad du såg med dirkommandot.

Som noteras längst ner på skärmdumpen installeras inte hjälpfiler för PowerShell automatiskt. För att hämta dem (du inte vill få dem), logga in på Power i administratörsläge, skriv sedan update-help. Installationen av hjälpfilerna tar flera minuter och du kanske saknar några moduler - Hjälp för NetWNV och SecureBoot kunde inte installeras på min testmaskin. Men när du är klar kommer det kompletta hjälpsystemet att vara på plats.

Från och med den tiden skriver du get-helpföljt av kommandot ("cmdlet" i PowerShell speak, uttalas "command-let") som berör dig och ser all hjälp för det objektet. Till exempel get-help get-childitemproducerar en sammanfattning av get-childitemalternativen. Det uppmanar dig också att skriva in variationer på temat. Följaktligen följande:

get-help get-childitem -examples

producerar sju detaljerade exempel på hur man använder get-childitem. PowerShell-kommandot

get-help get-childitem -detailed

innehåller de sju exemplen, samt en detaljerad förklaring av alla parametrar som är tillgängliga för get-childitemcmdlet.

Steg 4: Få hjälp med parametrarna

help dirskärmdumpen kanske du har märkt att det finns två listor under SYNTAXför get-childitem. Det faktum att det finns två separata syntaxer för cmdlet betyder att det finns två sätt att köra cmdlet. Hur håller du syntaxerna åtskilda - och vad betyder parametrarna? Svaret är enkelt om du känner till tricket.

För att få all information om parametrar för get-childitemcmdlet eller någon annan cmdlet, använd -fullparametern så här:

get-help get-childitem -full

Det ger en rad för rad-lista över vad du kan göra med cmdlet och vad som kan (eller kanske inte!) Hända. Se skärmdumpen.

Genom att bläddra igenom parameterdetaljerna är det rimligt lätt att se att det get-childitemkan användas för att hämta "underordnade" objekt (t.ex. namnen på undermappar eller filnamn) på en plats som du anger, med eller utan specifika teckenmatchningar. Till exempel:

get-childItem “*.txt” -recurse

hämtar en lista över alla " *.txt" filer i den aktuella mappen och alla undermappar (på grund av -recurseparametern). Med beaktande av följande:

get-childitem “HKLM:\Software”

returnerar en lista med alla registernycklar på hög nivå i HKEY_LOCAL_MACHINE\Software.

Om du någonsin har försökt komma in i registret med en Windows-kommandorad eller en batchfil är jag säker på att du kan se hur kraftfull den här typen av åtkomst måste vara.

Steg 5: Spika ner namnen

Det finns en anledning till varför de cmdlets som vi har sett hittills ser likadana ut: get-childitem, update-helpoch get-helpalla följer samma verb-substantiv konventionen. Barmhärtigt använder alla PowerShells cmdlets denna konvention, med ett verb som föregår ett (singular) substantiv. De av er som tillbringade veckor med att kämpa över inkonsekvent namngivna VB- och VBA-kommandon kan andas lättnad.

För att se vart vi ska ta en titt på några av de vanligaste cmdletarna (tack vare Ed Wilsons Hey, Scripting Guy! -Blogg). Börja med cmdlets som når ditt system och dra ut användbar information, som följande:

  • set-location: Ställer in den aktuella arbetsplatsen till en specifik plats
  • get-content: Hämtar innehållet i en fil
  • get-item: Hämtar filer och mappar
  • copy-item: Kopierar ett objekt från en plats till en annan
  • remove-item: Raderar filer och mappar
  • get-process: Hämtar de processer som körs på en lokal eller fjärrdator
  • get-service: Hämtar tjänsterna som körs på en lokal eller fjärrdator
  • invoke-webrequest: Hämtar innehåll från en webbsida på internet

För att se hur en viss cmdlet fungerar, använd get-helpsom i

get-help copy-item -full

Baserat på hjälpbeskrivningen kan du lätt ta reda på vad cmdlet vill ha. Om du till exempel vill kopiera alla dina filer och mappar från Documentstill c:\temp, skulle du använda:

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

När du skriver in det kommandot ser du några fina detaljer inbyggda i PowerShell-miljön. Om du till exempel skriver copy-ioch trycker på Tab-tangenten fylls PowerShell i Copy-Itemoch ett mellanslag. Om du fel skriver in en cmdlet och PowerShell inte kan räkna ut det får du en mycket grundlig beskrivning av vad som gick fel.

Prova den här cmdleten. (Det kan försöka få dig att installera ett program för att läsa rutan "om". Om så är fallet, ignorera det.)

invoke-webrequest askwoody.com

Du får en kortfattad lista över webbsidans innehållsdeklarationer, rubriker, bilder, länkar och mer. Se hur det fungerar? Observera i get-helplistan invoke-webrequestatt invoke-webrequestcmdlet ”returnerar samlingar av formulär, länkar, bilder och andra viktiga HTML-element” - exakt vad du ska se på skärmen.

Vissa cmdlets hjälper dig att kontrollera eller groka PowerShell själv:

  • get-command: Listar alla tillgängliga cmdlets (det är en lång lista!)
  • get-verb: Listar alla tillgängliga verb (cmdlets vänstra halvor)
  • clear-host: Rensar displayen i värdprogrammet

Olika parametrar (kom ihåg, get-help) gör att du kan minska kommandona och begränsa alternativ som kan vara till nytta för dig. För att till exempel se en lista över alla cmdletar som fungerar med Windows-tjänster, prova detta:

get-command *-service

Den listar alla verb som är tillgängliga med servicesom substantiv. Här är resultatet:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Du kan kombinera dessa cmdlets med andra cmdlets för att gräva ner i nästan vilken del av PowerShell som helst. Det är där rör kommer in i bilden.

Steg 6: Ta in rören

Om du någonsin har använt Windows-kommandoraden eller slog igenom en batchfil vet du om omdirigering och rör. Enkelt uttryckt tar både omdirigering (  >karaktär) och rör ( |karaktär) resultatet från en åtgärd och klistrar det någon annanstans. Du kan till exempel omdirigera utdata från ett dirkommando till en textfil eller "pipa" resultatet av ett pingkommando till a find, för att filtrera bort intressanta resultat, så här:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

I det andra kommandot ovan findletar kommandot efter strängen packetsi den pipade utgången på en askwoody.com pingoch klistrar alla rader som matchar i en fil som heter temp2.txt.

Kanske överraskande fungerar den första av dessa kommandon bra i PowerShell. För att köra det andra kommandot vill du ha något liknande:

ping askwoody.com | select-string packets | out-file temp2.txt

Att använda omdirigering och pipor utökar kraftigt Windows-kommandoradsfunktionerna: I stället för att bläddra oändligt ner på en skärm och leta efter en textsträng, till exempel, kan du sätta ihop ett piped Windows-kommando som gör kontrollen åt dig.

PowerShell har en rörförmåga, men det är inte begränsat till text. Istället låter PowerShell dig skicka ett helt objekt från en cmdlet till nästa, där ett "objekt" är en kombination av data (kallas egenskaper) och de åtgärder (metoder) som kan användas på data.

Den svåra delen ligger dock i att anpassa objekten. Den typ av objekt som levereras av en cmdlet måste matcha de typer av objekt som accepteras av den mottagande cmdleten. Text är en mycket enkel typ av objekt, så om du arbetar med text är det enkelt att ställa in objekt. Andra föremål är inte så rudimentära.

Hur räknar man ut det? Välkommen till get-membercmdlet. Om du vill veta vilken typ av objekt en cmdlet producerar, rör den igenom get-member. Om du till exempel försöker räkna ut de processer som körs på din dator och du har begränsat alternativen till get-processcmdleten, så här får du reda på vad get-processcmdleten producerar:

get-process | get-member

Att köra det kommandot ger en lång lista med egenskaper och metoder för get-process, men i början av listan kan du se vilken typ av objekt som get-process skapar:

TypeName: System.Diagnostics.Process

Nedanstående skärmdump berättar också att get-processhar egenskaper kallas Handles, Name, NPM, PM, SI, VM, och WS.

Om du vill manipulera utdata från get-processså att du kan arbeta med den (i motsats till att den visar en lång lista med aktiva processer på bildskärmen), måste du hitta en annan cmdlet som fungerar System.Diagnostics.Processsom ingång. För att hitta en villig cmdlet använder du helt enkelt ... vänta på den ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

Det ger en lista över alla cmdlets som kan hantera System.Diagnostics.Process.

Vissa cmdlets är ökända för att ta nästan alla typer av inmatningar. Främst bland dem where-object. Kanske förvirrande, where-objectslingor genom varje objekt som skickas ner rörledningen, en efter en, och tillämpar de urvalskriterier du begär. Det heter en speciell markör $_. som låter dig gå igenom varje objekt i röret, en i taget.

Anta att du ville komma med en lista över alla processer som körs på din maskin som kallas " svchost" - i PowerShell tala vill du matcha på en Nameegenskap av  svchost. Prova det här PowerShell-kommandot:

get-process | where-object {$_.Name -eq “svchost”}

De where-objectcmdlet ser på varje System.Diagnostics.Processobjekt, jämför .Namemed den posten till ” svchost”; om objektet matchar blir det spottat i rörets ände och skrivs på din bildskärm. Se skärmdumpen.