Bygg ett fullständigt PowerShell-verktyg
den här artikeln är en textversion av en lektion från vår PowerShell och Active Directory Essentials video course (använd kod ”blogg” för fri åtkomst).
kursen har visat sig vara riktigt populär eftersom det går igenom att skapa ett fullständigt Active Directory management-verktyg från första principer.,
få gratis PowerShell och Active Directory Essentials Video Course
kodning med Power
det kan vara svårt att komma igång med PowerShell, speciellt om du genom åren har blivit van vid att arbeta med CMD.exe kommandoraden eller batch-filer., I den här artikeln (baserat på Lektion 2 i vår PowerShell och Active Directory-kurs) täcker vi hur och varför du ska uppgradera dina färdigheter till PowerShell och grunderna för att starta PowerShell-redigeraren, kommandokomplettering och hur du alltid får uppdaterad hjälp och exempel.
kör kommandon
PowerShell-konsolen är en interaktiv konsol som låter dig köra olika kommandon i realtid. Det finns inget behov av att redigera ett skript i anteckningsblock och kör det separat, en stor tidsbesparare.,
om du är i någon organisation som har funnits under en längre tid har du förmodligen redan fått några mindre skript, bat-filer eller procedurer som du kör från cmd.exe kommandoraden. Goda nyheter! Du kan åberopa allt detta från med PowerShell, detta var ett djupt designbeslut från Microsoft som de försökte göra övergången så enkelt som möjligt för sysadmins.
i utseende ser PowerShell-redigeraren ut och fungerar precis som cmd.exe kommandotolken miljö., De verktyg och färdigheter du redan vet kommer att fungera inom PowerShell just nu utan modifiering. Om du arbetar med att göra övergången från enstaka uppgifter för att möjliggöra ett mer automatiserat nätverk, är det ett bra sätt att starta att få vana att skjuta upp PowerShell istället för kommandotolken.
alla dina ofta använda verktyg som ping, ipconfig, dir, etc kommer alla att fungera precis som du har kommit att förvänta dig.
hur man hittar Powershell kommandon
människor älskar PowerShell eftersom det är så, ja, kraftfull., Men den kraften kommer från en helt galen mängd komplexitet. Det är bara inte möjligt eller praktiskt för någon att memorera alla olika kommandon, cmdlets, flaggor, filter och andra sätt att berätta PowerShell vad man ska göra.
Tack och lov, inbyggd direkt i redigeraren är flera verktyg som hjälper dig att hantera detta faktum.
tab Completion
det finns ingen anledning att memorera alla olika kommandon eller exakt stavning av ett kommando., Skriv
get-c
in i editorn och tryck på TAB – tangenten-du cyklar igenom alla kommandon som börjar med vad du hittills har skrivit in. Detta fungerar på någon del av kommandot du försöker åberopa, namnet (som visas nedan), men även flaggor och vägar som du manipulerar för att få önskat resultat.
Get-Command
medan flikkomplettering fungerar bra, vad händer om du inte känner till namnet på kommandot du letar efter? I så fall skulle du använda ett kommando för att hitta andra kommandon: Get-kommando.,
När du söker efter kommandon är det viktigt att komma ihåg att det finns en syntax för dem: VERB-substantiv. Vanligtvis är verben saker som Get, Set, Add, Clear, Write and Read och substantiv är filer, servrar eller andra objekt i ditt nätverk och program.
Get-Command är ett sökverktyg för att utforska de kommandon som finns tillgängliga på ditt system.,
Powershells kommandosyntax
någon beskrev en gång Perl – skriptspråket som att se ut som ”körbart linjebuller” – ett otroligt användbart verktyg med en vilt ogenomskinlig syntax och en motsvarande hög inlärningskurva.
Även om det inte är riktigt till den nivån är den traditionella kommandotolken i Windows inte för långt borta. Tänk på en gemensam uppgift som att hitta alla objekt i en katalog vars namn börjar med strängen ”Foo”.
CMD: FOR /D /r %G in ("Foo*”) DO @Echo %G
För och indikerar att det är en slinga.,
/D flagga visar att detta är för Kataloger
/r-flaggan visar att ”Filer Rotade på Väg”
Det mönster som definierar uppsättningen av filer som ska loopas över betecknas med ”i”
@Echo instruerar skript för att skriva ut resultatet av varje slinga och slutligen
%G är den ”implicita parameter” och har valts eftersom tidigare utvecklare redan hade använt den sökväg format bokstäverna a, d, f, n, p, s, t, och x. Så, vi börjar med G är traditionella som det ger dig den största uppsättning av outnyttjade bokstäver returneras variabler ( G, H, i, J, K, L, M) – med andra ord, det är ett fult hack.,
jämför det med PowerShell-ekvivalenten:
PowerShell: Get-ChildItem -Path C:\Example -Filter ‘Foo*’
utmatningen är funktionellt densamma, men även i det här ganska triviala exemplet är det mycket lättare att förstå vad som händer. Det är omedelbart uppenbart vad alla element i kommandot gör och hur du kan ändra dem. Det enda något icke-uppenbara här är * jokertecken (finns i båda exemplen) vilket indikerar att mönstret som används för att matcha objekt ska börja med ” Foo ” och sluta i något annat.,
det blir bara bättre härifrån som säger att du vill veta hur man identifierar bara filer (inte kataloger) i sökvägen? Du kan gräva upp docs, Google runt och försöka sortera ut det med kommandoradsversionen, eller om du är i PowerShell, skriv ”-” och tryck på tab-tangenten och rulla genom flaggalternativen tills den uppenbara lösningen dyker upp.
en stor sträng vs Objektegenskaper
servrar är inte bra för någon om de inte är online., Det är därför som människor spenderar en orimlig tid på att låtsas att de är sonaroperatörer på en ubåt och ping ’ in dem (ja, det är faktiskt därför det heter det – https://en.wikipedia.org/wiki/Ping_(networking_utility)
medan utgången från ping är användbar (och du kan använda ping inom PowerShell), är utgången i slutet av dagen bara en stor sträng – en serie brev-och nummertecken utan definierade raster mellan dem).
PowerShell har ett kommando som är analogt med ping, men som returnerar data som är strukturerade, vilket gör det enkelt att arbeta med. Det kommandot är Test-anslutning.,
nedan kan du se utdata från pinga en server (heter ” DC ” på deras lokala nätverk) och motsvarande test-anslutning utgång.
att lägga undan att det är lättare att läsa, det som verkligen är viktigt är att du nu kan skicka den här informationen till ett annat kommando, införliva det i ett större verktyg (eftersom den här hela kursen arbetar mot) eller bara tweak det så att det är mer meningsfullt.,
Geting Help System
fram till nu har vi fokuserat på hur man manipulerar ett visst kommando som du befinner dig mitt i det (via flikkomplettering), men när du börjar göra mer och mer med PowerShell blir kommandona mer komplexa med ännu mer komplexa alternativ. Medan verb-substantivet syntax hjälper, Vad hjälper, ännu mer, har:
1. Uppdaterad dokumentation
2. Massor av exempel
CmdLet Help
i praktiken bör du kombinera Get-Command (för att hitta vad du ska använda) och sedan använda Get-Help för att ta reda på hur du använder det specifika kommandot.,
ett praktiskt exempel på hur man gör detta: Antag att du måste identifiera alla Windows-tjänster som körs på en dator.
du skulle börja med att leta efter kommandon för serviceinteraktion:
Get-Command service
vilket skulle berätta för dig att du var på rätt spår. Tänka tillbaka till standard verb-substantiv syntax av PowerShell kommandon, du vill undersöka hur man korrekt använder ”Get-Service”.
Microsoft Office Get-service dokumentation
för detta skulle du använda ett nytt kommando ”Get-Help”., Börja med att skriva
”Get-Help -” och tryck på Tab-tangenten
Du hittar snabbt de tillgängliga alternativen, den mest självklart lämpliga är ”- Name”, så du skulle försöka:
Get-Help -Name Get-Service
omedelbart får du hela syntaxen (och att du kan inkludera eller utesluta namn baserat på filter).,
om du ville fördjupa dig i en viss aspekt av kommandot kan du borra ner vidare med Get-Help, inklusive varje parameter
Get-Help -Name Get-Service - Parameter Name
PowerShell Hjälp exempel
eftersom vi är alla människor som läser detta (inget brott Google bot), har vi samma mentala hinder att övervinna med avseende på att mönsterigenkänning och översätta abstrakta kommandosyntaxer till vad vi faktiskt ska skriva för att uppnå vad vi behöver för att få igenom dagen.,
genom att ange i ”-examples” eller inkluderas i ”-detail”-flaggan för Get-Help, kommer du att presenteras med en uppsättning exempel för att använda kommandot.
här är utgången för:
Get-Help -Name Get-Service -Examples
håller dig uppdaterad
ingenting är mer frustrerande än att skriva in exakt vad ett exempel säger att du borde, bara för att det inte ska fungera som dokumenterat. Ofta orsakas detta av föråldrad dokumentation, dåliga exempel eller uppdaterade bibliotek.,
kringgå dessa frustrationer samt få nya exempel och fixar med kommandot
update-help
. du startar nedladdningsprocessen.
nästa steg med PowerShell
vill du veta mer? Använd upplåsningskod ”blogg” för fri tillgång till full PowerShell och Active Directory Essentials video course.