Microsoft PowerShell er en fantastisk scripting-platform. Microsoft tilbyder PowerShell-understøttelse for næsten alle Windows Server-roller og -funktioner. Du kan bruge PowerShell til at automatisere gentagne opgaver samt til nemt at udføre opgaver ved hjælp af kommandolinjen, som du normalt udfører ved hjælp af GUI-værktøjerne. Hvis du f.eks. i et produktionsmiljø skal kontrollere patchingstatus på Windows-servere, er det meget nemmere at bruge PowerShell-scriptingmetoden end at oprette forbindelse til hver server enkeltvis og derefter kontrollere patchingstatus. Jeg er en regelmæssig bruger af PowerShell og har designet tusindvis af PowerShell-scripts i mine 18 års it-erfaring.
For PowerShell var det primære scriptingsprog til at udføre Windows-driftsopgaver Visual Basic Scripting. Selv om Visual Basic Scripting stadig eksisterer, og mange it-administratorer stadig foretrækker at bruge VB-scripting, er det værd at nævne, at PowerShell reducerer kompleksiteten af koden. Hvis du f.eks. vil kontrollere tjenesterne på en Windows-computer, skal du skrive VBScript-koden i en notesblok, gemme filen som .VBS og derefter udføre den ved hjælp af CSCript-værtsudførelsesfilen. Men ved at bruge PowerShell kan du bruge en simpel Get-Service cmdlet, der kan hjælpe dig med hurtigt at liste tjenester fra en Windows-computer. Hvis du havde brug for at gemme output til en fil ved hjælp af VB-script, skal du igen skrive en masse kode i VB-scriptet, som indebærer åbning af fil, og derefter skrivning af indholdet til filen. PowerShell kræver bare ikke, at du skal åbne filen, før det indhold, der hentes af en PowerShell-cmdlet, kan skrives til en fil. Du skal blot bruge “Export-CSV” eller “Add-Content” cmdlets.
Cmdlets: PowerShell-skripternes byggesten
PowerShell tilbyder cmdlets (udtales “command-lets”), der undertiden kaldes kommandolinjeværktøjer, som du kan bruge til at få oplysninger om operativsystemet, programmer, der er installeret på en Windows-computer, netværksoplysninger, patchingstatus på Windows-computeren og meget mere. Det er vigtigt at bemærke, at PowerShell cmdlets er skrevet i .NET og bruger .NET-klasser til at udføre de nødvendige opgaver. Hvis du vil finde ud af, hvilke PowerShell-cmdlets der er tilgængelige på den lokale computer, skal du udføre denne kommando:
Get-Command
Get-Command er en PowerShell-cmdlet, der henter cmdlets, funktioner, filtre og PowerShell-scripts, der er installeret på den lokale computer. Ovenstående kommando forespørger alle de PowerShell-moduler, der er installeret på den lokale computer. Hvis du har brug for at se alle kommandoer, der er installeret på den lokale computer, i en rækkefølge, skal du udføre denne kommando:
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
Tre typer PowerShell-operationer
Med PowerShell kan du udføre tre typer operationer. De er Get, Set og Remove. Alle PowerShell-cmdlets, der starter med “Get”, bruges typisk til at hente oplysninger fra Windows-komponenter. Get-ADUser udfører f.eks. en læseoperation mod Active Directory-databasen for at hente brugeroplysningerne. Et par eksempler på brug af Get-ADUser PowerShell-cmdlet er vist nedenfor:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com”
Overstående kommando henterer alle brugerkonti, der befinder sig i en organisatorisk enhed, mens nedenstående kommando henterer egenskaber, der er knyttet til en enkelt Active Directory-bruger:
Get-ADUser -Identity JohnThomas -Properties *
PowerShell-cmdlets, der begynder med “Set”, bruges til at redigere Windows-komponentoplysninger. Ved at bruge Set-ADUser kan du f.eks. udføre forskellige operationelle opgaver som vist i nedenstående kommandoer:
Set-ADUser -Identity JohnThomas -HomeFolder \\Server1\%UserName%
Med nedenstående kommandoer indstiller du mail-egenskaber for brugeren JohnThomas.
$ThisUser = Get-ADUser -Identity JohnThomas -Properties Mail
$ThisUser.Mail = [email protected]
Set-ADUser -Instance $ThisUser
Alle PowerShell-cmdlets, der begynder med “Remove”, bruges til at udføre sletningsoperationer. F.eks. kan Remove-ADUser bruges til at fjerne en Active Directory-bruger som vist nedenfor:
Remove-ADUser -Identity JohnThomas
Kombination af PowerShell-cmdlets
En af de bedste funktioner, som PowerShell tilbyder, er muligheden for at kombinere to eller flere PowerShell-cmdlets i en enkelt PowerShell-kommando. Sådanne kommandoer kaldes nogle gange for one-liner PowerShell-kommandoer. Hvis du f.eks. skal fjerne alle deaktiverede brugerkonti fra Active Directory, kan du kombinere Search-ADAccount og Remove-ADUser PowerShell-cmdlets som vist i kommandoen nedenfor:
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq “User”} | Remove-ADUser
Som du kan se i ovenstående kommando udfører Search-ADAccount PowerShell-cmdletten en søgning i hele Active Directory for at finde deaktiverede konti, og ved at bruge pipe-operatoren (|) instruerer du derefter Remove-ADUser til kun at udføre en sletningsoperation på de brugere, der er hentet af Search-ADAccount.
PowerShell aliaser
Selv om mange PowerShell cmdlets er lette at læse og bruge, tilbyder PowerShell også en funktion, der kaldes PowerShell alias. PowerShell er smart nok til at supplere navnet på en PowerShell cmdlet med et tryk på Tab-tasten. Hvis du har svært ved at huske navnet på PowerShell cmdlets, kan du oprette PowerShell aliaser. Du kan f.eks. oprette et alias for PowerShell-cmdletten Get-MailBoxStatistics ved hjælp af nedenstående kommando:
New-Alias ShowMB Get-MailBoxStatistics
Når du skriver “ShowMB” i PowerShell-vinduet, leder PowerShell efter den cmdlet, der er knyttet til ShowMB-aliaset, og udfører den derefter.
Sparer oplysninger i en CSV-fil
Når det gælder om at gemme oplysninger i en CSV-fil, sparer PowerShell en masse arbejde med scripting. PowerShell indeholder “Export-CSV” cmdlet, som du kan bruge sammen med alle andre PowerShell cmdlets. Som standard viser enhver PowerShell-kommando, som du udfører, de resulterende oplysninger i PowerShell-kommandovinduet, medmindre du tilføjer Export-CSV til slutningen af kommandoen, som vist i kommandoen nedenfor:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com” | Export-CSV C:\Temp\AllUsersInAnOU.CSV
Bemærk, at du i ovenstående kommando blot tilføjer “Export-CSV” i slutningen af kommandoen for at få output eksporteret i en CSV-fil.
Som du kan se, reducerer PowerShell-scripts den tid, det tager at udføre daglige driftsopgaver. PowerShell er i stand til at udføre tre operationelle opgaver; Get, Set og Remove, og 97 procent af PowerShell cmdlets starter med disse tre ord for nemt at identificere funktionen af en PowerShell cmdlet. Vi forklarede også, hvor nemt det er at kombinere to cmdlets i en enkelt kommando for at gøre dine PowerShell-scripts mere effektive.