AD och PowerShell

PowerShell är Microsofts kommandotolk och script-miljö som är särskilt utformat för systemadministration. PowerShell hjälper IT-personal att hantera och automatisera administrationen av Windows server och program som körs på dem. Windows PowerShell innehåller en interaktiv prompt och en skriptmiljö som kan användas fristående eller i kombination.

Bild 1: PowerShell logo

PowerShell baseras på .NET Framework som ger enkel åtkomst till Windows komponenter.

.NET Framework

.NET Framework är en del av ett Microsoft Windows operativsystem vilket innebär att .NET Framework inkluderas i de flesta Windows operativsystem, annars finns den som uppgraderingar.

Dot Framework består av mjukvara/program/kod organiserade i bibliotek som hjälper till kommandoexekveringar. Med mjukvara menas egentligen kod uppdelad i olika moduler som kan användas till olika syfte beroende på vad operativsystemet vill utföra. Exempelvis när man läser eller skriver en fil, rita ut grafik, ansluta nätverk eller modifiera en databas behöver man olika moduler som kan hittas i de bibliotek som finns i .NET Framework. Således kan vi säga att modulerna tillåter ett flexibelt sätt att använda specifika lösningar/kod.

.NET Framework versioner

Windows Server 2016 (alla versioner) innehåller .NET Framework 4.6.2 som en OS-komponent, och den är installerad som standard, förutom i Server Core som kan ha en mindre version exempelvis 4.6.0. Generellt innehåller alla Windows server .NET Framework 3.5 och SP1. Dessa två komponenter inte alltid är installerade men de kan läggas till eller tas bort via exempelvis Serverhanteraren. Tabellen nedan visar de olika .NET versioner och uppgraderingsmöjligheter.

OS .NET version Uppgraderingar
Windows server 2016 (1709)  4.7.1
Windows server 2016  4.6.2  4.7 till 4.7.1
Windows server 2012 R2  4.5.1 (3.5 SP1 som komponent)  4.5.2 till 4.7.1
Windows server 2012  4.5 (3.5 SP1 som komponent)  4.5.1 till 4.7.1
Windows server 2008 R2  3.5.1 (inkl 3.5 SP1, 3.0 SP2, 2.0 SP2)  4 till 4.6
Windows server 2008  3.0 SP1 (inkl 2.0 SP1)
Windows 10 April 2018 4,7,2
Windows 10 Fall Creators Update  4.7.1
Windows 10 Creators Update  4.7  4.7.1
Windows 10 Anniversary Update  4.6.2  4.7 till 4.7.1
Windows 10  4.6  4.6.1 till 4.6.2
Windows 8.1  4.5.1 (3.5 SP1 som komponent)  4.5.2 till 4.7.1
Windows 8  4.5 (3.5 SP1 som komponent)  4.5.1 till 4.6.1
Windows 7  3.5.1 (inkl 3.5 SP1, 3.0 SP2, 2.0 SP2)  4 till 4.7.1
Windows Vista  3.0 (inkl 2.0)
Windows XP  ..ingen (olika versioner i SP)

OBSDet kan finnas flera versioner av .NET Framework installerade på en dator. Varje ny installerad version av .NET Framework är oberoende av de tidigare installerade versionerna.

Vilken installerad version av .NET framework har din dator?

Alla versioner av .NET Framework installeras en av i följande kataloger:

  • %SystemRoot%\Microsoft.NET\Framework
  • %SystemRoot%\Microsoft.NET\Framework64
  1. Öppna CMD och exekvera: C:\>dir %SystemRoot%\Microsoft.NET\Framework\v* /O:-N /B
  2. Installera ASoft .NET, ett tredjepart program som kan hämtas från: http://www.asoft.be/prod_netver.html

Kom igång med PowerShell

Det finns olika sätt att starta Windows PowerShell, men arbetsläge/gränssnitt blir det antingen grafiskt eller via kommandotolken. Kom ihåg att starta PowerShell alltid som Administratör.

Bild 2: PowerShell i 32 och 64 bitar

För att få ett grafiskt arbetsläge öppnar du ett konsolfönster genom att klicka på Start, Alla program, Tillbehör, Windows PowerShell och välja Windows PowerShell.

Observera att den här tekniken startar Windows PowerShell med vanliga användarbehörigheter istället för administratörsbehörigheter.

Ett annat sätt att starta PowerShell är: Startmenyn och skriva i sökfältet ”powershell”. På en Windows 10 dator visar 32 och 64 bitars versioner. Det kan finnas skillnader mellan dessa versioner förutom antal bitar, exempelvis vissa PowerShell kommando fungerar inte i den ena eller den andra versionen.

Ett annat sätt att starta PowerShell är via CMD.

För att starta Windows PowerShell med administratörsbehörigheter kan du klicka på Start, Alla program, Tillbehör, Windows PowerShell, högerklicka på Windows PowerShell och välj Kör som administratör.
Men det finns andra sätt att starta en Windows PowerShell-konsol. Du kan använda Windows tangenten tillsammans med tangenten R så att Kör fältet visas, du skriver PowerShell i fältet och trycker på Enter.

Du kommer att upptäcka fler fördelar via kommandotolken (CMD) exempelvis möjlighet att växla mellan DOS och PowerShell. Du anger kommandot powershell och därefter du trycker på Enter och då startas PowerShell, observera prompten som ändras från C: till PS C: När du vill växla tillbaka till DOS ange kommandot exit och tryck Enter.

Bild 3: PowerShell textbaserade konsol

PowerShell versioner

PowerShell är nästan nitton år gammal och har utvecklats till sex olika versioner, från 1.0 till 6.0. PowerShell finns i två utgåvor (editions):

  • Windows PowerShell som är byggt upp över .NET Framework och som inkluderas i de flesta Windows operativsystem. Utgåvan är känd som ”FullCLR
  • PowerShell Core som är byggt upp över .NET Core. Denna utgåva stödjer andra operativsystem än Windows. Utgåvan är känd som ”CoreCLR

Så här kan du få fram PowerShell version på en Windows 10:

Bild 4: PowerShell version – detaljerad information
Bild 5: PowerShell version – kortfattad information

Hantera AD med PowerShell

När vi arbetar med PowerShell arbetar vi med objekt istället för traditionella strängar eftersom PowerShell är ett objektorienterat språk. Ett objekt är ett paket som innehåller både data och information om vad för objekt är och hur objektet används. Informationen om hur man använder objekt lagras i metoder och objektets egenskaper.

För att kunna administrera Active Directory med PowerShell behöver man en uppsättning av administrationsverktyg. De kallas Moduler och när en Windows server promotas till domänkontrollant inkluderas i installationen ett antal nödvändiga moduler för PowerShell.

När PowerShell startar laddar de mest nödvändiga moduler och väntar på att systemadministratören använder olika kommando som tillhör till olika versioner. Varje kommando ingår i en viss modul och om modulen inte är tillgänglig i den aktuella sessionen laddas den direkt. Det gör att olika versioner koexisterar i en PowerShell session.

Från en domänkontrollant (Windows 2012 R2) och PowerShell version 4.0 exekveras här diverse kommando:

  • För att få fram PowerShell version i en Windows 2012 R2 domänkontrollant:
    • PS C:\> $PSVersionTable.PSVersion
Bild 1: PowerShell version 4.0 i en Windows Server 2012 R2
  • För att få fram laddade moduler:
    • PS C:\> Get-Module *
    • I den aktuella PowerShell session har laddats endast två moduler för PowerShell
Bild 2: Moduler
  • För att få fram alla tillgängliga moduler:
    • PS C:\>Get-Module -ListAvailable
    • En lång lista av moduler visas, den första är ActiveDirectory(sök efter ServerManager också)
  • För att importera modulen ServerManager:
    • PS C:\> Import-Module ServerManager
  • För att importera modulen ActiveDirectory:
    • PS C:\> Import-Module ActiveDirectory
Bild 3: Fler moduler har laddats till PowerShell session
    • När Active Directory har importerats finns tillgänglig AD enheten, en till PowerShell tillhandahållare (Provider).
  • För att få fram PowerShell Providers:
    • PS C:\> Get-PSProvider
Bild 4: Active Directory som enhet AD:
  • För att navigera till enheten AD:
    • PS C:\>Set-Location AD:
  • För att få fram innehållet i enheten AD:
    • PS C:\>gci
    • En lista på domänpartitioner visas (den mest intressant för oss är diginto där alla objekt finns):
Bild 5: Partitioner i AD enhet
  • För att komma in i partitionen exekvera:
    • PS AD:\>Set-Location ”dc=diginto,dc=se”
    • PS AD:\>dc=diginto,dc=se> gci
    • En lista på containers och en organisationsenheten (Domain Controllers) visas. Vi har hunnit att skapa egna AD-objekt och de inkluderas också.
  • För att se vilka domänkontrollanter finns i OU (organizational Unit eller organisationsenhet) exekvera:
    • PS AD:\dc=diginto,dc=se>gci .\”OU=Domain Controllers”

Active Directory CmdLets

Modulen Active Directory består av ett antal CmdLets beroende på PowerShell versioner. Med CmdLets eller PowerShell kommando kommer vi att hantera AD-objekt, till exempel för domänen diginto.se

  • För att räkna antal AD CmdLets exekvera:
    • PS C:\Get-Command -Module ActiveDirectory | Measure-Object
  • Följande AD CmdLets kommer vi att använda mest:
    • New-ADOrganizationalUnit
    • New-ADGroup
    • New-ADUser
    • New-ADComputer
    • Add-Computer
    • Get-ADOrganizationalUnit
    • Get-ADForest
    • Get-ADDomain
    • Get-ADGroup
    • Get-ADUser och några få till.