16
PowerShell rapport Mathias Hauge

Du kan anvende WMI med henblik på at lave … · Web viewI Windows bruger man et utal af grafiske værktøjer så som diske, hændelseslogger, filer, mapper, filsystemer, netværkskomponenter,

  • Upload
    vancong

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

PowerShell rapportMathias Hauge

Aarhustech Powershell rapport Mathias Hauge

IndholdsfortegnelseDu kan anvende WMI med henblik på at lave opslag via Windows PowerShell. (WMI= Windows Management Instrumentation). 3

Du kan fejlfinde på sikkerheden omkring WMI. 5

Du kan anvende -whatif, -confirm og -transcript kommandoerne i Windows Powershell. 8

Du kan anvende Aliases i Windows Powershell. 10

Du kan oprette og bruge variabler i Windows Powershell 12

Aarhustech Powershell rapport Mathias Hauge

Du kan anvende WMI med henblik på at lave opslag via Windows PowerShell. (WMI= Windows Management Instrumentation).

WMI er et værktøj til at styre og overvåge og indhente information fra næsten alle ressourcer i Windows. Det bruges ofte i forbindelse med noget overvågning eller fejlfinding. Hvis WMI objekter bruges forbindelse med variabler og pipe. I Windows bruger man et utal af grafiske værktøjer så som diske, hændelseslogger, filer, mapper, filsystemer, netværkskomponenter, styresystem indstillinger, sikkerhed, oprettelse og styring af brugere, grupper, delinger osv. Alle disse værktøjer er afhængige af den samme ting nemlig Windows 32 API’er.WMI kan bruges i de fleste windows programmerings sprog da WMI jo henter fra WIN32 API’er, dette betyder at det kan bruges i PowerShell, Batch, Visutal Basic osv.

Man kan fx få oplyst alle oplysningerne

Get-WmiObject -class Win32_Battery

Aarhustech Powershell rapport Mathias Hauge

Det er nu muligt at udvælge hvilket som helst punkt på listen under battery og vælge dette ud, så hvis vi kun vil finde fx hvor meget batteri en computer har tilbage. Her kan man lave en Pipe, dette er hvor man tager en kommando fx vores Get-WmiObject -class Win32_Battery, så kan vi lave en pipe hvor vi definerer at vi gerne vil udvælge noget fra det information vi lige har fundet. Til dette bruger vi Select den fortæller at vi gerne vil udvælge noget ud fra det resultat den lige er kommet med og så vælger vi at vi gerne vil se EstimatedChargeRemaining. Så vores kommando kommer nu til at hedde Get-WmiObject -class Win32_Battery | select EstimatedChargeRemaining og nu får vi er meget mere overskueligt resultat.

Aarhustech Powershell rapport Mathias Hauge

Dette kan så skrive i fx en txt fil ved at bruge pibe | som før og så skrive out-file, som definerer at vi gerne vil ha’ dette resultat skrevet ud. Her efter vælger man hvor henne, samt navn. I dette tilfælde vil vi ha’ resultat ud i tekst og dokumentet skal hedde batteri. og vores linje ser nu således ud.

Get-WmiObject -class Win32_Battery | select EstimatedChargeRemaining | out-file C:\batteri.txt

Aarhustech Powershell rapport Mathias Hauge

Du kan fejlfinde på sikkerheden omkring WMI.

WMI har en begrænset sikkerhed der gør at hver burger bliver valideret før at de får lov til at forbinde til WMI på en lokal eller remote computer. Denne sikkerhed ligger sammen med styresystemets sikkerhed og WMI overskriver ikke eller undgår operativsystemets sikkerhed. Som standard har en lokal administrator fuld kontrol over WMI services på en computer. Medlemmer af administrator gruppen har også adgang til remote computere, men kan have begrænset adgang i forhold til hvilke WMI der kan ses. Alle andre brugere har read/write/execute rettigheder på deres egen lokal computer kun.

Disse rettigheder kan dog indstilles og ændres ved at tilføje en bruger til at administrator gruppe eller ved at autorisere bruger grupper i WMI og sætte deres permission level. Adgang til dette er baseret på WMI namespaces.

WMI sikkerheds indstillinger kan også konfigureres via WMI Control MMC snapin. Dette bruges til at konfigurere sikkerhedsen for WMI på en lokal maskine eller remote. Man skal dog have adgang til WMI repository på ens remote maskine for at kunne bruge WMI control snap-in. For at komme til WMI control security skal man ind i MMC (Microsoft Management Console), dette gøre på følgende måde.

1. Klik start Kør2. Skriv MMC Ok3. Vælg File Add/Remove Snap-in 4. klik add5. Vælg WMI Add6. Vælg Finish Ok

Aarhustech Powershell rapport Mathias Hauge

Efter at ha’ gjort dette kan man nu se WMI Control (local eller remote) i sit venstre fane.

Her er det muligt at højreklikke og vælge properties og under fanes security kan man nu se mappen root. Når man folder mappen root ud kan man i bunden finde mappen WMI. Ved at klikke på denne og vælge Security har man muligheder for at vælge hvilke brugere og grupper der skal ha’ rettigheder til hvilke ting når det kommer til WMI. Fx ting som

Aarhustech Powershell rapport Mathias Hauge

Execute Methods – Tillader metoder som er eksporteret fra WMI classes at blive kørt Full Write – Tillader fuld læse og skrive rettigheder samt muligheden for at slette WMI objekter,

classes og instances Partial Write – Tillader skrive rettigheder til statiske WMI objekter Provider Write – Tillader skrive rettigheder til objekter som tilføjelser af en provider. Enable Account – Tillader læse rettigheder til WMI objekter. Remote Enable – Tillader remote adgang til et namespace. Read Security – Tillader read-only rettigheder til WMI sikkerheds information. Edit Security – Tillader læse og skrive rettigheder til WMI sikkerheds information.

Efter man har konfigureret sine WMI sikkerheds indstillinger kan man klikke ok og lukke sit MMC vindue.

Aarhustech Powershell rapport Mathias Hauge

Du kan anvende -whatif, -confirm og -transcript kommandoerne i Windows Powershell.

Whatif kommandoen i powershell bruges til at teste resultatet og se hvilke outputs som kommer ved at skrive en given kommando uden at eksekvere den i virkeligheden. Altså man kan se hvilke ændringer som vil forkomme til fx et objekt uden egentligt at gøre det. Dette er en god måde at teste scripts på og sikre dig at fx dit script vil give dig det resultat du er efter før du comitter.

Ved nedenstående eksempel kan man se at jeg har lavet linjen

Rm whatifeksempel.txt

For at se hvad den kommando vil gøre kan jeg sætte -whatif efter og powershell fortæller mig hvad der ville ske hvis jeg kørte den kommando. Linjen vil nu se således ud

Rm whatifeksempel.txt -whatif

I outputtet får vi nu at vide at hvis vi køre den kommando så vil der ske følgende

”What if: performing the operation ”Remove File” on target ”C:\users\MHN\whatifeksempel.txt”

-confirm er en kommando som gør at du bliver promtet før noget bliver eksekveret. Det vil sige at hvis du har skrevet et script som gør at den skal slette nogle filer på en maskine, altså ikke din egen, og du kommer til at køre scriptet ved en fejl, så bliver du promtet for om det skal eksekveres. Det vil sige at du skal tage stilling til om scriptet må køres, på den måde undgår man at komme til at køre scripts og kommandoer ved en fejl.

Aarhustech Powershell rapport Mathias Hauge

Transcipt er en funktion i powershell som gør at alt outputtet fra en powershell session bliver logget til en tekst fil som man enten selv definerer med navn og sti, hvis ikke så laver powershell selv et navn og ligger den i Windows/system32 mappen. For at starte skriver man transcript-start og for at stoppe skriver man transcript-stop . Så hvis vi nu ville logge en session ville vi starte med at skrive Transcript-Start så ville man lave alle sine kommandoer osv og til sidst kunne man skrive Transcrpit-stop. Dette ville gøre at man fik logget alt i den powershell session. Her er et eksempel på hvordan dette kunne se ud.

Her nedenfor er eksemplet på output .txt filen som kommer ved transcript.

Aarhustech Powershell rapport Mathias Hauge

Du kan anvende Aliases i Windows Powershell.

Aliases er forkortelser som kan bruges I powershell, så man slipper for at skrive lange kommandoer hver gang. Fx ville remove-item blive til rm.Man også oprette sine egne aliases sådan at man hurtig kan eksekvere en hjemmestrikket kommando streng ved at bruge en forkortelse man har lavet. Dette kan ikke bare gøre arbejdet hurtigere og bedre men også øge produktiviteten hos den enkelte medarbejder.

En kortliste over alle aliases kan finds vi dette link : http://ilovepowershell.com/2011/11/03/list-of-top-powershell-alias/

Det er også muligt at lave sit eget alias ved at bruge kommandoen New-Alias. Efter dette skriver du bare navnet på det som aliaeses skal hedde, fx show. Nu vil sætningen se således ud New-Alias show Get-ChildItem. Næste gang du så skal bruge get-childitem kommandoen bruger du så bare dit nye alias show i stedet for.

Aarhustech Powershell rapport Mathias Hauge

Powershell aliases bliver som standard ikke gemt mellem powershell session, det vil sige at som standard finds dit alias kun I din igangværende powershell session indtil du lukker den. For at sikre dig at dine aliases bliver gemt og hurtigt kan loades er det muligt at gemme aliases en PSConfiguration i din Windwos Powershell profile folder. Du skal oprette en PSconfiguration folder inde i din Windows Powershell folder.

For at finde din Windows Powershell profile folder kan du skrive kommandoen

Get-Variable profile | Format-List

Her kan vi hurtigt finde stien og navnet for den profil vi operer under lige pt.

For at gemme ens nye aliases opretter man bare en PSConfiguration folder i ens Windows Powershell folder.

Aarhustech Powershell rapport Mathias Hauge

Du kan oprette og bruge variabler i Windows Powershell

En variabel er en værdi som kan blive tildelt en variabel for at kunne referere til denne senere eller igennem et powershell script. Man bruger variabler for at sikre sig at en værdi forbliver konsistent igennem ens script, dette gør det også nemmere at ændre værdi senere. Man skal altså ikke ind og ændre værdien hver gang i ens script, men man kan nøjes med at ændre værdien i ens variabel og den vil på den måde blive ændret alle gange ens variabel er nævnt i ens script.

Variablers navn i powershell begynder altid med et $ som fx $Brugernavn og værdier bliver tildelt variablen med et = fx $Brugernavn=Mathias. Powershell understøtter mange former for variabel værdier så som

Tekst Integers Decimaler Arrays Og endda avancerede typer, så som IP addresser.

Powershell prøver som standard at gætte hvilke typer værdier der arbejdes med, men dette kan også manuelt tvinges på når man laver sin variabel dette gøres ved at skrive hvad værdi der arbejdes med i starten af ens variabel fx [int32]$BrugerAlder=27 Her fortæller vi Powershell at vi arbejder med tal altså integers, derfor [int32]. I tilfælde hvor den værdi man har sat ikke matcher den type som man sætter vil powershell prøve at oversætte den eller melde fejl.

Her neden for ses et eksempel på hvordan ComputerName er en variabel og bliver bruge mange gange i scriptet.

Aarhustech Powershell rapport Mathias Hauge

Dette er outputtet fra det script. Variablen $ComputerName er lig med det man skriver i det felt når det dukker op eller hvis man trykker enter så er det lig med localhost. Dette bliver så brugt igennem hele scriptet til at til sidst vise dig lokale bruger på en lokal eller remote maskine.

Lavet af:

Mathias Hauge23/06 - 2017