På denne siden legger jeg ut kursinformasjon til dere som har vært på kurs hos meg. Her er smarte ting vi har diskutert på kurset, linker jeg har vist fram og andre ting som kan være greit å ha til senere.
Håper dere har hatt et innholdsrikt og godt kurs!
Emil Rakoczy for Crayon AS
6434A Automating Windows Server 2008 Administration with Windows PowerShell
Kursinformasjon hos Microsoft:
http://www.microsoft.com/learning/en/us/course.aspx?ID=6434a
Kursinformasjon hos Crayon:
http://www.crayon.no
Linker:
http://technet.microsoft.com/en-us/library/ee692948.aspx
Powershell tips fra Microsoft, masse artig og nyttig.
http://powershell.com/cs/
Flott site med masse powerhsell stoff. Sjekk spesielt ut ebook seksjonen!
http://technet.microsoft.com/nb-no/sysinternals/default(en-us).aspx
Sysinternals hos Microsoft har mye fantastiske verktøy for feilsøking. Blant annet verktøyet adrestore som lar deg enkelt resore tombstoned AD objekter.
http://technet.microsoft.com/en-us/library/dd391932(WS.10).aspx
God Technet Artikkel om hva som er nytt i Windows Server 2008 R2 mot Windows Server 2008.
http://www.microsoft.com/downloads/details.aspx?FamilyID=173E6E9B-4D3E-4FD4-A2CF-73684FA46B60&displaylang=en
Nedlasting av dokumentet som beskriver endringer i funksjonalitet fra Windows Server 2003 R2 til Windows Server 2008. Et must read om du vil være oppdatert.
http://www.microsoft.com/downloads/details.aspx?FamilyID=518d870c-fa3e-4f6a-97f5-acaf31de6dce&displaylang=en
Windows Server 2008 Steb by Step Guides. Alle samlet på ett sted. Gullkorn link!
http://www.myitforum.com/articles/11/view.asp?id=9353
Fin oversikt over farger tilgjengelig i Powershell og hvordan du endrer dem.
http://www.computerperformance.co.uk/powershell/powershell_get_member.htm
Fin side som går litt dypere inn i get-member kommandoen. Get-member gir deg en oversikt over properties og methods på et objekt. Husk: Methods var ting du kunne gjøre, properties var verdier du kunne hente ut. Sjekk også linkene på venstresiden. Artikkelen om WMI er en fin innføring i emnet.
http://www.powergui.org/index.jspa
PowerGUI. Script Editor for Powershell. Gratis.
http://www.powergui.org/kbcategory.jspa?categoryID=21
Add-ons til Powershell. Brukes på egen risiko. Sjekk innholdet nøye.
http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
Fin startside for Powershell på Technet!
http://technet.microsoft.com/en-us/scriptcenter/dd772288.aspx
Nedlasting av Scriptomatic 2.0. Et verktøy som lar deg velge WMI i et GUI og så genererer Powershell kode for deg.
Smarte kommandoer og tips:
get-WMIObject win32_bios
Viser deg informasjon fra BIOS, deriblant S/N på maskinen du sitter på.
get-WMIObject win32_computersystem
Viser deg informasjon om maskinen du sitter på. Blant annet merke, modellnummer, navn, domene, owner mm. Merk modelnummer her. Det spørres ofte etter av support i forbindelse med feilsøking og garanti.
sc (CMD commando)
Kommando for å snakke direkte med NT Service Controller og services. Absolutt verdt å sjekke ut!
wmic (CMD commando)
Fint grensesnitt for å utforske WMI. /? for å komme i gang.
Nye spørsmål som er kommet i løpet av kurset:
Kan man finne eieren av en prossess i Powershell?
Forestill deg at du vil finne eieren av prosessen notepad.exe:
$test = get-wmiobject win32_process -filter "name='notepad.exe'"
Dette henter prosessen notepad.exe og legger objektet i $test
$test | get-member
Viser oss to interessante tilgjengelige Methods på objektet:
getowner() og getownerSID()
$test.getowner() gir oss dermed owner av prosessen.
Finnes det noen oversikt over tilgjengelige "Number Format Strings" til bruk med -f?
http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf
Denne siden har en god oversikt, se i slutten av dokumentet.
Finnes det en måte å vise alle DLL filer en prosess bruker?
$p = get-process outlook
Henter prosessobjektet til outlook prosessen. Merk at du her ikke trenger spesifisere .exe som når vi bruker VMI kall.
$p.get_Modules()
Viser alle DLL og .exe/.com filer som er åpne.
$p.get_MainModule()
Viser hovedfilen til prosessen. Outlook.exe
Hvordan setter man rettigheter på filer og registernøkler?
Bruk kommandoene Get-ACL og Set-ACL.
Hva er forskjellen på ++$i og $i++?
Egentlig ingenting til vårt bruk. Om du vil se en detaljert diskusjon rundt emnet kan du sjekke her:
http://bytes.com/topic/c/answers/63485-why-i-instead-i-loops
Merk at for ($i=0;$i -le 5; XXXX) {$i} gir akkurat samme print om du setter ++$i eller $i++ inn i stedet for XXXX.
Hvordan skal sertifikatet fra en Windows 2008 CA se ut for at det skal fungere med signering av Powershell script med commandoen Set-AuthenticodeSignature?
Dette jobber jeg fremdeles med. Når en løsning er tilgjengelig vil dere få en oppdatert mail.
Kan man bruke todmensjonale array i Powershell?
Ja. Følgende kode lager et ekte multidimensional array på 10x20. Det finnes også en enklere metode hvor man bruker "Jagged Arrays", men jeg finner den litt mer forvirrende. Så skal man ha to-dimensjonale arrays, så er det best å gjøre det "ordentlig".
$array2 = New-Object 'object[,]' 10,20
$array2[4,8] = 'Hello'
$array2[9,16] = 'Test'
$array2
Kan man kjøre kode som ligger i en variabel? Altså f.eks. laste et script inn i en variabel og deretter kjøre det?
Ja med kommandoen invoke-expression. Vi legger kode inn i $a og kjører den med invoke-expression:
[STRING] $a = write-host test
invoke-expression $a
Hvordan behandles local og remote scripts i forbindelse med code-signing?
Local scripts er script som er lagret lokalt på maskinens harddisk og kjøres derfra. Script som kjøres i forbindelse med nedlasting via HTTP, Instant Messaging eller e-post o.l. regnes som "remote".
Finnes det en metode å få ut ett tall i GigaBytes eller MegaBytes?
Ja, den enkleste måten er å dele tallet på konstanten 1GB eller 1MB i powershell. La oss si du har tallet ditt i variabelen $size. $size / 1GB vil gi deg tallet ditt i GigaBytes.
Og husker du litt om .Net string formatering så vet du at denne kommandoen vil gi det tallet med bare to desimaler:
"Tallet er {0:N2} GigaBytes" -f ($size / 1GB)
Finnes det andre editorer til PS som viser litt mer oversiktlig farge-kode etc?
Prøv Notepad++ eller TextPad (lastes ned). Powershell 2.0 har jo også Powershell ISE som er en forbedret editor, men ikke på linje med disse to.
Hvordan kan man bruke regexp (Regular Expressions) i Powershell?
Det gjør du med switchene -match og -replace som er tilgjengelig blant annet i cmdleten where-object. For en liste over regexp syntaxen se denne linken:
http://technet.microsoft.com/en-us/library/dd315294.aspx
Eller hvis du har Powershell 2.0, skriv get-help about_regular_exp
Merk deg variabelen $matches som vil inneholde alle regexp matchene dine. Dette er en standard scalar array så den kan du aksessere ved $matches[0] osv. Du kan fylle $matches ved f.eks. å skrive:
$p = "T4est"
$p -match "(.?)(\d?)(est$)"
Dette vil gi deg verdiene i parantesene fordelt i arrayet $matches. $matches[0] vil inneholde hele matchen "T4est", [1] vil inneholde "T", [2] "4" og [3] "est". Alternativt kunne du fjernet parantesene og bare hatt ".?\d?est$", men da ville du bare fått en enkel match i variabelen $matches.
Hva er forskjellen på cmdlet'en set-item og set-itemproperty?
Hvis du jobber mot registry gjennom powershell vil du kunne se forskjellen når du forsøker å endre på en eksisterende nøkkel. Set-property lar deg endre navnet på en nøkkel, mens set-itemproperty lar deg endre verdien på nøkkelen.
Hvordan escaper man characters i write-host kommandoen hvis man f.eks. vil skrive $ og ikke aksessere en variabel?
Du setter baklengs fnutt foran tegnet. F.eks `$. På norsk tastatur er den lokalisert til venstre for backspace. Shift og denne tasten.
Hva er forskjellen på $null og tallet 0?
$null er en standard variabel. Alt som pipes til $null forsvinner. $null er ingenting, mens tallet 0 er tallet 0. Setter du $p til $null, så er innholder i $p ingenting. Setter du $p til 0, så er innholder "0".
Hvordan kan man gjøre en trap av en exception "global", slik at den tar alle exceptions?
Du lager en trap i koden din som kun spesifiserer Exception:
trap [Exception] {kode}
Er det noen måte å finne errornumber på en exception i PS?
Nei dessverre så er det ikke det så vidt jeg kan se. Du kan i en trap gjøre en $_ | get-member. Da vil du få se alle methods og properties på Exception objektet. Ingen av disse gir ut et nummer, kun details, message, ID etc. Og alt dette er tekst.
Hvordan kan man sjekke hvilken type en variabel er?
$variabel.GetType()
Hvordan viser man skjulte services i PS?
Hvilken versjon av PS kommer med Windows Server 2008 R2?
Oppdateres PS automatisk gjennom Windows Update?
Hva er forskjellen mellom default-output og write-output?
Hva er forskjellen mellom "skriv dette" og write-output "skriv dette"?
Hvordan kan man gjøre en parameter mandatory i en function?