Intro til bruk av powershell - Wikispaces

Document Sample
Intro til bruk av powershell - Wikispaces Powered By Docstoc
					Introduksjon ............................................................................................................................................ 9
Installasjon av Active-Directory på Windows 2008 server R2 ............................................................... 11
   Fikse RemoteSignend ........................................................................................................................ 11
   Installasjon av Active-Directory på windows 2008 server R2 ........................................................... 11
Intro til bruk av powershell ................................................................................................................... 13
   Kapitel introduksjon .......................................................................................................................... 13
   Nokre enkle basis kommandoer/cmdlets: ........................................................................................ 13
   Aliaser ................................................................................................................................................ 15
   Profiler ............................................................................................................................................... 16
   Script.................................................................................................................................................. 17
   Variablar ............................................................................................................................................ 17
   Om Strenger. ..................................................................................................................................... 20
       Manipulering av Strenger .............................................................................................................. 21

       Kobinere strengar .......................................................................................................................... 21

       Kombinere strengar med ikkje strengar ........................................................................................ 21

       Splitte strenger .............................................................................................................................. 22

       Kutte ut ein del av ein string ......................................................................................................... 23

       Bytte om ord i streng..................................................................................................................... 25

       Jobbe med Streng posisjonering. .................................................................................................. 25

       Korleis endre streng til upper eller lower case ............................................................................. 26

   Jokertegn og regulære utrykk. .......................................................................................................... 27
   Apostrofer: ........................................................................................................................................ 27
   Escape Sequences ............................................................................................................................. 28
   Here-strings ....................................................................................................................................... 29
   Arrays (tabeller)................................................................................................................................. 29
   Laging og bruk av hash tabellar ......................................................................................................... 30
       Endring av hash tabellar ................................................................................................................ 31

       Lopping gjennom hash tabellar ..................................................................................................... 32

   Lage tilfelldige tall ............................................................................................................................. 32
   Objekter og handtering av dei........................................................................................................... 32
   Betingelsar i PowerShell .................................................................................................................... 33
   Where-object .................................................................................................................................... 34
   ForEach-Object .................................................................................................................................. 35
If ......................................................................................................................................................... 35
Switch ................................................................................................................................................ 36
For...................................................................................................................................................... 37
Foreach .............................................................................................................................................. 37
While og Do..While............................................................................................................................ 38
Funksjoner ......................................................................................................................................... 39
Andre Operatorer. ............................................................................................................................. 40
   Matematiske operatorer ............................................................................................................... 40

   Logiske operatorer ........................................................................................................................ 41

   Binære operatorer ......................................................................................................................... 41

   Lesing og skriving på tastatur og skjerm: ...................................................................................... 42

   Kontrollstrukturar .......................................................................................................................... 42

.Net og PowerShell ............................................................................................................................ 42
   Pipeline output til fil. ..................................................................................................................... 43

   Bruk av Powershell og .NET ........................................................................................................... 44

   Funksjonar i Powershell................................................................................................................. 45

   Powershell analyzer....................................................................................................................... 45

   Funksjonsstruktur .......................................................................................................................... 45

   Opprette funksjoner. ..................................................................................................................... 46

   Bruke funksjoner ........................................................................................................................... 47

   Spesifisere datatyper ..................................................................................................................... 48

   Bruk ein funksjon til å gi ein variabel ein verdi ............................................................................. 49

   Filter vs funksjon ........................................................................................................................... 50

   String formatering ......................................................................................................................... 52

   Powershell in Active Directory ...................................................................................................... 53

   Forandre på data i eit Objekt ........................................................................................................ 54

   Henter ut informasjon ................................................................................................................... 55

   Søke etter brukere......................................................................................................................... 55

Nyttige kommandoer i Exchange 2007 ............................................................................................. 55
Cmdlets for WS 2008 R2 .................................................................................................................... 58
WMI i powershell .................................................................................................................................. 62
   Endre WMI autentiserings nivået(levels) .......................................................................................... 65
   Bruke dei nye WMI cmdlets .............................................................................................................. 66
   Få ting til og skje ved og bruke Invoke-WMIMethod ........................................................................ 66
   Sletting av objekt ved bruk av Remove_WmiObject ......................................................................... 67
   Sette WMI eigenskapar ved å bruke Set-WmiInstance ..................................................................... 67
Administrasjon med Powershell............................................................................................................ 69
   Remoting ........................................................................................................................................... 69
   Remote Jobs ...................................................................................................................................... 70
   Secure Strings .................................................................................................................................... 71
   Process............................................................................................................................................... 71
   Service ............................................................................................................................................... 72
   EventLog ............................................................................................................................................ 72
   BestPractices ..................................................................................................................................... 72
   Sende E-post med Powershell ........................................................................................................... 73
   Group Policy Administering med Powershell .................................................................................... 73
   Opprette en GPO med Powershell .................................................................................................... 79
   Vedlegg: ............................................................................................................................................. 80
Guide om standard administrering av AD med Powershell .................................................................. 95
   Intro til guiden ................................................................................................................................... 95
   Koble opp mot AD ............................................................................................................................. 95
   Spørje etter objekt og attributta ....................................................................................................... 96
   Skaping av LDAP filteret ditt. ............................................................................................................. 97
       Definere eit enkelt filter ................................................................................................................ 97

       Benektig i filteret ........................................................................................................................... 98

       Kombinere filter vilkår ................................................................................................................... 98

       Sjekking av userAccountControl eigenskapar ............................................................................... 99

   Dynamisk anskaffing av ein brukars distinguishedName ................................................................ 101
   Modifisere objekt attributta............................................................................................................ 102
   Oppdatering av Group Membership ............................................................................................... 103
   Enkle AD kommandoar i Windows 2008 R2 Server......................................................................... 104
       User Management ....................................................................................................................... 104

          Modifisere ein attributt for fleire brukar på eingong.............................................................. 104
          Setje ein brukars Profil Attributta ........................................................................................... 104
          Flytte ein brukar ...................................................................................................................... 105
   Skifte namn på ein brukar ....................................................................................................... 105
   Kopier ein brukars eigenskaper ............................................................................................... 105
   Finne brukarar som er låst ute ................................................................................................ 106
   Setje ein brukars passord ........................................................................................................ 106
   Låse opp ein brukars konto ..................................................................................................... 107
   Konto lockout og passord policies ........................................................................................... 107
   Aktivere og deaktiver ein brukar konto................................................................................... 107
   Lagge ein UPN suffiks(suffix) til ein Skog(Forest) .................................................................... 108
   Lokalisere deaktiverte brukar kontoar .................................................................................... 108
   Sjå på ein brukars Managed Objects ....................................................................................... 108
   Korleis å lagge ein stor mengde med brukarar ....................................................................... 109
   Sjå ein brukars gruppe medlemskap ....................................................................................... 109
   Fjerning av Gruppe Medlemskap ............................................................................................ 109
   Flytte Gruppe medlemskap til ein anna brukar....................................................................... 110
   Korleis lage ein ny brukar ........................................................................................................ 110
   Forhindre ein brukars Passord Endring ................................................................................... 110
   Krevje at ein brukar endrar Passord ved neste innlogging ..................................................... 111
   Hindre at ein brukar sitt passord går ut på dato ..................................................................... 111
   Setje ein brukars konto val (User’s Account Options) ............................................................. 112
   Setje ein brukars konto å gå ut på dato .................................................................................. 112
   Finne brukar der kontoen/passord deira helde på og gå ut på dato ...................................... 113
   Modifisere Default Display Name ........................................................................................... 113
   Lage ein inetOrgPerson brukar ................................................................................................ 113
   Endre eit brukar objekt til ein inetOrgPerson Object (eller reversert) ................................... 114
   Finne ut ein brukars Last Logon Time...................................................................................... 115
   Finne ein brukar som ikkje har logga seg på i det siste ........................................................... 115
Computer Managment ................................................................................................................ 116

   Legge til ein maskin i eit Domene ........................................................................................... 116
   Enumererer antall maskin kontoar i eit domene .................................................................... 117
   Flytte ein maskin innan det same domenet ............................................................................ 117
   Endre maksimum nummer av maskiner som ein brukar kan join til domenet ....................... 118
   Endre namnet til ein maskin.................................................................................................... 118
   Teste den sikre kanalen for ein maskin. .................................................................................. 119
   Resetje ein Maskin konto ........................................................................................................ 119
   Finne uaktive eller ubrukte maskiner ...................................................................................... 119
   Finne maskiner med eit bestemt OS ....................................................................................... 120
   Lagge ein Maskin konto ........................................................................................................... 120
   Modifisere attributta til ein maskin konto .............................................................................. 121
   Koble til Standard behaldar for Maskinen............................................................................... 121
Group Management .................................................................................................................... 121

   Sjå Permission til ein gruppe ................................................................................................... 121
   Lagge ein gruppe ..................................................................................................................... 122
   Sjå dei Nested Members til ein gruppe. .................................................................................. 122
   Flytte ein gruppe inne i Domenet............................................................................................ 123
   Muliggjere Universal Group Membership Caching ................................................................. 123
   Sjå Direct Members til ein gruppe ........................................................................................... 123
   Modifisere Gruppe attributt.................................................................................................... 123
   Beslutne ein primær gruppe ID ............................................................................................... 124
   Legge til eller fjerne Medlemer av ein gruppe ........................................................................ 124
   Endre omfanget eller typen til ein gruppe .............................................................................. 125
   Gjenopprettar ein sletta gruppe ............................................................................................. 125
Managed Service Accounts ......................................................................................................... 125

   Lagge ein managed Service konto ........................................................................................... 125
   Finne Managed Service kontoar per computer....................................................................... 126
   Finne Managed Service kontoar .............................................................................................. 126
   Assosiere ein managed Service konto med ein maskin .......................................................... 126
   Fjerne ein managed Service konto frå ein maskin .................................................................. 126
   Slette ein managed Service konto ........................................................................................... 127
   Installere ein Managed Service konto ..................................................................................... 127
   Resetje passord til ein Managed Service konto ...................................................................... 127
Organizational Units .................................................................................................................... 127

   Liste OUar i eit Domene .......................................................................................................... 127
   Setje eller fjerne ein Manager til ein OU ................................................................................. 127
   Liste ut Objekta i ein OU .......................................................................................................... 128
   Opprette ein OU ...................................................................................................................... 128
   Linke ein GPO til ein OU .......................................................................................................... 128
   Finne ut det tilnærma nummeret av Child objekt i ein OU ..................................................... 128
   Slette ein OU............................................................................................................................ 129
   Slette Objekt i ein OU .............................................................................................................. 129
   Flytte Objekt i ein OU til ein anna OU ..................................................................................... 129
   Renamne ein OU...................................................................................................................... 129
   Finne ein OU ............................................................................................................................ 130
   Modifisere ein OU ................................................................................................................... 130
   Flytte ein OU ............................................................................................................................ 130
   Tillate OUar og bli lagga inne i Behaldera ............................................................................... 130
   Beskytte alle OUar i domenet mot uheldig sletting ................................................................ 131
Password Policies ........................................................................................................................ 131

   Skappe ein ny Fine-Grained Password Policy .......................................................................... 131
   Hente ut detaljar om eit Fine-Grained Password Policy ......................................................... 132
   Søke etter eit Fine-Grained Password Policies ........................................................................ 132
   Modifisere ein Fine-Grained Password Policy ......................................................................... 133
   Påføre Fine-Grained Password Policy...................................................................................... 133
   Fjerne ein Fine-Grained Password Policy ................................................................................ 133
   Slette ein Fine-Grained Password Policy ................................................................................. 133
   Get Resultant Password Policy til ein brukar .......................................................................... 134
   Finne alle brukarar og grupper der ein Fine-Grained Password Policy gjelder ....................... 134
   Hente detaljar om ein Default Domain Password Policy ........................................................ 134
   Modifisere Default Domain Password Policy .......................................................................... 134
Optional Features ........................................................................................................................ 135

   Finne alle tilgjenglige Optional Features ................................................................................. 135
   Hente detaljer til ein Optional Feature ................................................................................... 135
   Enable eller Disable Optional Features ................................................................................... 135
Search\Modify Objects ................................................................................................................ 136

   Telle objekt i AD (counting objects) ........................................................................................ 136
   Sjå på RootDSE(viewing the RootDSE) .................................................................................... 136
   Connecting to a Well-Known Container .................................................................................. 136
   Searching for a Large Number of Objects ............................................................................... 137
   Viewing the Attributes of an Object ........................................................................................ 137
   Søke med eit Bitwise Filter ...................................................................................................... 137
   Skape/opprette eit objekt ....................................................................................................... 137
   Søke i Global Catalog ............................................................................................................... 138
   Søkke for objekter i eit domen ................................................................................................ 138
   Slette ein behalder som har Child Objekt ............................................................................... 138
   Modifisere eit objekt ............................................................................................................... 138
   Modifisere ein Bit Flag attributt .............................................................................................. 138
   Connecting to an Object GUID ................................................................................................ 139
   Dynamically Linking an Auxiliary Class .................................................................................... 139
   Refreshing a Dynamic Object .................................................................................................. 139
   Exporting Objects to a CSV File ............................................................................................... 139
   Importing Objects by Using a CSV File..................................................................................... 140
   Referencing an External Domain ............................................................................................. 140
   Renaming an Object ................................................................................................................ 140
   Moving an Object to a Different OU or Container .................................................................. 140
   Deleting an Object ................................................................................................................... 141
   Viewing the Created and Last Modified Time Stamp of an Object ......................................... 141
   Searching for Deleted Objects ................................................................................................. 141
   Restoring a Single Object......................................................................................................... 141
   Restoring a Container Object and Its Children ........................................................................ 141
   Viewing the ACL for an Object................................................................................................. 142
Forest and Domain Management ............................................................................................... 142

   Finding the Domains in a Forest .............................................................................................. 142
   Raising the Domain Functional Level to Windows 2000 Native .............................................. 142
   Finding the NetBIOS Name of a Domain ................................................................................. 142
   Raising the Functional Level to a Windows Server 2003 Domain ........................................... 143
   Viewing the Trusts for a Domain ............................................................................................. 143
   Raising the Functional Level to a Windows Server 2003 Forest ............................................. 143
   Modifying the Tombstone Lifetime for a Domain ................................................................... 143
Domain Controller and Operations Master Management .......................................................... 144

   Finding the Domain Controllers for a Domain ........................................................................ 144
   Finding the Closest Domain Controller ................................................................................... 144
   Finding a Domain Controller's Site .......................................................................................... 144
   Finding the Global Catalog Servers in a Forest ........................................................................ 144
   Moving a Domain Controller to a Different Site ..................................................................... 145
   Enabling and Disabling the Global Catalog .............................................................................. 145
           Determining Whether Global Catalog Promotion Is Complete ............................................... 145
           Finding the Domain Controllers or Global Catalog Servers in a Site ....................................... 145
           Finding Domain Controllers and Global Catalogs with DNS .................................................... 145
           Enabling Universal Group Caching .......................................................................................... 146
           Seizing an Operations Master Role ......................................................................................... 146
           Finding the PDC Emulator Role Owner with DNS .................................................................... 146
           Finding the Operations Master Role Holders .......................................................................... 146
           Transferring an Operations Master Role ................................................................................. 147
   Cmdlets i AD .................................................................................................................................... 147
Exchange 2010 Administration............................................................Error! Bookmark not defined.152
Managing sharepoint with powershell................................................................................................ 182
   Setting up PowerShell ISE for SharePoint 2010............................................................................... 212
       12/28/2009 .................................................................................................................................. 213

Script.................................................................................................................................................... 215
Små enkle Scripts................................................................................................................................. 218
   Legge til brukar med powershell frå ein csv-fil. .............................................................................. 218
   Script for og lage ein OU.................................................................................................................. 220
   Lage OU fra fil .................................................................................................................................. 220
   Script som lager mange OU i trestruktur ........................................................................................ 222
   Script for å slette OU ....................................................................................................................... 224
   Script for å slette mange OU i ein trestruktur ................................................................................. 224
   Script som lister ut informasjon om ein OU .................................................................................... 224
   Script som lister ut medlemmar i ei gruppe som blir gitt av brukaren ........................................... 225
   Script som lister ut kva grupper ein brukar er medlem i ................................................................ 225
   #Enkel funksjon som legger sammen to tall.................................................................................... 225
   #Funksjon som finner størrelsen på ståande folder og regnar ut kor mykje som er brukt i KB, MB og
   GB. ................................................................................................................................................... 226
   Scritpt for å endre description av ein OU ........................................................................................ 226
   Script for å legge inn brukar ............................................................................................................ 227
   Script for å lage ei gruppe i AD ........................................................................................................ 228
   Script for å legge ein brukar til i ei gruppe ...................................................................................... 228
   Script for å fjerne brukar frå gruppe ............................................................................................... 229
Kildeliste .............................................................................................................................................. 230
Introduksjon

Bakgrunnen for at vi skal ha prosjekt om drifting av et windows-miljø ved bruk av powershell er at vi
vil ha en oppgave som er relevant for framtidige jobber. Folk som kan og drifte windows-miljø raskt
og effektivt ved og bruke powershell er mangelvare og det vil sannsynligvis fortsette og være behov
for i flere år framover.

Siden planen er og sette opp og drifte et windows-miljø(nettverk) velger vi og ikke sette opp en fiktiv
bedrift.
Målet med prosjektet er at vi skal få ein god oversikt over korleis man setter opp eit windows
nettverk ved hjelpe powershell. Dette vil sei og drifte AD etc. på ein windows server 2008 R2 og
bruke powershell i konfigurering av Exchange 2010, SQL 2010, SharePoint 2008 samt og konfigurere
windows 7 og Vista.

Oppgåve teksten lyder som følgende
”Beskrivelse:
Bruke Powershell til å drifte:
- konfigurere Windows 7 og Vista
- drifte AD etc i Windows server 2008 R2
- bruke Powershell i konfigurering av:
-- Exchange 2010
-- SQL 2010
-- SharePoint 2008 ”

Her er forklaringar på dei forskjellige programma vi bruker.

Powershell 2.0:
Powershell er et script språk med medfølgende kommandolinje, det kan brukes til å gjennomføre automatiske
drift hendelser, som for eksempel oppretting av brukere eller å forflytte gammel mail i Exchange til arkiv
boksene. Den har muligheten for å administrere lokale og nettverks klienter og servere direkte gjennom
kommandoer (I form av Cmd-lets, som det blir kalt) og scripts. Det gir oss muligheten til å administrere
Microsoft produkt som Sharepoint 2010, Exchange 2010 og Windows Server 2008 R2. Alle nyere Microsoft
produkt er laget med powershell som en sentral del av det, i forhold til drifting og konfigurering.
Den er bygd på, og integrert med Microsoft .NET, og gir tilgang på Windows Management Instrumentation og
Component Object Model, noe som gir en større grad av kontroll for administratorer å drifte og administrere
oppgaver ved bruk av powershell.
Powershell ble laget som et tilsvarende verktøy som konsollen på UNIX maskiner i den grad den kan scriptes å
brukes til å konfigurere programmer.

Sharepoint, definisjonen her tatt fra wikipedia:
“Microsoft SharePoint, also known as Microsoft SharePoint Products and Technologies, is a collection of
products and software elements that includes, among a growing selection of components, web browser based
collaboration functions, process management modules, search modules and a document-management
platform.[1] SharePoint can be used to host web sites that access shared workspaces, information stores and
documents, as well as host defined applications such as wikis and blogs. All users can manipulate proprietary
controls called "web parts" or interact with pieces of content such as lists and document libraries.”
Exchange, fra wikipedia:
“Microsoft Exchange Server is a messaging and collaborative software product developed by Microsoft. It is part
of the Microsoft Servers line of server products and is widely used by enterprises using Microsoft infrastructure
solutions. Exchange's major features consist of electronic mail, calendaring, contacts and tasks; support for
mobile and web-based access to information; and support for data storage.”
SQL Server, fra microsoft sine egne sider:
“SQL Server 2008 delivers on Microsoft’s Data Platform vision by helping your organization manage any data,
any place, any time. Store data from structured, semi-structured, and unstructured documents, such as images
and rich media, directly within the database. SQL Server 2008 delivers a rich set of integrated services that
enable you to do more with your data such as query, search, synchronize, report, and analyze.”
“
Installasjon av Active-Directory på Windows 2008 server R2


Fikse RemoteSignend
Dette er viktig og sete opp for ExecutionPolicy og for og kunne jobbe med powershell siden
vi nå kan kjøre scripts og sette opp profil som kjørest ved oppstart av powershell. Dette
gjørest veldig enkelt. Den er to kommandoer under som er viktige, når du kjører Set-
ExecutionPolicy RemoteSigned so gjer endre du ExecutionPolicyen slik at du kan kjøre
scripts og lignende. Med kommandoen Get-ExecutionPolicy får du vite kva
ExecutionPolicyen er.

Set-ExecutionPolicy RemoteSigned
Get-ExecutionPolicy



Installasjon av Active-Directory på windows 2008 server R2
Vi startet med å konfigurere nettverks instillingane. Dette gjer vi gjennom WMI. Det
begynder med å lage variablen som innehelder informasjon som handlar om vår netverk
adapter konfigurasjon. For og være sikker på at vi er kobla opp mot korrekt adapter, bruker vi
Where-Object CmdLet for å spesifisere kvafor eit adapter vi vil bruke. Vi hadde ikkje satt opp
2 nettverks adapters enda so vi slapp og sette opp meir ein eit kriteria. Men når vi seinare satt
opp det andre nettverkskortet blei det gjort i GUI.

Vi brukte desse kommandoane:

PS > $NetworkConfig = Get-WmiObject Win32_NetworkAdapterConfiguration
PS > $NetworkConfig | Where {$_.IPEnabled -eq $true -and $_.Description -
match "Intel"}

Du kan ogso bruke denne kommandoen, visst du ikkje har lyst til og lage ein ny varriabel:
PS > Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.IPEnabled
-eq $true -and $_.Description -match "Intel"}

No har vi funnet ut av vår nettverks Adapter, so vi kan sette opp dei settingane vi vil.
PS   >   $IP = "158.38.43.170"
PS   >   $SubNet = "255.255.255.0"
PS   >   $Gateway = "158.38.43.1"
PS   >   $Metric = [int32]1

Endelig, kan vi oppdattere netverk adapter konfigurasjonen med våre eigne instillingar. For
og få til det bruker vi desse kommandoene.
PS > $NetworkConfig.EnableStatic($IP,$SubNet)
PS > $NetworkConfig.SetGateWays($Gateway,$Metric)

Vi skal no endre maskinnavnet siden vi synest det er ein god ide. Maskinnavnet kan bli endret
via netdom kommandoen eller med wmi, vi bruker wmi so visst under.
Import-module serverManager
PS > $Computer = Get-WmiObject Win32_ComputerSystem
PS > $Computer.Rename("14e-DC")

Vi må no restarte serveren for at maskinnavnet endra seg.
PS > shutdown -r -t 0

Active-Directory Rolla blir lagt til gjennom dcpromo kommandoen. Kommandoen tar
argument som spesifiserer kva type AD du vil setup. Det er ogso mulig og lage ein liste som
innehelder informasjon og kjøre dcpromo med unattend switch,

Her er lista vi brukte for og sette opp AD på serveren vår.
[DCINSTALL]
ReplicaOrNewDomain=Domain
NewDomain=Forest
NewDomainDNSName=14e-AD.local
DomainNetBiosName=14e-AD
InstallDNS=yes
RebootOnCompletion=Yes
SafeModeAdminPassword=Password1
Vi lagret lista i ein tekst fil, vi kjørte så dcpromo med unattended switch og spesifiserte stein
til tekst fila.
PS > dcpromo /unattend:C:\script\DCINSTALL.txt

Vi har nå installert og konfigurert AD og DNS på serveren.

Vi installerte DHCP med bruk av GUI, siden det er høgst sannsynlig at du ikkje kan
administrer scops i DHCP ved bruk av powershell, etter mykje leiting har vi til nå ikkje komt
over noken som har sagt at det er mulig eller korleis det skal gjerast.
Det er muligheit for og kunne konfigurer og sette opp DHCP i Netsh, og vi har funnet noken
leksjona og manuala på internett som beskriver problemløysninga. Men problemet oppstår
fordi vi ikkje får velge rett nettverkskort til DHCP.

For og installere DHCP brukte vi kommandoen:
Import-Module servermanager
add-windowsfeature dhcp -restart
Installasjonen tar litt tid men etter ein stund er den ferdig, den er nå installert men ikkje
konfigurert eller oppe og kjører.
Vi må bruke netsh til og konfigurere DHCP scops i powershell. Du starter netsh meget enkelt
med kommandoen:
Netsh
Siden vi ikkje klarte og få rett nettverkskort når vi installerte med Powershell/netsh so blei det
gjort med bruk av GUIen til windows og server manager.
Intro til bruk av powershell


Kapitel introduksjon


Vi vill starte med og takke og gi den ære som tilhører dei lærane og forfattera som vi har lest
leksjonane eller bøkene til og delvis kopiert delvis omskrevet leksjonane/bøkene til, for og skappe ein
brukbar inngåing i PowerShell og korleis dei forksjellige cmdlets’ane fungera og andre viktig element i
PowerShell. Under her vil følgje ein liste med kilder, og forfatterens namn.



Leksjon 07 intro til powershell (Stein Meisingseth 26.februar 2009)

Leksjon 08 Powershell script II (Geir Ove Rosvold 12.oktober 2009)

Leksjon 09 .Net og PowerShell (Stein Meisingseth 17.mars 2009)

Leksjon 10 Funksjonar i PowerShell (Stein Meisinseth 2 april 2009)

Leksjon 11

Windows Powershell 2 for dummies



Dette kapitelet av Oppgåva er meint som ein innlending i powershell, ein god del av forskjellige
cmdlets og anna vil ikkje være forklart på eit høgt nivå men vi vil prøve og få inn ein del av det mest
basiske slik at den som leser denne oppgåva som ikkje kan Powershell kan lese igjennom dette
kapitelet og kanskje lære seg ein del om powershell før dei går vidare på hovuddelen av oppgåva.

Dette er delar av tekstene som er basert på Windows Server 2008 og ikkje Windows Server 2008 R2.

Forklaring på powershell:

Nokre enkle basis kommandoer/cmdlets:
”Kva er ein kommando i powershell, ein kommando kan ogso bli kalt cmdlets. Oppbyggingen av av
kommandoer i powershell er verb-substantiv. Det som meinast med dette er rett og slett at i alle
powershell-cmdlets har du eit verb og eit substantiv. Dette gjer at kommandoane blir
sjølvforklarande og har ein struktur som er enkel å huske.”1



cmdlets               Kva den gjer/beskrivelse


1
    Leksjon 7 intro til powershell.pdf (Stein Meisingseth 26.feb 09) (side 5)
Get-Host         Den viser informasjon om kva versjon du kjører

Get-Process      Denne kommandoen vil få opp alle prosesser som kjører på maskinen i det øyeblikk
                 du kjører kommandoen men ellers er den veldig lik, som om du skulle brukt
                 ctrl+alt+delete og gått inn i prosessoversikten der.

Get-ChildItem, Viser ein oversikt over filene i ståande directory. Ls og dir er aliaser til cmdleten
ls og dir      Get-Childitem og er der for at overgangen skal være letter for dei som går frå bash
               og ledetekst. Dei fleste som har jobbet med dos kjenner til dir og dei som kjenner
               linux vil kjenne igjen ls.

Get-Date         Viser dato og klokkeslett, kan brukest til og timestampe filer og lignende. Kan være
                 nyttig ved bruk av scripts

Get-Acl          Viser sikkerheitsinformasjon om ein fil/folder eller annen ressurs. Kjørest frå
                 ståande directory

Get-Service      Visser hvilken tjenester som kjører på maskinen og hvilken som er stoppet.

Get-Help         Dette er ein veldig viktig cmdlets. Denne kommandoen åpner hjelpe filer til andre
                 cmdlts. Her ser vi at microsoft prøver og gjere overgangen frå andre
                 shellprogrammer so enkel som mulig.

                 Du bruker den ved og skrive:

                 Get-Help [cmdlets] eller man [cmdlets]



Du kan bruke tab/tabulator til og gjere ferdig kommandoer, eller bla igjenom halvferdig
kommandoer, eller leite etter dokumenter, er du i mappen dokumenter, og skal ha ein fil som du veit
starter på e kan du skrive;     notepad.exe e (so bruker du tab til og leite igjenom alle filer som
starter på e. du kunne og brukt tab til og få fram notepad.exe, stinavn osv.) Dette er veldig likt tab
funksjonen i linux.

F7-knappen kan brukest til og få opp dei siste kommandoen du har kjørt i denne sessionen. Den er
ein forkorta versjon av history-cmdletsen. Det er ein del andre vesentlige forskjellar mellom history
og F7, det er at kjørest ein kommando til dømes 10 ganger vil den fremdeles vissest barre ein gang i
F7 mens i history vil det visses alle 10 gangene. Når du bruker history cmdletsen visser det eit tall ved
siden av, du kan bruke den kommandoen som står i history, ved og skrive invoke-history [tallet] dette
vil kjøre kommandoen som ligger på den plasseringa i history.

Ein annen nyttig shortcut er at som ved dei fleste andre windows program kan du bruke F1 for og få
opp ein hjelpe fil. Dette er ikkje einaste måtte og få hjelp på du kan og bruke kommandoen Get-
Help etterfulgt av alias eller cmdlet du ønsker og vite meir om, du kan og bruke noken funksjonar
for og få meir informasjon –detailed –full . Denne cmdletsane kan være nyttige men visst du er
usikker på kva cmdlets du har som kan brukast kan du bruke Get-Command for og få ei liste, synst
du det går for fort og vil bla deg gjennom lista kan du bruke cmdleten Get-Command | more, for og
få eit meir oversiktelig intrykk
Aliaser
Vi kan og lagge nye alias til kommandoer vi alt bruker. La oss sei at vi ønsker og gjere det letter og
bruke cmdleten get-date, ved og endre den til td. Vi må då bruke kommandoen:

Set-alias td get-date

Her ser du set alias cmdleten som lar deg lage ein ny alias, etterfulgt av den nye aliasen td og til slutt
står cmdleten den blir alias for. Brukeren kan nå bruke td og get-date om kvarandre.

For og sjå kva alias du har kan du bruke kommandoen: Get-Alias.

Enkle inngåing i bruka av exchange ved og bruke powershell

Noken gode dømer på aliaser kan være

New-Item alias:cl -value c:\windows\system32\calc.exe

New-Item alias:np -value c:\windows\system32\notepad.exe

Desse 2 kommandoane gjer det enklare for brukaren og åpne notisblokk og kalkulator, mens du
brukar powershell du kan no bruke forkortningane cl og np, visst du ikkje likkar og kalle notisblokk for
np kan du endre den til noke anna med og bruke Rename-Item cmdleten vi har eit døme under der vi
skifftar navnet frå np til note

Rename-Item alias:np -newname note

Men ein viktig ting og huske om aliaser som du har laget, er at dei er kunn i funksjon til du avsluttar
powershell for at dei skal vedvarre og at du kan bruke dei, kan du til dømes legge dei til i profil fila.
Men meir om dette lengre nede. Visst du blir lei av eit alias før du avsluttar sesjonen kan du bruke
cmdleten Remove-Item alias: døme:

Remov-Item alias:cl

Denne kommandoen vil fjerne cl aliasen du må dermed gå tilbake til den gammle metoden for og få
opp kalkulatoren. Du kan ogso fjerne fleire aliaser på ein gang visst til dømes lagde mange aliaser
med namn som mittalias1, mittalias2 og mittalias3 og du ikkje lengre vil ha dem eller har nytte for dei
og vil bli kvitt dem kan du slette alle alias som starter med myalias ved og bruke følgande
kommando:

Remove-Item alias:myalias*

Visst aliaset du prøver og bli kvitt er definert med ReadOnly option må du bruke Force parameteren
for og bli kvitt den, visst ikkje vil PSH kjøre ut ein feilbeskjed om at den ikkje kan bli sletta,
kommandoen du må bruke visses i dømet under:

Remove-Item alias:se -force
Powershell har to nyttige kommandoar sm kan assistere deg i og behalde aliasane du har du kan
etter og ha laga aliasane eksportere dei til ei eiga fil, ved og bruke cmdleten Export-Alias, dette legger
til alle aliaser i ein eiga fil slik at den kan eksporterarast til bruk ved ei seinare anledning. Du
importerer filene igjen med cmdleten Import-Alias. Dette gjer det mykje enklare og definere aliaser i
profilen din mykje enklare siden du trenger kunn og importere ei fil. Det gjer det ogso enkelt og
definere det same settet med aliaser på fleire maskiner. Du kan definere dei på eit system/maskin å
ved bruk av export funksjonen og legge fila til dei andre systema eller lagre den på ein sentral
lokasjon som kan bli lest av alle vertar. Du kan enkelt exportere og importere aliasane med
kommandoane som står under:

Export-Alias c:\myaliases.txt

Import-Alias c:\myaliases.txt

Dette er ein enkel metode og lagre mange aliaser på, men visst du har gjort det før vil det mest
sannsynlig ligge ein fil med det navnet der frå før. Den vil bli overskrevet med bruk av Export-Alias
kommandoen då, for og hindre dette kan du bruke –noclobber parameteren då vil du få opp ein
error beskjed visst filen allereide eksisterer og overskrivinga vil ikkje ta plass.

Export-Alias C:\myaliases.txt -noclobber

Du kan ogso legge til ein eksisterande alias fil ved og bruke ein annen parameter som heite –append.
Dette er nyttig visst du har fleire aliaser på forskjellige lokasjoner og vil prøve og slå dem saman til ei
fil, under følger døme på korleis:

Export-Alias C:\myaliases.txt -append




Profiler
Vi skal og sjå på kva ein profil er og kva den kan gjere for oss. Du kan starte med og sjekke kva profil
som er lastet inn når du kjører Powershell, ved og bruke kommandoen

$profile

For og redigere på profilen din kan du bruke kommandoen

Notepad $profile

Dette skal stortsett fungere men det kan hende du må endre navnet til
microsoft.Powershell_profile.ps1 siden det er enkelte versjoner av powershell der det blir lagt til
Miscrosoft.Powershell_ foran profil.ps1

Du har nå opprettet profilen din og kan begynde og skrive inn funksjoner. Vi synst det er best og
starte med og lage ein eigen funksjon på og lett få opp profilen slik at man kan editere den når man
ønsker å legge til nye ting eller fjerne noko. Funksjonen opprettes med å legge til denne linjen i
profilen:
Function pro {notepad $profile}

Og man oppretter med denne kommandoen ein funksjon som vi kaller pro som åpner profilen din i
notepad. Etter at du har lagret og restartet Powershell vil man få opp profilen sin i notepad når du
skriver: pro

Som du nå forstår kan du legge til funskjoner i skriptet som du vil skal kjøre ved oppstart, dette er
veldig viktig for driftere siden dette kan hjelpe til og effektivisere arbeidet.



Script
Kva er eit script? Eit script er ein mengde kommandoer som arbeider saman for å løyse eit problem
eller gjer ein eller fleire handlingar. Script kan effektiviser ein god del kommandoar. Eit døme vil være
at ein som er ansvarlig for datasystema må kvar dag kjøre ein lang og komplisert kommando, eller
serie med kommandoer som han bruker til og sjå etter endringar iløpet av natta, for og sjå om det
har vorre noken mistenkelig aktivite, dette er eit typisk døme på ein prosess som lett kan
automatiserast ved og bruke scripts. Men dette er ikkje alt script kan gjere i powershell, det er eit
avansert scriptespråk lagt ved som er basert på .Net, dette føre til at du kan gjere det meste i
powershell og ved og bruke script. Og legge til fleirebrukkara på ein gong frå ein csv fil blir relativt
enkelt og gjere ved og bruke script. Men vi skal ikkje gå so mykje inn på scripts enda, men vi skal
forklare enkel syntaks.

Ein viktig ting å legge merke til er bruken av #, #-tegnet kan putast i starten av ei settning dette vil då
føre til at resten av teksten på linjen blir kommentert ut. Det er eit anna tegn som og er nyttig ved og
bruke script visst du får ei linje som blir veldig longt kan du brytte den opp ved og bruke `-tegnet.
Dette gjer at du kan ha longe kommandoa i eit ryddig format.

Dei andre viktige delan av scripting følger ned gjennom dokumentet. Dessutan blri .net forklart betre
seinare i dokumentet. I slutten håper vi at du som powershell brukar har litt betre innsikt i korleis
powershell fungerer.




Variablar
”I likheit med dei fleste script-språk er PowerShell grei til sjølv å vurder kva variabel-type som passer
best. Til dømes vil $a =2 gi ein variabel av typen heiltall, mens $b=”2” gir ein streng

Kva skjer om man forsøker å addere saman disse to variablene? Jo, avhenger om man beregner
a$+a$ eller $b+a$. Grunnen til dette er at PowerShell bruker den første variabelen i utrykket som
mal, og forsøker å tilpasse resten av utrykket deretter. Så

$a+$b vil bli 2+2 altso 4, mens

$b+$a vil bli ”2”+”2” som er ”22”
Som vi ser bruker vi + til å skøyte saman fleire tekststrenger.”2

Det går og ann og deklarere variabelen dette gjørast ved å skrive datatypen i klammer-paranteser
framfor variabelen, til dømes:

[int] $a = 3

Det kan være fleire grunner til å gjere dette blant anna lesbarheit i script. Men det kan og være
nødvendig for at PowerShell skal beregne på den måtten vi ønsker. Nedenfor er ein tabell med dei
viktigaste datatypane i PowerShell.

Type              Beskriving

[int]             32-bit signed integer

[long]            64-bit signed integer

[string]          Fixed-length string of Unicode characters

[char]            A Unicode 16-bit character

[byte]            An 8-bit unsigned character

[bool]            Boolean True/False value

[decimal]         An 128-bit decimal value

[single]          Single-precision 32-bit floating point number

[double]          Double-precision 64-bit floating point number

[xml]             Xml object

[array]           An array of values

[hashtable]       Hashtable object

Ein viktig ting om varriabler er at du kan kalle dei nesten alt mulig, med noken untak desse, untaka er
spesielle windows powershell variabler, som blir kallt automatic variables fordi powershell er
ansvarlig for dei og styrer dei for deg. Du kan bruke kommandoen:

get-help about_automatic_variables



nedanfor følger ei liste over variable namnet og beskrivelse

Variabel navn              Beskrivelse

$$                         Inneheld den siste token i den forrige linja som er mottatt av shellet.


2
    Leksjon 08 Powershell script II.pdf (Geir Ove Rosvold 12.oktober 2009) (side.2)
$?                  Inneheld statusen til den siste operasjonen. Sant når den fungerte, falsk ellers.

$^                  Innehelder det første token i den forrige linja som er mottatt av shellet.

$_                  Inneheld det noværande objektet i pipeline objektet.

$Args               Ein array av udeklarerte parameters eller verdiar som er gjitt til ein funksjon,
                    script eller script block.

$ConsoleFileName    Lagrer filnavnet til den nyligaste utforska console fila.

$PSCulture          Inneheld den noværande kulturen brukt av Oset.

$Error              Ein array av error objekter som representerer dei nyaste errorane.

$ExecutionContext   Inneheld ein EnigneIntristics objekt som representerer exectuion context til
                    windows Powershell host.

$False              Innehelde verdien false (falsk)

$ForEach            Inneheld tellaren til ein foreachobject loop

$Home               Lagrer den fulle stien til brukarers heime mappe.

$Host               Noværande host application for windows PowerShell.

$Input              Inneheld det noværande objektet i pipelinen i process blocken til ein funksjon

$LastExitCode       Inneheld exit koda til det siste kjørte windows programet.

$MyInvocation       Inneheld informasjon om den noværande kommadoen. Nyttig for dynamisk
                    henting av filnavnet og stien til det noværande scriptet.

$NestedPromtLevel Lagrer det noværande promt level for nested prompts. Dette er litt avansert
                  so du vil kanskje kjøre get-help about_automatic_variables kommanoen for
                  meir informasjon.

$NULL               Inneheld NULL eller tom verdi

$PID                Inneheld prosess identifier til windows powersehll prosessen.

$Profile            Lagrer den fulle stien til windows powershell user profile for standard shellet.

$PSHome             Lagrer den fulle stien til installsjon av windows pwoershell

$PSVersionTable     Ein hash table som innehelder detaljer om versjonen og buildet til den
                    noværande Windows PowerShell consolen.

$Pwd                Lagrer den fulle stien til den noværande plasseringa

$ShellID            Inneheld identifieren til det noværande shellet.
$True                  Inneheld TRUE

$PSUICulture           Lagrer navnet til UI culturen som er i bruk no.




Om Strenger.
Ein streng er tekst, dette hørest kanskje litt rart ut men, det offiselle namnet til tekst er streng. Men
det er viktig og forstå forskjellen mellom det vi tenker som tekst og det maskinen tenker er tekst. For
oss bør ein tekst være forståelig, mens ein string (tekst for maskina) betyr berre at det er ingenting
meir ein etterfølgande tegn. Det har ikkje noko og sei kva tegn som blir brukt, det blir streng uansett.
Vi tar noken raske dømer på forskjellige strenger

Huoih>U N4

J

Dette er ein streng

:mgjnq9’’¨å

Ahgksa det er rart ajgiåo

Alle desse døma over er forskjellige strenger. Ein streng kan inneholde kva som helst tegn du ønsker
inkludert mellomrom og tab(kjent som white spaces på engelsk) Teoretisk sett er ein strengs lengde
uendelig, men den er i røynda begrensa til kor mykje minne du har.

Du kan ha stringer som har null(zero) lengde som er ein streng som ikkje innehelder noken tegn, blir
kalt ein tom streng(empty string). Du kan ogso ha ein streng med inga lengde. Det er lett og bli
forvirra av forskjellen mellom ein streng med null lengde og ein med inga lengde. Ein Null streng
(zero) er ein spesiell type streng som ikkje har blitt definer enda, so den inhelde ingenting og har
ikkje ein lengde. Verdien til denne strenger er den spesielle automtaiske variabelen kalt $null. Visst
ein variabel har ein data type streng og den er definer men ikkje gitt ein verdie enda inneholder den
ein $null streng istaden. Men visst ein tom streng er ein streng som enkelt og greitt berre ikkje
inneheld noko, kva er forskjellen og kvifor blir ikkje strengen berre satt til $null. Forskjellen er at det
er meint og være ein forskjell mellom dei to typane. Forskjellen er der slik at det kan være forskjell
mellom ein streng som ikkje er aktivert enda, og ein som er meint å være tom. Visst stringen til
dømes er ein del av ein kommando linje parameter, so kan du sjekke for å sjå om verdien er lik $null,
som vil sei at brukar ikkje gav ein verdi til denne parameteren. Dermed blir forskjellen at den tome
strenge sjølv om den er ein tom streng har den ein verdi.

Kort og enkelt sagt, ein $null streng har ikkje fått satt ein verdi enda mens ein tom streng har fått
verdien sin satt til tom/ingenting.
Manipulering av Strenger
Du vil kunne kome til og manipulere strenger for å lage nye strenger, som å splitte dei, kombinere dei
eller ta bestemet segment av ein streng, dette hørest vanskelig ut men windows gir deg eit stort set
med metodar for streng manipulasjon dette er på grunn av at det er byggd opp på .NET Framework



Kobinere strengar
Fordi det er nyttig og kunne kombinere strengar i PowerShell og du vil gjerne vil putte strengar
saman dynamisk (som trengst når koda kjøre), kombinere strengar er ein av dei mest vanlige streng
operasjonane. Eit typisk måtte er når du vil outpute noko informasjon til skjermen ved og kombinere
literære strengar med variable verdiear, vi tar eit døme på det under:

For ($i = 0; $i –lt 5; $i++){

Write-Host (‛The current value is: ‛ + $i)

}

For dei av dokke som har jobbet med scripting eller programerin vill dette være veldig kjent. Ein
enkel + operator kombinerer strengarne. So lenge du huskar og ha + mellom dei ønska strengane
eller variablane du ønsker og skrive ut og huskar at strengar må skrivast ut med ”” so er kombinering
av strengar veldig enkelt.



Kombinere strengar med ikkje strengar
Du kan kombinere strengar med andre data typar som ikkje er strengar forutsett at dei data typane
kan bli konvertert enten underforståt(implicitly)(automatiks med PSH) eller
ettertrykkelig(explicitly)(ved å først sette verdien til ein streng). Når du kombinerar ein streng med
ein ikkje streng verdi, og den strengen dukker opp først når du leser verdien frå venstre til høgre, vil
ikkje-strengen verdien vil verdien blir endra til ein streng og so kombiner ved og bruke den vanlige
metoden. Visst denne prosessen hørest forvirande ut kan vi ta eit døme:

$minStreng = ‛Dette er nr ‛

$mittNum = 1

Write-Host ($minStreng + $mittNum)

Write-Host($mittNum + $minStreng)

Som forventa vil den første Write-Host visse ”Dette er nr 1.” Windows PowerShell ser at du
kombinerar ein streng og eit number (i dette tilfelle ein integer), so i bakgrunnen konvertera den
først numeret 1 til ein streng med teksten 1 og so kombinera den dei to strengane. Den andre write-
host vil resultere i ein feilmedling som sei at den ikkje kan konverter ”Dette er nr ” til ein type
”System.Int32”. Dette er fordi Windows PowerShell ser at du kombinerer ein string og eit nummer
ogso men fordi den første verdien den ser er eit nummer, vill den prøve og konvertere den andre
verdien til den same data typen. Å fordi strengen ikkje representerar eit nummer, slenger windows
powershell ut eit nummer. Løysninga for å kombiner ein streng med ein anna verdi sjølv om den
flrste verdien ikkje er ein streng er og ettertrykkelig(explicitly) konvertere den andre verdien ved og
endre den til ein streng. For å gjer det legger du till [string] framfor variabel namnet for å fortelje
windows PowerShell at du vil at denne verdien skal bli behandla som ein streng (dette tvinger
konventeringa). Den modifiserte versjone av den andre Write-Host settninga blir då:

Write-Host ([string]$mittNum+$minStreng)

Enkelt sagt kan du tvinge ein verdi som ikkje er ein streng til å bli behandla som ein streng, ved å
slenge på [string] framfor, siden dette forteller Windows PowerShell at du ønsker at verdien skal bli
skreven som streng data type.




Splitte strenger
Visst du kan kombinere strengar, må du kanskje ha ein måtte splite dei frå kvarandre. Du har kanskje
ein del grunner til og ville ta ein streng frå kvarandre. Du vil kanskje ta ein streng som er delt opp av
eit bestemt tegn, som ein linje frå ein Comma-separated Value(CSV) fil, og hente den indviduele
strenge som representera forskjellige koloner med data. Av og til , trenger du berre ein de av ein
string som dei første tre bokstavane i eit namn. For å dele strengar, brukar du split metoden. Split
metoden er i den enklaste formen, deler ein streng in i ein array av strenger ved og bruke
mellomsrom og tabs som dele tegn. Vi snakker om arrays litt seinare i dokumentet. Enkelt kan du sei
at ein array er fleire objekter som innehelder informasjon som kjemer etter kvarandre som er samlet
i eit objekt (du kan tenke på sjølve arrayen som inneheld objekta som ein mappe og kvart objekt som
ein fil med namn som startar på 0 og teller oppover). Vi tar nå eit døme for å visse korleis split
komandoen fungerar, for å dele den opp i fleire strenger.

$str = ‛Dette er eit døme‛

$str.split()

Utputen til denne kommando sekvensen blir

Dette

er

eit

døme

Dette ser kanskje litt stillig ut men virkar i starten ikkje so veldig nyttig. Men for å visse den litt betre
kan vi sei at du har IP adresser som ein streng, å du har lyst til å dele IP adrressene so du kan finne
verdien til dei 4 oktettane (ein oktett er ein samling på nøyaktig 8 bit(total verdien for 8 bit blir 255).

Vi visser igjen eit døme på bruk av split for å finne ut av det

$minIP = ‛158.38.43.171‛

$ipArr = $minIP.split(‛.‛)
Write-Host(‛antall element i ipArr ‛ + $ipArr.length)

Write-Host(‛Første oktett: ‛ + $ipArr[0])

Write-Host(‛Andre oktett: ‛ + $ipArr[1])

Write-Host(‛Tredje oktett: ‛ + $ipArr[2])

Write-Host(‛Fjerde oktett: ‛ + $ipArr[3])

Du legger kanskje merke til noken nye aspekt i dette dømet. Når vi brukte split metoden spesifiserte
vi kva tegn som vi brukar som delar ved å kjøre $myIp.split med ”.” som parametter, har vi instruert
split meoden og ta strengen lagra i $minIP og delle den opp i substrenga ved og bruke punktum som
delar. Ein array har ein eigenskap som heite length som definera kor monge objekt som er lagra i
den. I dømet visst arrayen kor monge objekt som er i den etter at split metoden er brukt, å $ipArr har
fire element(objekter) som forventet. For å grippe takk i enkelt element i arrayen, so kan du referere
til den ved og bruke indexen, som er i formatet $arrayname[index]. Det er veldig viktig og huske at
arrays er indexet til å begynde på 0 so det første objektet(elementet) blir då $ipArr[0] og nr 2 bli [1]
osv.

Men når du spesifisera delaren i split metoden, trenger du ikkje oh holde deg til eit tegn. Visst du
bruker fleire tegn som delera, kan du enkelt kombinere dei og lage ein streng med delara, siden koda
vil behandle dei likt so vi kan sjå på eit døme som gir same resultatet som det forrige dømet:

$minIP = ‛158.38;43:171‛

$ipArr = $minIP.split(‛.;:‛)

Write-Host(‛antall element i ipArr ‛ + $ipArr.length)

Write-Host(‛Første oktett: ‛ + $ipArr[0])

Write-Host(‛Andre oktett: ‛ + $ipArr[1])

Write-Host(‛Tredje oktett: ‛ + $ipArr[2])

Write-Host(‛Fjerde oktett: ‛ + $ipArr[3])



Kutte ut ein del av ein string
Ein annen vanlig streng operasjon er og ta ein del av ein streng, som vi no referar til som substreng.
Ein substreng kan være ein del av starten eller sluten av ein streng eller ein plass i mellom. Visst
strengen er delt opp slik som med split metoden, kan du bruke den. Men som regel visst du har ein
streng og vil ha ein substreng frå den kan du bruke substring metoden, her kommer eit døme:

$namn = ”Ola Nordmann”

$del1 = $namn.substring(0,3)

$del2 = $namn.substring($namn.length-4,4)
Write-Host ($del1 + $del2)

Her definere eg fullt namn som ein streng. Ved å bruke substreng metode, fortelje eg windows
powershell å returner dei første 3 tegna til $namn og sette dei i $del1. So berre ej den om og ta dei
siste fire tegna i $namn å sette dei inn i $del2, so avslutta ej det med å sette det saman til og skrive
ut outputen Olamann. Dette kan være nyttig visst du skal lage brukarnamn og lignande.

Substring metoden behøver 2 perameter. Den første parameteren er kvar du skal starte(første
posisjon)(begynde frå venstre) til ditt du vil at den skal begynde og ta tegn. Nummeret 0
representerar det første tegnen. Den andre parameteren er lengda til substrengen. Den definnera
kor monge tegn du vil ta etter kvar andre, den begynder frå den første parameteren. So setter du 1
der vil berre det første tegn bli tatt. Alle strengar har dessutan ein length parameter som forteller
deg kor mange tegn som er i ein streng. Når du vil få tak i ein substrengen frå sluten av strengen, kan
du berre bruke $strengvariable.substring($stringvariable.length –count, count) der count er antall
tegn du vil ha og –count er kor longt du vil starte frå slutten av strengen.

Men du er so klart ikkje limitert til kunn å grippe frå starten og slutten av ein settning du kan ogso
bruke substring metoden for å gripe ønska området av strengen, vi ser på dømet:

$test= ”Himmelen er full av skyer”

Write-Host $test.substring(12,4)

Denne kode snutten vill skrive ut full, siden den tar det 13 tegnet som er f og skriver ut dei neste 4
tegna dette blir full (det første tegnet som blir tatt er f)

Når du brukar substring er det ikkje enkelt og introdusere feilbeskjeda(errors) inn i koda, so du bør
være forsiktig og bruke ein del defansiv programmering for å forsvare deg sjølv. Visst du skrive eit
script og går ut frå at ein gitt streng variable vill alltid inneholde streng med meir ein seks tegn og
bruker substring kommandoen til og hente 4 tegn, so får du ein error visst scriptet hadde berre 3
tegn, dette vil få scriptet til og avslutte seg. For å forsvare seg mot denne feilen, kan du slenge
substring settninga i ein if/else klasus for og være sikker på at lengda til stringen er minst mengda
med tegn du ønsker og ta ut, eit døme:

$a = ‛abc‛

If (a$.length –ge 4) {

Write-Hoste (‛Dei fire første tegna er: ‛ + $a.substring(0,4))

} else {

Write-Host (‛Strengen har mindre ein 4 tegn: ‛ + $a)

}

Her sjekkar du om lengden av $a er større eller lik 4. visst den er det, vil den kjøre ut dei fire første
tegna, ellers so før brukeren beskjed om at strengen har mindre ein fire tegn og skrive ut heile
strengen.
Bytte om ord i streng
Dette er kan være ein nyttig eigenskap og kunne, du kan bytte ut alle orda i ein tekst med eit anna
ord, eller bytte om heile strengar om du ønsker det. Dette gjer du med streng replace metoden, vi
har eit døme:

$str = ‛Sauden er ond‛

$nystr = $str.replace (‛ond‛,‛snild‛)

Write-Host $nystr

Dette døme bytter alle plassane der står ond med ordet snild. Replace metoden tar to parameter.
Den første parameteren er strengen du vil erstatte og den andre parameteren er strengen du vil
bytte den ut med. Visst strenge du ønsker og bytte ut ikkje eksisterer blir ingenting erstatet. Det kan
være litt vanskelig og forstå kor mektig dette kan være som verktøy, la oss sei at du skal bytte admin
rettigheite frå han pål til han per, du kan då kjøre ein replace kommando for å bytte ut kven som skal
være admin, eller kanskje firmaet du jobber for har flyttet og har mange maler med den gammle
adressen, du kan då lage eit script som går igjenom dokumentene og bytter adressa dette kan spare
veldig mange arbeidstimar.



Jobbe med Streng posisjonering.
Av og til , trenge du og finne posisjonen til ein streng i ein anna streng, mest vanlig å rekne ut start
posisjonen for å gripe ein substring. La oss sei at du har ein e-mail adresse som ein streng. Du kan
finne ut brukarnamnet lett i haudet ditt fordi det e det som kjeme før @ og domene namnet er det
som kommer etter @. Vi viser eit døme

$email = ‛noken@døme.no‛

$atpos = $email.IndexOf(‛@‛)

$user = $email.substring(0,$atpos)

$domain = e$mail.substring($atpos+1, $email.length-($atpos+1))

Write-Host (‛Brukarnamn: ‛ + $user)

Write-Host (‛Domain: ‛ + $domain)

Som du ser i koda, kan du finne posisjone til ein streng i ein anna streng ved og bruke IndexOf
metoden. Du kaller IndexOf metoden på strengen du søker i (i dette tilfelle $email), og parameter til
IndexOf er strengen du leitar etter. Verdien denne koda returnera er indexen inne i den strengen
som innehelder den første gongen den kjeme over den gitte søke strengen, visst search strengen
ikkje er funnet verdien som blir returnert er -1. Dette døme returnar ein verdi av 5, som blir lagra i
$atpos. Du legger kanskje merke til at @ er det 6 tegnet. Dette kan sjåast litt rart ut visst du ikkje
huskar at indexear alltid startar på 0, so det andre tegnet blir index 1: so enkelt sagt, tegn nr 6 -1 blir
index 5.

Å skaffe brukarnamnet no er nokso enkelt, fordi du kan bruke standaren for å skaffe substrings som
starta på byringa av strengen, du brukar berre substreng metoden å sette første parameteren til 0.
For å skaffe den ønska lengda til strengen kan du bruke verdien til atpos fordi den allereid inneheld
verdien som er lik til lengda av strengen som kjeme før. Du kan gjere det same med domene namnet
på ein liknande måtte, men processen krevje litt meir. Start plassen din blir $atpos+1 fordi du ikkje vil
ha @ som første tegn i strengen. For å få lengden av denne substrengen trenger du å ta lengden av
strengen og trekke frå posisjonen du starta med. Det er sikkert letast og forstå ved å sjå på dømet.

Ein annan god å vanlig bruk av IndexOf metoden er å foreta sjekkar av strengen. La oss sei at du lager
eit script som forventa ein bestemt variabel skal inneholde ein gyldig email adresse. Ein enkel sjekk
etter verdien for å være sikker på at den innehelde eit @ tegn, dette vil hjelpe ein god del. I røynda
er det riktig nok ikkje nok med eit @ tegn for at email adressa er gyldig men siden dette er berre eit
døme fortsetter vi. For å være sikker på at den innehelde eit @ tegn, kan du gjere noko som ligna på
dette dømet:

$email = ‛min _email_address‛

If ($email.IndexOf(‛@‛) –lt 0) {

Write-Host ‛Invalid email address‛

} else {

Write-Host ‛Valid email address‛

}

IndexOf metoden vil alltid returnere ein verdi større eller lik 0 visst den finne den ønska søke
strengen i strengen der metoden er kalla på. Ellers vil den returenre -1. Dette kan du utnytte ved og
sjekke om den den returnea ein verdi på IndexOf er mindre ein 0 for å fastslå om den ønska strengen
var funnet.



Korleis endre streng til upper eller lower case
Strenger kommer i alle former og størrelser. Men av og til vil du lage litt unformitet i utsjånden. Ein
måtte for å halde streng utputen uniform er å gjere deg sikker at alle tegna er uppercase eller
lowercase. Dette er enkelt og gjere, sjå dømet under:

$str = ‚My MiXed CaSE stRInG‛

Write-Host $str.ToUpper()

Write-Host $str.ToLower()

Koding blir ikkje mykje enklare ein det. Men dette dømet visser ikkje so veldig bra kor mektig
powershell er og korleis du kan utnytte case-endring mens du jobber i powershell. La oss sei at du
skal legge in det første tegnet som upper, og dei restreande som lowercase. La oss sjå på dømet:

$name = ‚sTEvE‛

$a = $name.substring(0,1).ToUpper()

$b = $name.substring(1,$name.length-1).ToLower()
Write-Host ($a + $b)

Som du ser bruker vi igjen substring , og utnytter det vi har lært til no, for og til dømes kunne sørge
for at namn, adresser og lignangde blir skreven med stor bokstav etterfulgt av små. Dette går ann og
leike seg med slik at du manipulerar teksta som du vil.

Jokertegn og regulære utrykk.
Jokertegn (wildcard characters på engelsk) kjenner vi bl.a. frå filsystemet både i DOS, Windows, og
linux. Følgande jokertegn brukast i Powershell:



?           Erstattar eit hvilket som helst teikn (men altså nøyaktig eitt teikn)

*           Erstattar ingen eller fleire teikn (hvilket som heilst teikn, og hvilket som helst antall).

[a-d]       Erstattar eit hvilket som helst teikn mellom a og d (a, b, c eller d).

[ad]        Erstattar eit hvilket som helst av teikna (a eller d).

Døme neste side

Til dømes vil begge disse utrykkene returnere true:

PS> ‛Test‛ –like ‛[A-Z]e?[tr]‛

PS> ‛Leir‛ –like ‛[A-Z]e?[tr]‛

Ein viktig type sammenligningsoperatorer som vi ikkje har tatt med i oversikten er operatorer som
bruker regulære utrykk (regular expressions på engelsk). Dette gjelder operatorene –match og –
notmatch. Slike utrykk er svært effektiv blant anna når vi skal sette opp filtre med where-object og
liknande. Dømer på bruk av match og notmatch kan finnest på nettet, vi følte at det kunne være
nyttig og nemne dei sidan det benyttast regulære utrykk. Regulære utrykk er ein vidareutvikling av
jokerteikna, og dei gjer det mulig å teste for svært avanserte mønstre.

Apostrofer:
”På vanlige norske tastatur har vi forskjellige apostrofer (vel, eigentlig er enkelte av dei aksentar,
men i dagligtale bruker vi gjerne begrepet apostrofer om alle saman – i hvert fall viss dei står for seg
sjølv og ikkje over én bokstav. Dei to apostrofene på tasten mellom +-tasten og slettetasten er
egentlig aksenter.) I denne leksjonen bruker eg begrepet apostrofer om alle.

Legg merke til apostrofene i tabellene nedenfor. Disse har hvert sin bruksområdet i PowerShell:

Tegn                               Plassering på tastatu                 Navn (i denne leksjonen)

”                                  Shift + 2                             Dobbel-apostrof

’                                  ’(under *)                            Enkel-apostrof

`                                  Shift + \ mellomrom                   Baklengs apostrof
                                                                              (back-tick på engelsk)

Dersom man bruker variabler i tekstrenger er det viktig å være klar over forskjellen på enkle og doble
apostrofter. Med bruk av dobbel-apostrofer vil PowerScript sette inn verdien av eventuelle variable,
og også gjøre ein del andre beregninger. Ved bruk av enkel-apostrofer ser PowerShell på det heile
som ein streng, og bruker den som den er:

PS> $x=‛TEST‛

PS> ‛Dette er ein $x‛

Dette er ein test

PS> ’Dette er ein $x’

Dette er ein x$

Ein streng som står i dobbel-apostrofer kalles expanding string på engelsk. Dette fordi PowerShell
beregner alle variabler og såkalte esape sequenes i strengen. Strenger i enkeltapostrofer kalles lieral
strings. Dei brukes altså som dei er, og det utføres ingen prosessering av strengen.”3

Visst du skall sette inn ein enkel apostrof i ein tekststreng bør du skrive den slik ”’” det vil sei ein
dobbelapostrof på kvar side av enkelt apostrofen.

Escape Sequences
Escape sequences vi har ikkje funnet noko gode norske ord for det, men det kan være kjent frå andre
programmeringssammenhenger. Med hjelp av slike sekvenser kan vi skrive ut spesielle tegn – gjerne i
forbindelse med formattering av tekst. Vi kan f.eks skrive ut ein tabulator, eit linjeskift (LF, LineFeed)
eller ein vognretur (CR, Carriage Return). Eller enklare ting som enkel- eller dobbel apostrofer.

Escape sequences består av to tegn: eit tegn som forteller at No kommer det eit tegn som betyr noko
spesielt, og deretter eit tegn som viser kva spesiallitet vi ønsker. I mange språk og platformer brukes
baklengs skråstrek som det første tegnet i ein escape sequence. I DOS/Windows brukast imidlertid
dette tegnet til å skille mellom ulike nivåer i filsystemet, og derfor bruker powershell eit anna tegn.
Powershell bruker derfor tegnet baklengs apostrof (ofte kalt back-tick på engelsk), som ser slikt ut `.
Dei viktigaste Escape Sequences er:

sekvens         Namn

`a              The alarm character                       Lager et bip i høgtaleren til PCen.

`b              The Backspace character                   Sletter tegnet foran på skjermen (men beholder
                                                          strengen uendret).

`f              A form feed                               Sideskrift (virker på ein del skrivere)

`n              A line feed                               I DOS/Windows er det som regel ikkje forskjell på


3
    Leksjon 08 Powershell script II.pdf (Geir Ove Rosvold 12.oktober 2009) (side.3)
                                                    `n og `r

`r           A carriage return                      I DOS/Windows er det som regel ikkje forskjell på
                                                    `n og `r

`t           A tab                                  Tabulator



Here-strings
Dersom man har ein lang tekst som innehelder mange apostrofer eller andre teikn som har spesiell
betyding i PowerShell kan man bruke såkalte Here-strings. Ein here-string kan gå over fleire linjer og
starter med.

Variabel = @‛

Og avsluttest med

‛@

Men dei må stå på eigen linjer. So og skrive det slik:

Variabel = @‛ Og avsluttest med ‛@

Vil ikkje fungere

Variabelen vil nå inneholde heile tekst strengen visst det er gjort riktig med apostrofer og alt.

Dette er nyttig spesielt når du kan gjer slik

Variabel = @‛

Hei ‛dette går‛ heilt fint

Du kan bruke all syntakst som du vil og skrive

So mange linjer du berre vil

‛@

Du vil nå få skrevet ut alt som er mellom @” og ”@ uansett kva som står der.

Arrays (tabeller)
I likskap med kva tilfellet er for andre verktøy er array , eller tabeller ein viktig mekansime i
PowerShell. Den enklaste måtten og opprette ein array på er å skrive inn verdiane i arrayet manuelt:

$arr = 1, 2, ”bra”, ”dårlig”

Arrays trenger ikkje at alle elementer er av same type

Nå kan kvar enkelt element takast i bruk på same måten som i andre språk, men det er viktig og
huske at indeksene starter på null, dette er ikkje alltid like enkelt og huske og kan føre til problemer.
Det vil sei at $arr*2+ er ”bra” og $arr*0+ er 1.
Det som er litt spesielt nå er at du kan angi det siste elementet i einkvar array med indeksen -1, den
nest siste med -2 osv. Det vil sei at $arr[-1+ blir då ”dårlig”.

For å finne antall elementer i arrayet brukes

$MyArray.count

$MyArray.length

Ein annan måte å skrive inn det same arrayet på er og skrive det slik:

$arr = @(1, 2, ”bra”, ”dårlig”) dette kan minne om here-strings men legg merke til at det blir brukt
@() og ikkje @””.

Laging og bruk av hash tabellar
Den enklaste og mest direkte metoden for å lage ein hash tabell i Windows Powershell er å bruke
@{} metoden. Den fungerar på same måtte som @() metoden som du bruker når du lager arrays,
men forskjellen er at hash tabellen krever at du ettertrykelig definerer namnet(index) for kvar verdi
og at du seperere namnet/verdien paret med semikolon i staden for komma. Vi visser nå eit døme på
ein hash tabell som implementera eit enkelt brukarnamn/passord sjekk:

$userpwdhash = @{jimmy = ‚n3uTR0n‛; optimus = ‚Pr!m3‛; pinky = ‚8R@!n‛; bob
= ‚B1L03r‛}

Write-Host (‚Pinky’s password: ‚ + $userpwdhash[‚pinky‛])

Write-Host (‚Jimmy’s password: ‚ + $userpwdhash[‚jimmy‛])

Du kan lage ein blank hash tabell ved og bruke @{} med ingenting inne i {}-klammene, som dømet
visser:

$emptyhash = @{}

Du kan tenke på ein hash tabell som ein enkel tabell med to kolloner og like monge rader som der er
objekter/ting i hash tabellen. Den første kollonen innehelde namnet, og den andre kollona innehelde
verdien. For å sjå heile innhaldet til $userpwdhash hash tabellen, trenger du berre og skrive in
$userpwdhash og trykke enter for å få denne outputen:

PS C:\TEMP> $userpwdhash

Name            Value

----            -----

pinky                   8R@!n

optimus         Pr!m3

bob             B1L03r

jimmy                   n3uTR0n
Når du vil hente verdien til eit av namna, kan du enkelt bruke same syntakst som du brukte for å
hente innhaldet til array tingen(item), bortsett frå at med hash tabellar er indexen namn delen av
namn/verdi paret som visst i dømet under:

$userpwdhash[‚pinky‛]

Du kan ogso gå inn dirkete til verdien ved og bruke dot operatoren, døme under:

$userpwdhash.pinky

Namnet du bruker i ein hash tabell må være unikt fordi dei er indeksert inn i data strukturen.

Når eg laggar $userpwdhash hash tabellen og initiera den med dei fire namn/verdi para, puttar eg
ikkje ” ” rundt namna. Sjølv om du kan gjere det (tabellen vil oppføre seg sammeleis uansett), har eg
med vilje ikkje gjort det for å demonstrer ein antakelse som windows powershell gjer: når du
spesifisera namn/verdi para når du lager hash tabellen, vil windows powershell alltid gå ut frå at
namna er strenger. Denne antagellsen er korfor hash-tabell lagging og initiera prossen fungerar heilt
fint utan ””. Eg valgte derimot å bruke ”” rundt verdian fordi teknisk sett kan ein verdi være kva som
helst. Ved å bruke ”” bestemer eg at verdiane skal være strenger. Ein hash table returnerar $null når
du prøva og hente ein verdi for eit namn som ikkje eksisterar. Visst du vill sjekke om eit namn alt er
definert i ein hash tabell, kan du enkelt spøre etter verdien til det namnet og sjå om verdien er lik
$null, vi visser det i dømet:

if ($userpwdhash[‚somebody‛] -eq $null) {

Write-Host (‚The name somebody doesn’t exist in the hash table!‛)

}



Endring av hash tabellar
Når du har ein tabell struktu som ein hash tabell vil du kunne gjere to viktige ting: legge til og fjerne
innlegg. Visst du vil legge til eit namn/verdi par til ein eksisterande hash table, kan du bruke hash
tabellen sin add metode. Add metoden tar 2 parameters, som er namnet og verdien i den rekefølga.
So visst du vil legge til ein brukar/passord par til $userpwdhash hash tabellen i den forige delen kan
du gjere som i dømet under:

$userpwdhash add(‛tony‛,‛S7@rK‛)

Det er viktig å ha namnet i ”” visst namnet er ein streng, fordi i motsettning til når du initiera hash
tabellen, vil ikkje add metoden gå ut i frå at namnet du gir er ein streng. Du kan fjerne eit innlegg frå
hash tabellen ved og bruke remove metoden. Remove metoden tar barre ein parameter, som er
namnet til innlegget du bil fjerne. Her kommer eit døme:

$userpwdhash.remove(‛tony‛)
Lopping gjennom hash tabellar
Fordi indexen som blir brukt i hash tabellar er nokso tilfelldig gjer at det er veldig vanskelig å loope
gjennom kvar gjennstand(item). Ein måtte å komme seg rundt limiteringane er og bruke ein array. Du
kan ta namna (elles kjent som keys), konvertere dei til ein array, og då loope gjennom arrayen for å
hente verdian, dette hørest veldig komplisert ut men er egentlig veldig enkelt vi visser døme under:

$names = @($userpwdhash.keys)

foreach($name in $names) {

Write-Host ($name + “ = “ + $userpwdhash[$name])

}

Som du ser er det ikkje so veldig vanskelig. Du kan bruke @() metoden for å skappe ein sammling av
namn ved og gi den keys eigenskapen til hash tabellen. Keys eigenskapen innehelde namna til ein
array, du kan bruke ein foreach loop for å gå gjennom kvar gjennstand(item) i sammlingan og gjere
kva du vill med det.

Lage tilfelldige tall
Av og til vil du trenge å lage tilfelldige tall (eit tall som er valgt for ingen bestemt grunn).
Bruksområda for dette varierar frå å lage windows powershell-basert tall spell, til å lagge tilfelldige
filnamn. Denne oppgåva er veldig enkel i windows powershell fordi alt du trenger å gjere er å lage ein
instance til det random objektet og bruke next metoden for å lage ein verdi, som visst i dømet:

$objRandom = New-Object Random

$rnd = $objRandom.Next(1,1000)

Random objektet sin Next metode tar to parameter, som representerar den lavaste verdien og den
høgaste verdien som du vil ha tilbake. I dette tilfelle, $rnd innehelde eit tilfelldig tall frå 1 til 1000.

Objekter og handtering av dei.
PowerScript(Scripting i powershell) er eit utypisk objektorienter språk, det er ikkje objektorienter
koder slik som man kjenner frå java, C++ eller C#, men vi derimot forholde oss til objekter når vi
bruker PowerShell. Resultata vi får frå dei fleste cmdlets er objekter, og innehelder åltså både
informasjon om ulike verdiar (egenskaper) til objektet, og informasjon om korleis eigenskapane kan
endrast (metodar).

Ein av dei tinga som kan virke overveldane med PowerScript(Scripting i powershell) er antall
eigenskaper og metoder til mange objekter. Dette tar tid å få oversikt over og bli vant med.



Vi kan til dømes bruke get-process til og liste ut alle prosessane på maskina. På skjermen får vi da ut
ein del sentral informasjon om kvar prosess. Viss vi ser på resultatet av get-process vil vi sjå at for
kvar process er det lista ut ein del eigenskapar. Dermed kan vi oppfatte dette som ein matrise der det
er ein linje for kvart objekt og ein kolonne for kvar eigenskap. Det du får get-process er gjerne enkelt
og du finner det du vil, men vi bruker den som eit eksempel, fordi seinare forspørslar kan være større
og vi må hente ut berre den delen vi trenger, for og hindre at det blir uoversiktlig og at vi får litt meir
informasjon ein det vi var ute etter. Vi skal no sjå på korleis du velje ut både eigenskap(kolonnar) og
objekter(linjer); først ser vi på korleis vi velje blant eigenskapane. Deretter ser vi korleis vi velje ut
enkelte objekter.

Vi begynner med og velje ut eigenskapar, som vi ser på tabellen du får av get-process så
representerer kvar kolonne sine eigenskapar til eit objekt. Ofte ønskjer vi å berre plukke ut ein eller
noken få av disse eigenskapane, og benytte disse vidare.

Bi kan plukke ut kolonnar på fleire måtar. Ofte er det enklast å bruke cmdleten select-object. Da kan
vi plukke ut den eller dei eigenskap(ane) vi ønskjer å sjå på, slik at vi får tilpasset resultatet på
skjermen. Vi kan også legge resultatet inn i ein variabel. Til dømes: vi ønsker å bruke eigenskapen
ProcessName og legge prosessnavnet på alle prosesser inn i variabelen $p, då kan vi bruke følgande
kommando:

$p = get-process | select-object –property ProcessName

Det utvalget av eigenskaper hos kvar prosess som blir presentert på skjermen etter ein get-process er
bare eit utval av den informasjonen som faktisk finnes om kvar prosess, nemlig det utvalget som er
mest relevant i dei fleste tilfeller. For å få ein oversikt av alle metoder og eigenskaper som finnes kan
vi pipe (|) resultate av get-process videre til cmdleten get-member. Dette vil gi deg eit innsynn i kor
mange eigenskaper og metoder det er i disse objektene. Og det er slik for dei fleste objektene.

Ved å bruke select-object kan vi velje blant alle eigenskaper frå get-process, ikkje bare dei som blir
skrevet ut på skjermen.

Å velje ut objekter frå ”tabellen” der linjene representerer kvart sitt objekt man kan velje ut
objekter(linjer) på fleire måter. Ofte kommer man langt med å sortere objektene og deretter velje
noken av dei øverste eller nedreste. Då bruker man sort-object og piper resultatet videre til ein
select-object. Du kan bruke hjelpesystemet til PowerShell for å sjå korleis du sortere på ulike måtar,
og korleis du kan velje blant dei første eller siste linjene, ved bruk av disse to cmdlets. Dette fungerer
imidlertidig bare viss det objektet vi ønskjer å bruke faktisk kan sorterast slik at det hamner øvst eller
nedst ved sortering. I meir generelle tilfeller bruker vi ein annen framgangsmåte; nemlig såkalte
filtere til å plukke ut dei rette linjene. Da er to cmdleter spesielt viktige, nemelige where-object og
foreach-object.

Betingelsar i PowerShell
Vi kan blant anna bruke operatoren –eq for å sjekke likskap, vi brukar det i dømet om Where-object.
Dette er eit døme på sammenligningsoperatore (Comparison Operators på engelsk).

I dei fleste høynivåspråk brukar vi vanlige matematiske symboler i forbindelse med betingelser (i if-
setningar og liknande). Til dømes bruker java to likskapsteikn for å sjekke likskapen (altså strukturen:
if (a == b)). Mange scripts-språk –blant anna PowerShell – gjer det på ein annen måte. Dei brukar
ikkje matematiske teikn i sammenligningsoperatoren. Dei viktigaste sammenligningsoperatorane er:

-eq          Likskapsoperator           Returnerer $true om utrykkene på høgre og venstre side har lik
                                        verdi

-ne          Uliskapsoperator           Sjekker om utrykkene er ulike.
-ge           Større-eller-lik-         Sjekker om venstre utrykk er større eller lik det på høyre side.
              operator

-gt           Større-enn-operator       Sjekker om venstre utrykk er større enn det på høyre side.

-lt           Mindre-enn-operator       Sjekker om venstre utrykk er mindre enn det på høyre side

-le           Mindre-eller-lik-         Sjekker om venstre utrykk er mindre eller lik det på høyre side
              operator

-like         Likskapsoperator for      Brukast ofte på strengar. Sjekker om venstre side faller inn
              mønstre                   under mønsteret på høyre side. På høyre side brukes gjerne
                                        jokertegn.

-nolike       Ulikskapsoperator for     Brukast ofte på strengar. Returnerer $true om venstre side ikkje
              mønstre                   faller inn under mønsteret på høgre side. På høgre side brukast
                                        gjerne jokertegn.

-is                                     Returnere true visst verdien er ein bestemt data type

-isnot                                  Returerer true visst verdien ikkje er ein bestemt data type

-match                                  Ein match som brukar regular expressions

-nomatch                                Ikkje ein match som brukar regular expressions

-contains                               Brukast for og sjå om ein gruppe eller samling av items inneheld
                                        eit bestemt item

-                                       Brukast for å sjå om ein gruppe eller samling av items ikkje
notcontains
                                        inneheld ein bestemt item.



-like og –notlike bruker såkalte jokerteng (wildcard characters på engelsk(blir nevnt meir seinare i
dokumentet)).

Vi må nemne no at det finnes mange fleire sammenligningsoperatorar enn dei som er nevnt over.
Men vi valgte og nemne disse siden dei er vanlige å lette og forstå. På same måte som for
DOS/Windows bryr ikkje powershel seg om at vi brukar store eller små bokstavar. Dette er kan være
uvant for linux brukarar eller for program/verktøy som har sitt utspring i linux-miljøet, der
kommandoar og lignande er case-sensitive. Men visst du vil bruke sammanlikningsoperatorer på
strenger, og vi vil ta omsyn til om det er store og små bokstavar kan vi setje c framfor
sammenlikningsoperatoren, til dømes –ceq, -cne og så vider. (c står då for case-sensitive)

Where-object
Ein svært anvendelig cmdlet i slike tilfeller er where-object. Denne cmdlete brukast litt annerledes
enn dei vi ha tatt for oss tidligare dette er fordi der er eit filter. Eit filter brukast til og velje ut kva
objekt som skal få sleppe vidare i pipen. Så slike cmdlets vil altså granske kvart enkelt objekt(linje) frå
forrige kommando, og sleppe vidare berre dei objekten (linjene) som tilfredstiller
filtreringsbetingelsen. Dette blir nærmast som ein løkke der kvart resultat vurderast, og deretter
forkastast eller sleppast vidare.

Eit døme:

Get-Process | Where-Object {$_.ProcessName –eq ‛Acrobat‛}

Her gir cmdleten get-process resultatet sitt vidare til where-object. For kvar linje vil where-object
utføre det som står i klammeparentesane: den vil sjekke om eigenskapen ProcessName til akkurat
dette objektet (linja) er lik ”Acrobat”. Berre objekter (linjer) som tilfredstiller dette kravet sleppast
vidare i pipen. Her kan du legge merke til bruken av den spesielle variabelen $_

$_ endrast for kvar gjennomgang av løkka, og er ein variabel som inneheld øyeblikksobjektet som
sjekkast. Kommandoen i dømet vil med andre ord, hente ut processen som har processName
Acrobat. Dette kan være nyttig for og sjekke om ein process kjører eller ikkje.

Where-object har to aliaser where og ? . Get-process har aliaset ps. Det vil sei at uttrykker frå dømet
kan skrivast på to måtta til:

ps | where {$_.ProcessName –eq ‛Acrobat‛}

ps | ? {$_.ProcessName –eq ‛Acrobat‛}

Som du ser er det mykje enklare og skrive dei siste eksempla framfor dei første. Aliaser er veldig
nyttige ved bruk av powershell. Vi tar med cmdletene sine fulle namn for at det skal være klart kva
cmdlete vi bruker.

ForEach-Object
ForEach-Object brukast også mykje i forbindelse med filtrering. Det er definert to aliaser for denne
cmdleten , nemlig foreach og %. Som med where-object er det greitt å vitte aliasane til ForEach-
Object. La oss ta eit døme på bruk av foreach:

For alle filer på c:\ vil vi skrive ut filnamnet og lengda på fila oppgitt i MB:

Get-ChildItem | foreach{‛Namn: ‛ + $_.Name + ‛ Størrelse:                            ‛ +
$_.Length/1MB}

Alt som står mellom klammeparentesane utføres for kvar objekt som er pipet frå Get-ChildItem. Det
kan gjerne stå fleire kommandoar, adskilt med semikolon inne i klammeparentesane.

If
If-strukturen er kjent for dei som har jobbet mykje med programmering eller scripting. Vi går raskt
igjennom dei if, med og sjå på ein elseif løkke. Det er og mulig og kun bruke if og else for og få til
same resultatet, men elseif er ansett som ryddigare. Døme 1: er utan elseif og Døme 2 er med. Det er
viktig og forstå at dei er like i kva dei gjer, fordi elseif seter i gang ein ny if seting kunn visst den
forrige returnerte false.

Døme 1

$alder = Read-Host ‛Angi alder‛
If ($alder –lt 13) {

         ‛barn

} else {

         If ($alder –lt 20) {

         ‛Tenåring‛

         } else {

         ‛voksen‛

         }

}

Døme 2

$alder = Read-Host ‛Angi alder‛

If ($alder –lt 13) {

         ‛barn‛

}

Elseif ($adler –lt 20) {

         ‛Tenåring‛

}

Else {

         ‛Voksen‛

}



Switch
Switch-strukturen er ein avansert struktur i PowerShell, og her går vi barre gjennom den enklaste
bruken av den. Vi startar med dømet som vi nettopp brukte men bruker switch i staden. Det er viktig
og ta med at Default verdien er valgfri, men det er den som blir returnert, visst noken av dei tidligare
valga ikkje passa. Vi har med break for og være sikker på at du avsluttar når du finner rett. Men det
er som regel ikkje nødvendig og ha dei med.

$alder = Read-Host ‛Angi alder‛

Switch ($alder)

{
{ $_ -lt 13 } { ‛Barn‛; break }

{ $_ -lt 20 } { ‛Tenåring‛; break }

Default { ‛Voksen‛ }

}



For
For-strukturen ligner på syntaksen i andre script-språk som vi er vandt med. Vi viser til døme under
og går vidare. (dette scripte vill berre skrive ut tallet til tellaren kvar gong det kjøre til det når maksen
og slutte)

For ($teller =         0; $teller –lt 10; $teller++)

{

        $teller

}



Foreach
Generelt ser foreach slik ut.

Foreach (variabel i eit utrykk)

{

        #utfør

}

Men tru vi skal bruke eit litt betre døme ein det.

# Initier variabel

$CPUtid = 0;

# For kvar prosess: finn kor mykje CPU-tid den har brukt, og summer

Foreach ($process in Get-Process)

{

        $CPUtid += $process.CPU

}

# Skriv ut summen
$CPUtid

Vi tar eit døme til, denne gangen skal vi kombinere foreach og filtrering med where-object

$handleSum = 0

Foreach ($process in Get-Process | Where-Object { $_.Handles –gt 500})

{

        $handleSum += $process.Handles

}

$handleSum

Som du ser vil dette scriptet hente ut alle prosess-handlera frå prosessane som kjører som har fleire
enn 500 handlere, og legge det til i handlesum variabelen og skrive ut variabelen heilt i slutten av
programmet.



While og Do..While
Både while og do..while fungerer slik vi forventer etter å ha sett dei i fleire andre språk. Vi har to
dømer:

$kommando = ‛‛;

While ($komando –notlike ‛Avslutt‛)

{

        $kommando = Read-Host ‛Gi kommando‛

}

Her kjører while løkka heilt til betingelsen ikkje lengre er sann. Den sjekker betingelsen i starten av
kvar løkke. Men visst vi ønsker at løkka skal bli gjennomført minst ein gong kan vi bruke do..while i
staden:



Do

{

        $kommando = Read-Host ‛Gi kommando‛

} while ($kommando –notlike ‛Avslutt‛)
Funksjoner
Funksjoner deklareres og er igjen ein gammel kjenning frå andre scripte-språk. Funksjoner kan
skrives direkte inn i PowerShell sitt kommandogrensesnitt, og dei vil då bli husket til vi avsluttar
PowerShell-sesjonen. Alternativt kan vi skrive funksjonane inn i ein tekst-fil med etternavnet .ps1 og
laste inn funksjonen frå fila.

NB: når du skal laste inn funksjonen frå ein fil, so må vi skrive fil-navnet på ein spesiell måte ved
innlasting; vi må bruke ”dotting” eller ”sourcing” (same som var i Linux-verden). For og laste inn
funksjonar frå fila som heite mineFunksjoner.ps1 som ligger på akriv katalog må eg skrive:

PS> . .\mineFunksjoner.ps1

(Legg merke til det første punktum, og at vi har full sti til ps1-fila. PS: det er mellomrom mellom dei
to punkta. Kort sakt det som måtte skrivast var kunn .\mineFunksjoner.ps1)

I sin enklaste form kan vi deklarere ein funksjon slik:

Function seiHallo

{

        ‛Hallo‛

}

Når funksjonen er deklarert, kan vi kjøre den ved å skrive seiHallo i powershell

Denne funksjonen forventar ikkje parametre. I dei fleste tilfeller vil vi nok skrive funksjonar som
brukar parametre. Parametrene som blir overført til ein funksjon finnes i ein spesiell variabel som
heiter $args. Dette er eigentlig eit array der første parameter er $args[0], andre parameter er
$args[1] osv. Dette er grunnen til at vi ikkje er nøydt til å deklarere funksjonar med parametre sjølv
om vi brukar parametre. Følgjande døme funksjon er fullt mulig.

function skrivUtParametre

{

        For ($teller = 0; $teller –le $args.count; $teller ++) {

                 $args [$teller]

        }

}

Eit eksempel på kall av denne funksjonen er:

PS> UtParametre 1 2 ‛Test‛ ‛Hei‛

I dette tilfelle er det fire parametre: to heiltall og to strengar. Legg merke til at når vi kallar
funksjonen så settes parametrene ikkje i parenteser.
Viss funksjonen trenger parametre synest vi at det er god programmeringsskikk å deklarere
parametre med fornuftige namn. Det gjer det mykje lettare å lese scriptet, samt å vedlikehalde det.
Parametrane deklarerast i parentes bak funksjonsnavnet. Til dømes slik:

Function namnOgBy ($namn, $by)

{

          ‛Dette er eit namn $namn‛

          ‛Dette er ein by $by‛

}

Dersom vi ønsker det kan vi initialisere verdiane til parametrane slik at
dei får default-verdiar som brukast om det ikkje angis verdiar ved bruken
av funksjonen. Til dømes slik:

Function namnOgBy ($namn =‛Test‛, $by=‛Trondheim‛)

{

          ‛Dette er eit namn $namn‛

          ‛Dette er ein by $by‛

}



Argumenter til scriptfiler

Tidligare har vi snakket om korleis vi kan samle fleire cmdlets i ein tekstfil med etternamnet .ps1 og
kjøre den. Det er ein script-fil. Ofte ønskjer vi å angi parameter også til slike script-filer. Dette gjerast
nøyaktig slik som til funksjonar som ikkje hadde deklarerte variablar. scriptet vil finne parametrane i
eit array so heiter $args.



Andre Operatorer.
Vi skal bruke litt tid på dei viktigaste operatorene. Det finnast mange fleire enn vi gjennomgår her,
men vi skal sjå litt på dei viktigaste.



Matematiske operatorer
Til dei fire regneartene bruker PowerShell (som stort sett alle andre språk) operatorene:

      teikn       Kva dei betyr

      +           Addisjon
      -           Subtraksjon

      *           Multiplikasjon

      /           Divisjon

      %           Modulo (rest etter
                  heiltallsdivisjon)

      ++          Inkrementering

      --          Dekrementering

Det går og ann og bruke += & -= & *= & /= på same måte som i java, det kan og seiast om
inkrementering og dekrementering. Til dømes:

$a + = 5

Dette vil addere 5 til den eksisterande verdien av variabelen $a



Logiske operatorer
Dei viktigaste logiske operatorene er:

-and, -or, -not samt –xor

Virker slik vi er vant til frå andre språk. La oss sjå på eit døme:

$a = 1

$b = 2

($a –eq 1) –and ($b –eq 2)

($a –eq 1) –and –not ($b –eq 1)

Her vil begge dei to nederste utrykkene returnere true. (Det er viktig og legge merke til at
parentesane ikkje trengst for det første utrykker, mens det trengs for det andre. Men vi synest at det
er viktig og bruke parenteser for og visse tydlig korleis du vil at utrykker skal tolkest. Det blir dermed
lettare for andre og lese, og forstå).

Det er og viktig og nemne at du kan bruke ! i staden for –not. Visst vi gjer det blir siste linje sjåandes
slik ut.

($a –eq 1) –and ! ($b –eq 1)



Binære operatorer
Viss vi vil manipulerer bit-verdier direkte brukar vi:

-band, -bor, -bnot og –bxor.
b står då for binary-and, binary-or osv.



Lesing og skriving på tastatur og skjerm:
For å lese frå tastaturet brukast gjerne cmdleten Read-Host.

Vi kan skrive på skjermen med Write-Host, men så lenge det bare skal skrivast enkle strengar kan vi
også berre skrive selve vraiabelen på ein egen linje i PowerScript slik eksemplet nedenfor viser:

PS> $n = ‛Dette er ein test‛

PS> $n

Dette er ein test

Dersom vi bruker write-host har imidlertidig fleire muligheter, bl. A. kan vi velje farge og liknande. Sjå
hjelpesystmet for disse to cmdletene, visst du har eit ønske om og finne ut meir om farge og slikt.



Kontrollstrukturar
Vi skal sjå på kontrollstrukturane vi brukar når vi lager script-filar. Desse ligner til forveksling på
tilsvarande strukturer i andre språk vi har vært borti.



.Net og PowerShell
Som du kanskje forstår so handlar denne delen om .NET Framework og PowerShell, grunnen er at
.NET Framwork er integret i powershell og det går ann og bruke .NET miljøet for scripting og utvikling
i PowerShellscripts. Vi skal gå innom korleis det går ann og bruke .NET klassebiblioteket i forbinding
med PowerShell og korleis vi brukar cmdlets til å finne objekteigenskapar og vi vil også gå igjennom
”pipelining” som er ein svært viktig funksjon innebygget i PowerShell.

PowerShell kommuniserer med .NET-ressursane ved hjelp av cmdlets (spesialiserte .NET klasser) – på
denne måten slepper brukaren å bry seg med dei komplekse og avanserte funksjonane til .NET, alt
dei trenger å vite er kva cmdlets dei skal bruke til scriptane for å oppnå det dei ønsker.

Her ser du igjen ein forskjell frå PowerShell og tradisjonelle kommandoshell, med at PowerShell er
intelligent nok til å skilje mellom forskjellige typar data. Dette er grunnen til at PowerShell kan bruke
.NET og dei muligskapen som følgjer med det.



Pipelining betegner ein funksjon som er kjent frå Linux og Unix. Det går ut på å sende data gjennom
ein kanal frå eit sted til eit anna. I Powershell blir pipelining brukt til å sende data frå ein cmdlet til
ein anna cmdlet eller til dømes output frå ein cmdlet til ein fil. Vi ser no raskt på korleis det fungerar i
praksis. La oss sei at vi har ein mappe med mange mp3ar i og vi ønsker og sortere dei motsatt vei av
det vanlige. Vi bruker get-childitem mens vi står i den fiktive mappen E:\mp3\

Get-ChildItem | Sort-Object –decending
Denne kommandoen vil då ta alle filene/mappene og sortere dei å til a. Vi skal no gå videre og sjå på
noken meir nyttige eksempel på pipelining.



Pipeline output til fil.
Vi har nå sett på korleis vi kan sende output frå ein cmdlet til ein annen cmdlet. Vi skal no sjå på
korleis vi kan sende output frå ein cmdlet til ein tekstfil. Dette kan være nyttig i mange forskjellige
sammenhenger til dømes om man ønskjer å hente ned logger frå ein server til ein tekstfil eller du
ønskjer å printer ut data for vidare studering. Vi kan ta for oss den tidligare nemnte musikkmappa
som døme. La oss sjå kva vi kan finne som startar på bokstaven S, koden blir då:

Get-ChildItem –filter S* | out-file C:/Powershell/tingpaas.txt

Du har no ei tekst fil med ting som startar på S. Sidan dette var ein musikk katalog du sto i vil det
være ei liste med songar på S.

Som du ser kan pipelining være eit svært effektivt verktøy for databehandling og har mange
bruksområde.

La oss ta nokon meir driftsrelaterte dømer, vi kan begynne med og ta alle processane som kjører på
maskina og legge dei i ein tekstfil ved og bruke pipelining.

Get-Process | out-file [directory/fil.txt]

Ønskjer man til dømes alle prosessane som byrjar på E brukar man kommandoen

Get-Process E* | out-file [directory/fil.txt]

Man trenger ikkje og bruke .txt bak fila, men man må då velje å opne fila i eit passande program i
ettertid. Powershell åpner ikkje filer utan filendinger slik som til dømes bash.

Men det er ein måtte til og lagre på det er ved og bruke >-teiknet. Til dømes slik:

Get-Process E* > Prosesserpaae.txt

Det opprettast då ein tekstfil der du kjører scriptet frå med outputen frå filen. Ønskjer du å skrive til
eit anna område kan du legge til stien til filer ditt slik som i dømet over.

Til slutt skal vi vise korleis man kan bruke pipelining til å skrive manualfiler til tekstdokumenter. Ofte
når man plages med syntaks eller liknande slår man opp på manualsidene til kommandoen ved hjelp
av kommandoen Get-Help eller man har oversikt over dei forskjellige parameteren og syntaksen til
dei forskjellige kommandoane. Det er viktig å beherske å bruke disse for alle som bruker Powershell.

Mange kan synest at det kan være slitsamt å lese disse filane i Powershell-vinduet. Du kan sjølvsagt
då skrive ut aktuelle sider til ein fil som du seinare kan printe ut. Måten man gjør det på er akkurat på
same måte som dømet over. Under er koden for å skrive manualfilen til Sort-Object til ein tekstfil.

Get-Help Sort-Object | out-file [directory/fil.txt]

For å angi sti samtidig på ein ein lokal maskin blir det slik:
Get-Help Sort-Object | out-file E:\Powershell\Manualsider\Sort-Object.txt

På denne måten kan du lett dra opp dei forskjellige manualsidene når du setter deg fast eller har
glømt av syntaksten for ein kommando.




Bruk av Powershell og .NET
Vi har no sett på pipelining er det på tide å sjå litt vidare på .NET og korleis PowerShell bruker .NET
ressursar .NER lagrar mykje informasjon om dei forskjellige filer og objekter som man vanlegvis ikkje
ser, men dataene ligger fortsett der klar til å brukast. Dette er ein stor forskjell frå andre
kommandoshell der slik ”bak-kulissene”. Informasjon ikkje er like lett tilgjengelig. Vi skal no sjå på eit
døme der man kjører ein vanlig kommando som vi skal pipeline til ein cmdlet for å få opp forskjellige
”bak-kulissene” informasjon.

Get-ChildItem Microsoft.PowerShell_profile.ps1 | get-member –membertype
Property

Ved kjøring av kommandoen vil man få alle eigenskapane profil-filen har. Ting vi kan sjå er til dømes
at .NET lagrar informasjon som når filen blei oppretta, sist blei åpnet, når den sist blei skrevet til i
tillegg til lengde, namn og dei andre eigenskapane.

Visst vi vil vise disse eigenskapane kan man kjøre kommandoen

Get-ChildItem Microsoft.PowerShell_profile.ps1 | Select-Object [Namn på
eigenskapen]

Til dømes

Get-ChildItem Microsoft.PowerShell_porfile.ps1 | Select-Object
Creationtime, name, LastWriteTime

Dette kan ha mange nytter blant anna scripts som sjekker logfiler, for og sjå om dei har blitt skrevet
til det siste døgnet. Slike scripts er greie for systemadministrator og kjøre når dei kommer på jobben
om morgene for å sjå om det har skjedd noko over natten.

Vi avsluttar med og lage eit script som startar Internett Explorer og åpner www.hist.no, og eit som
snakkar til brukaren

#Lager ein ny variabel som brukar .NET resursser til å bruke Internet
Explorer

$Hist = new-object comobject InternetExplorer.Application

#Gjer at Internet Explorer er synlig og ikkje kjører i bakgrunnen skjult

$Hist.Visible=$True

#Navigerer til www.hist.no
$Hist.Navigate (www.hist.no)



#kaller eit objekt som heite sapi

$snakk = New-Object –com Sapi.SpVoice

#Får objektet til å snakke, sørg for å ha lyd tilgjengelig viss du skal
teste dette scriptet.

$snakk.speak (‛This is a script talking‛)



Funksjonar i Powershell
Kva er ein funksjon? Ein funksjoner ein er del av ein kode i eit script som blir brukt fleire ganger eller
delar av scriptet som fungerar som ”hjelpar” for resten av scriptet, som har blitt gjort om til ein
funksjon. Funksjoner kan gjere scriptet ditt meir oversiktelig og det kan og gjere det mindre i rein
kode og skrive siden du tar ein del av scriptet som blir gjentat ofte og legger det som ein funksjon.



Powershell analyzer
Vi vil raskt snakke litt om Powershell Analyzer:

”Til nå har vi brukt notepad til både skrive powershellscriptet og presentert scripteksemplene i
kapitlene. Vi vil nå gå over til å bruke Powershell Analyzer, powershell analyzer er eit interaktivit
utviklingmiljø for powershell. Det formaterer koden for deg og autoparser koden du skriver fort feil
mens du skriver den slik at det er enklere for deg og finne feil, i tillegg har du eit vindu som simulerer
koden din slik at du kan teste den mens du skriver den, i tillegg til tab completion av kode og andre
flotte funksjoner hjelper Powershell Analyzer deg med å håndtere objektegenskapene til objektene
du arbeider med (powershell behandler alt som objekter)”4



Funksjonsstruktur
Funskjonar opprettast på følgjande måte

Function funksjon-namn {selve funskjonen}

Ofte ser man funksjoner skrevet på denne måte

Function funksjon-namn {

           Sjølve funksjonen

}

Dette er for og halde det ryddigare og meir oversiktelig. Dette er gjort for at det skal være meir
oversiktelig og lettare og lese for andre, eller deg sjølv visst scriptet blir veldig stort. Det er og viktig
4
    Leksjon 10 Funksjonar i PowerShell (Stein Meisinseth 2 april 2009)(side .2)
og nemne at funksjoner bør leggast tidlig i scriptet sidan powershell leser koden frå starten og
nedover så viss du har funksjoner nedst i scriptet vil ikkje disse være ”initialiserte”. Derfor ser vi på
det som god script skriving og sette funksjonar tidlig i scriptet.



Opprette funksjoner.
Under har vi laget noken enkle funksjoner.



#vise funksjoner

function Funksjon-En {

Write-Host ‛Dette er ein funksjon‛

}

#Adderer to tall

function Legg-Saman {

param ($tall1, $tall2)

$sum = $tall1 + $tall2

Write-Host ‛$tall1 + $tall2 = $sum

}

#Multipliserer to tall

function gange-tall {

param ($tall1, $tall2)

$sum = $tall1 * $tall2

Write-Host ‛$tall1 * $tall2 = $sum

}

#Deler tall

function dele-tall {

param ($tall1, $tall2)

$sum = $tall1 / $tall2

Write-Host ‛$tall1 / $tall2 = $sum

}
#Henter tall frå ar$gs ved hjelp av ein foreachløkke.

#ar$gs er ein miljøvariabel som lagrer det siste

function Mange-tall {

foreach ($i in a$rgs) {

s$um += $i

}

Write Host ‛Tallene du skreiv inn blir sammenlangt $sum‛

}

Function count-args

{

Write-Host ‛args : $args, $($args.count)‛

}



Funksjonene burde være greie nok og forstå, men det som er nytt her er param. Dette er eit
nøkkelord som brukast for å definere dei forskjellige argumenta funksjonen(e) skal bruke. Man burde
også merke seg at i sjølve funksjonane er det brukt variablar for å lagre dei forskjellige argumenta.



Bruke funksjoner
Når du har opprette ein funksjon vil man jo som oftast bruke den til noko fornuftig vi skal sjå på
korleis man kallar på ein funksjon og korleis man bruker den. Vi skal ta utgangspunkt i den første
funksjonen i lista over (adderer to tall).

Visst man har initalisert denne funskjonen i eit script, profil eller lignande kan man kalle på den med
å bruke navnet på funksjonen Legg-Saman. Viss man skriver legg-sammen og to tall i powershell
vinduet eller kaller på funksjonen i eit script vil tallene adderes og legges i s$um variabelen. Scriptet
skriver då summen til skjerm, men kva du bruker $sum til er opp til brukaren.

Vi skal no raskt visse noken døme på bruk av legg-sammen funksjonen.

PS C:\Poweshell> legg-sammen 2 2

2 + 2 = 4

PS C:\Poweshell> legg-sammen 6 6

6 + 6 = 12

PS C:\Poweshell> $tall1 = 672
PS C:\Poweshell> $tall2 = 655

PS C:\Poweshell> legg-sammen $tall1 $tall2

672 + 655 = 1327

Som du ser kan funksjonen bli brukt på to måttar ved og skrive inn verdiane eller ved og bruke
variablar:

funksjon [tall1] [tall2]

funksjon [$variabel1][variabel2]

Grunnen til at dette nevnast er at det er ein enkel måte å forklare kolrleis man bruker ein bariabel i
script på ved at du enten kan definere verdiene i scriptet eller hente inn verdiene frå ein tredjepart.
Når det er sagt skal vi sjå på korleis du kan sette verdier på variabelene rett i funkjsonen.

#Adderer to tall

function Legg-Saman {

param ($tall1 = 66 ,           $tall2 = 33)

$sum = $tall1 + $tall2

Write-Host ‛$tall1 + $tall2 = $sum

}

Du vil nå få 99 visst du kjører funksjonen.




Spesifisere datatyper
Når du scripter har du ofte behov for å sette datatyper, til dømes: Du har ein funksjon som utfører
ein oppgåve og output frå denne funksjonen skal brukast seinare i ein anna funksjon, denne
funksjonen er avhengig av den datatypen som den første funksjonen sender vidare til funksjon 2 er
ein spesiell datatype elles vil ikkje funksjon 2 fungere. Vi må då spesifisere at funskjonane kun godtar
denne datatypen. Vi gjer det på denne måten.

#adderer to tall

Function Legg-Saman {

Param ([int]$tall = 66 , [int]$tall2 = 33)

$sum = $tall1 + $tall2

Write-Host ‛$sum‛

}
Vi legger til datatypen foran variablene. På denne måten forsikrer vi oss om at datatypane som
kommer ut av funksjonen er av integertyen. Om man nå prøver å fylle ein av variablene i funksjonen
med ein annen type enn integer vil man få ein feilmedling som typisk ser slik:

Legg-Sammen: Cannot convert value ”Dette er ein string” to type ”System.Int32”. Error: ”Input string
was not in a correct format.”



Datatyper brukt i powershell

[int]            32-bit signed integer

[long]           64-bit signed integer

[string]         Fixed-length string of Unicode characters

[char]           A Unicode 16-bit character

[byte]           An 8-bit unsigned character

[bool]           Boolean True/False value

[decimal]        An 128-bit decimal value

[single]         Single-precision 32-bit floating point number

[double]         Double-precision 64-bit floating point number

[xml]            Xml object

[array]          An array of values

[hashtable]      Hashtable object (Assoociative tabeller)




Bruk ein funksjon til å gi ein variabel ein verdi
Ofte vil man bruke output frå ein funksjon vidare i scriptet eller andre steder og det man må gjere då
er å lagre output frå ein funkjon i ein variabel



#Adderer to tall

function Legg-Sammen {

param ([int]$tall1 = 0 , [int]$tall2 = 0)

$sum = $tall1 + $tall2
$sum

}

$ny = legg-sammen 35 70

write-Host "Du har nå en ny variabel som heter ny har verdien : $ny‛

Man ser her at man bruker funksjonane legg-saman og to verdiar til å lage ein ny variabel som heite
ny som man kan bruke vidare

Om brukaren ønsker det kan det settast ein fast verdi og bruke denne mot ein annen verdi. Har du
ein verdi ferdigdefinert kan du til dømes hente ein anna verdi frå skjermen som du kan bruke mot
den fasteverdien. Gode døme kan være valuta kalkulatorar som dømet under der vi reknar norske
kroner til dollar

#Regner norske kroner til dollar

function usd-nok {

param ([decimal]$kr = 0 , [decimal]$usd = 5.2 ) #Setter dollarkursen

$kr = Read-Host "Tast inn kroner: " #henter kr fra skjerm

$sum = $kr / $usd

#Skriv output til skjerm

Write-Host "Dollarkursen er nå: $usd"

Write-Host "Dette betyr at $kr NOK er $sum Amerikanske Dollar"

}

Som du ser fikk vi eit greitt script, du kan ogso bytte ut amerikanske dollar med euro eller pund visst
du ønsker det, so lenge du huskar og korrrigere for valuta endringane. Du kan og sette ein fast sum,
det vil sei at du ikkje spør brukaren om eit beløp men hardkoda det inn i scriptet.



Filter vs funksjon
Eit filter er svært likt ein funksjon. Forskjellen ligger i at eit filter har muligheiten til å handtere
pipelinedata direkte mens funksjoner må vente på at all dataene kommer fram til $input variabelen
før dei kan starte å behandle data. Filtre brukast i hovudsak til å behandle filer med mykje data.
Under er eit døme på eit filter som sjekker om eit tall er innenfor ein range eller ikkje.

#Filter    som sjekker om et tall er større enn 10

filter global:sjekk-tall {

#Leser pipeline input

$x = $_
#Hvis tallet er større enn 10 skriv gjør dette

if ($x -gt 10) {

$result = "$x er større enn 10"}

#Hvis ikke tallet er større enn 10 gjør dette.

Else {

$result = "$x er mindre enn 10"

}

$result

}

Eit døme til input til filteret kan være

@(1337, 8250, 12, 6, 4, 1000) | sjekk-tall

Vi vil då få vitte kva tall som er større ein 10 og kva tall som er mindre ein 10



Vi skal no sjå på ein funksjon som kan være nyttig for systemadmin. Dette er ein enkel funksjon som
bruker Get-ChildItem og Measure-Object cmdletene for å finne størrelsen på ein folder og reknar ut
kor mykje diskplass som er brukt i kilobyte, megabyte og gigabyte.

function global:dirsize

{

#Lister alle filer og foldere -recurse sørger for at alle underkataloger

#også blir tatt med.

$size = (Get-ChildItem -recurse | Measure-Object -Sum Length).Sum

#Brukes til å lage en oversiktlig output

$t0 = "=" * 50

#Viser hvor du kjører kommandoen fra

$loc = Get-Location

#Sørger for at de forskjellige verdiene kommer i rett format.

$kb = $size / 1024

$mb = $kb / 1024

$gb = $mb / 1024
#Skriver output

Write-Host ""

Write-Host $t0

Write-Host "Location:" $loc

Write-Host $t0

Write-Host "Kilobytes : $kb"

Write-Host "Megabytes : $mb"

Write-Host "Gigabyte : $gb"

Write-Host $t0

}



String formatering
Om du ser på scriptet som vi nettopp laget ser man at tallene man får ut frå variabelen funksjonen
lager har mange desimaler og ofte trenger man ikkje å vise alle disse desimalene. Man kan ogso
ønske å formatere til prosent og lignande. Vi skal sjå dei vanligaste typane og korleis vi kan bruke
.NET string formatering for å få det til.

Vi har gjort noken om skrivingar til scriptet slik at det er utan desimaler

function global:dirsize

{

#Lister alle filer og foldere -recurse sørger for at alle underkataloger

#også blir tatt med.

$size = (Get-ChildItem -recurse | Measure-Object -Sum Length).Sum

#Brukes til å lage en oversiktlig output

$t0 = "=" * 50

#Viser hvor du kjører kommandoen fra

$loc = Get-Location

#Sørger for at de forskjellige verdiene kommer i rett format.

$kb = $size / 1024

$mb = $kb / 1024

$gb = $mb / 1024
#Skriver output

Write-Host ""

Write-Host $t0

Write-Host "Location:" $loc

Write-Host $t0

"Kilobyte: {0:#.#}" -f $kb

"Megabyte: {0:#.#}" -f $mb

"Gigabyte: {0:#.#}" -f $gb

Write-Host $t0

}

Vi valgte og utheve endringa, som du ser var det ikkje store endringa som var nødvendig.

Når man skriver output kan man sjølv velje korleis dataen skal sjå ut. Ved å legge til inoformasjon om
korleis du ønsker å skrive ut dataene i eksemplet over er det brukt # for å vise korleis mange
desimaler man ønsker å skrive ut, i dette tilffelet 1.

{0:#.#}

Klammen representerer innhaldet i variabelen og det som står inne i klammen representerer måten
vi ønsker å vise informasjon på. Den første nullen representerer indeksnummeret vi ønsker å starte
på #.# representer korleis man ønsker å vise tallet. Her ønsker vi å vise tallet + ein desimal. Vi hadde
lagt på 2 # til i slutten visst vi ønsket tre desimaler slik at koden hadde blitt {0:#.###}.-f representerer
format som forteller at vi skal formatere innhalder og $kb forteller kva verdi vi ønsker å formatere
med dei reglane vi har oppgitt. Man kan formatere på mange forskjellige måter til dømes sette kor
man ønsker å ha parentesen, til prosent, hexadesimat og meir.




Powershell in Active Directory
Vi begynder ganske enkelt ved og ta for oss korleis du oppretter ein ny organisasjons einheit (OU)

Vi starter med eit enkelt litte script:

#PSscript som lager ein ny OU i AD

#Kobler til domenet

#Her skriver du inn ditt domene i dc=, i staden for punktum blir det brukt
ein ny ,dc=

#so domenet 14e-dc.local blir då dc=14e-ad,dc=local
$domain = [adsi] ‛LDAP://loacalhost:389/dc=14e-ad,dc=local

#Oppretter ein ny OU som ehiter PowershellTest

$test = d$omain.Create (‛OrganizationalUnit‛, ‛OU=Powershelltest‛)

#Litt info om OUen

$test.Put(‛Desciption‛, ‛Dette er ein test av AD med Powershell‛)

#Oppretter OU med info

$Test.SetInfo



Du vil nå ha opprettet ein ny OU, med namnet Powershelltest, visst du lurer på om den blei opprettet
kan du skrive inn desse kommandoane.

PS>$OU = [adsi] ‛LDAP://localhost:389/ou=Powershelltest,dc=14e-ad,dc=local‛

PS>$OU | select-object name,distinguishedName,Description | format-list



Du får nå ein fin utskrift med der OUen blir lista ut med namn og alt.

Vi har lagt u script som kan opprette fleire OUar på ein gong men dei kan du sjå på under script delen
av oppgåva.

Vi tenkte det kunne være nyttig og legge ut ein mal for korleis du kan scripte korleis du hentar ut
informasjon frå AD, her om ouar

#Kobler opp mot AD og legger objektet vi ønsker å bruke i en variabel
$OU = [adsi] "[Path]ou=Navn,dc=Navn,dc=Navn"
#Henter ut informasjon.
$OU | select-object | format-list



Forandre på data i eit Objekt


Når man skal forandre/modifisere på data/inoformasjon i add må man på same måte som i dei andre
eksemplane legge objektet i ein variabel fær man får gjort so veldig mykje. Når det er gjort bruker
man denne variabelen og .Put() for å forandre på innhaldet. Før man til slutt bruker .SetInfo() for å
oppdatere innahldet (eller legge til nytt). Vi har laget eit script som forandrer på data i eit objekt og
kjører litt kode for og sjekke om det har blitt gjort. Ein viktig ting til systemadministrator kan ta med
seg frå dette er kommadonen select-object whenchanged, ditte ka være nyttig for og sjekke om det
har blitt gjort endringar sidan på systemkritiste filer, eller andre filer som kan være komprimert, som
lista med brukar namn, og lignande.

#Forandre på data i et object.
$OU1 = [adsi] "LDAP://localhost:389/ou=Powershelltest,dc=14e-ad,dc=local"
$OU1.Put("Description","Denne teksten ble nettopp forandret..")
$OU1.Setinfo()
#Sjekke om teksten ble forandret.
$Sjekk = [adsi] "LDAP://localhost:389/ou=Powershelltest,dc=14e-ad,dc=local"
$Sjekk | select-object ou,whenchanged,description | format-list

Dette scriptet endre beskrivelsen til objektet Powershelltest



Henter ut informasjon
Om man ønsker å hente ut informasjon, i dette tilfellet ”barna” til eit objekt kan man bruke .PsBase
og om man skal ha ut informasjon om ”barna” .Children resultatet er at dette vil være på samme
måtte som i dei andre døma der vi binder objektet til ein variabel og brukar den vidare.

#Hente ut alle "barna" fra en OU
$OU1 = [adsi] "LDAP://localhost:389/ou=Powershelltest,dc=14e-ad,dc=local"
$OU1.PsBase.Children

Outputen frå cmdletsa eller scriptet vil gi deg ein liste med namn, og path til dei forskjellige ”barna”
som ligger under Powershelltest.



Vi har mange script som er nyttige i ein drifts situasjon med powershell dei ligger i scripts seksjonen
av oppgåva.



Søke etter brukere
Om man ønsker å søke etter ein bruker i ein AD kan man gjere det med lit gjelp frå .NET Framwork.
Ein klasse som heiter System.DirectoryServices.DirectorySearcher hjelper til og få jobben gjort. Vi
kommer nå med eit døme:

# Script som søker etter brukeren som har test Leif som DisplayName.
$domene = [adsi] "LDAP://localhost:389/Ou=Powershelltest,dc=14e-
ad,dc=local"
$soker = new-object System.DirectoryServices.DirectorySearcher $domain
$soker.Filter = '(&(ObjectClass=User)(displayName=test leif))'
$brukeResultat = $soker.FindOne()
$Bruker = $brukerResult.GetDirectoryEntry()
$bruker | format-list *

Det er mulig å legge til noken variablar som henter nformasjon frå read-host etc. slik at man får eit
script so man kan bruke til å søke etter brukere utan å måtte hardode kvar og kva man skal søke kvar
gang.

Nyttige kommandoer i Exchange 2007
Vi tar no og slenger på noken nyttige kommandoer som kan brukast i Exchange 2007

Gi full tilgang TIL ALLE mailboksar for ein bestemt brukar eller gruppe:
Get-Mailbox | Add-MailboxPermission –User ‛USERORGROUPNAME‛ –AccessRights
FullACcess –InheritanceType all



Fjerner Full Mailbox-tilgang FRÅ ALLE mailbokse for ein bestemt brukar eller gruppe:

Get-Mailbox | Remove-MailboxPermission –User ‛USERORGROUPNAME‛ –
AccessRights FullAccess –InheritanceType all



Sette Managed Folder Policy for ALLE mailboxer:

Get-Mailbox | Set-Mailbox –ManagedFOlderMailboxPolicy
‛MANAGEDFOLDERPOLICYNAM‛



Sette ActiveSync Polivy for ALLE mailboxer:

Get-Mailbox | Set-CASMailbox –ActiveSyncMailboxPolicy (Get-
ActiveSyncMailboxPolicy ‛ACTIVESYNCPOLICYNAME‛) Identity



Kjører Managed folder cleanup for alle mailbokser

-For ein bestemt server:

Start-ManagedFolderAssistant –Server SERVERNAME

-For ein bestemt database:

Start-ManagedFolderAssistant –Database DBNAME



Eksporter statistikk om mailbokser til ein komaseparert csv-fil, sortert etter størrelsen på
mailboksene (synkende frå størst til minst) [dette skriptet vil liste ut fult namn, GUID, antall i
mailboksene, størrelsen på mailbosenen i MB og databasenavnet]:



Get-MailboxStatistics –Server SERVERNAME | Sort-Object TotalItemSize –
Descending | Select DisplayName, MailboxGUID, ItemCount, @
{expression={$_.totalitemsize.value.ToMB()}}, DatabaseName |Export-CSV
FILENAME.csv
Sette tilbake OWA til standard-val: (Kan ogso brukast for å gjennomrette slettede OWA-mapper)[NB:
Om du har endra det beskirvande namnet på din IIS site, må du erstatte ”Default Web Site” med det
nye namnet]:

Remove-OwaVirtualDirectory ‛exchange (Default Web Site)‛

Remove-OwaVirtualDirectory ‛public (Default Web Site)‛

Remove-OwaVirtualDirectory ‛exchweb (Default Web Site)‛

Remove-OwaVirtualDirectory ‛owa (Default Web Site)‛

New-OwaVirtualDirecory ‛exchange‛ –OwaVersion Exchange2003or2000 –
VirtualDirectoryType Mailboxes –WebSiteName ‛Default Web Site‛

New-OwaVirtualDirecory ‛public‛ –OwaVersion Exchange2003or2000 –
VirtualDirectoryType PublicFolder –WebSiteName ‛Default Web Site‛

New-OwaVirtualDirecory ‛exchweb‛ –OwaVersion Exchange2003or2000 –
VirtualDirectoryType Exchweb –WebSiteName ‛Default Web Site‛

New-OwaVirtualDirecory ‛owa‛ –OwaVersion Exchange2007 –WebSiteName ‛Default
Web Site‛



Lage ein forespørsel om Cerificate Request for 3.-parts sertifikat (such as those from GoDaddy)
[NOTE: this command, as provided, will allow a single server to perform ALL Exchange 2007
functions, including OWA, Autodiscover, and local intranet atuhentication, be very cautious about
changing the parameters. If you use muliple servers, you will need to do this for each server. With
GoDaddys Standard Multi Domain UCC Certificates, this will register mail.domain.com,
autodiscover.domain.com, www.domain.com, domain, com, localserver.internaldomain, localserver,
so the server can be fully used internally and externally, perfect uf you only have one server for your
organization but just as usefull for mulitple servers.]:



New-ExchangeCertifcate –subjectName ‛C=COUNTRYHANEHERE, ST= STATENAMEHERE,
L=CITYNAMEHERE, O=COMPANYNAMEHEREBUTNOTOPUNCTUATION,
OU=COMPANYDEPARTMENTNAME, CN=mail.FULLDOMAINNAME.EXTENSION‛ –FriendlyName
‛COMAPNYNAMEHERECANUSEPUNCTUATION‛ –DomainName
‛autodiscover.FULLDOMAINNAME.EXTENSION,www.FULLDOMAINNAME.EXTENSION,
FULLDOMAINNAME.EXTENSION, INTERNALSERVERNAME.INTERNALDOMAINNAME,
INTERNALSERVERNAME‛ –generateRequest $true –PrivateKeyExportable $true –
Keysize 4096 –path C:\CERT.txt
Cmdlets for WS 2008 R2
Til slutt tar vi med litt for Windows Server 2008 R2

Active Directory module cmdlets

Du kan bruke AD module cmdlets for å utføre forskjllige oppgåver som administrasjon, konfigurasjon
og diagnose av forskjellige oppgåver i AD ogDC. Dette gjelder administrasjon av:

AD og computer-kontoer, grupper, OU’er, domener, skoger, domenekontroller, passord-policier og
fleire som kan lages av deg eller andre.

Vi kommer nå med ein tabell der du finner alle cmdlets som er tilgjengelig i Active Directory module i
Windows Server 2008 R2, den er kopiert frå: (dato 15.03.2010)

http://technet.microsoft.com/en-us/library/ee617195.aspx




                           Cmdlet                                           Description

                                                Adds one or more service accounts to
Add-ADComputerServiceAccount
                                                an Active Directory computer.
                                                Adds users, computers, and groups to
                                                the Allowed List or the Denied List
Add-ADDomainControllerPasswordReplicationPolicy of the read-only domain controller
                                                (RODC) Password Replication
                                                Policy (PRP).
                                                Applies a fine-grained password
Add-ADFineGrainedPasswordPolicySubject
                                                policy to one more users and groups.
                                                Adds one or more members to an
Add-ADGroupMember
                                                Active Directory group.
                                                Adds a member to one or more
Add-ADPrincipalGroupMembership
                                                Active Directory groups.
                                                Clears the expiration date for an
Clear-ADAccountExpiration
                                                Active Directory account.
                                                Disables an Active Directory
Disable-ADAccount
                                                account.
                                                Disables an Active Directory optional
Disable-ADOptionalFeature
                                                feature.
Enable-ADAccount                                Enables an Active Directory account.
                                                Enables an Active Directory optional
Enable-ADOptionalFeature
                                                feature.
                                                Gets the Active Directory security
Get-ADAccountAuthorizationGroup
                                                groups that contain an account.
                                                Gets the resultant password
Get-ADAccountResultantPasswordReplicationPolicy replication policy for an
                                                Active Directory account.
                                                 Gets one or more Active Directory
Get-ADComputer
                                                 computers.
                                                 Gets the service accounts that are
Get-ADComputerServiceAccount                     hosted by an Active Directory
                                                 computer.
                                                 Gets the default password policy for
Get-ADDefaultDomainPasswordPolicy
                                                 an Active Directory domain.
Get-ADDomain                                     Gets an Active Directory domain.
                                                 Gets one or more Active Directory
                                                 domain controllers, based on
                                                 discoverable services criteria, search
Get-ADDomainController
                                                 parameters, or by providing a domain
                                                 controller identifier, such as the
                                                 NetBIOS name.
                                                 Gets the members of the Allowed
Get-ADDomainControllerPasswordReplicationPolicy List or the Denied List of the RODC
                                                 PRP.
                                                 Gets the resultant password policy of
Get-
                                                 the specified ADAccount on the
ADDomainControllerPasswordReplicationPolicyUsage
                                                 specified RODC.
                                                 Gets one or more Active Directory
Get-ADFineGrainedPasswordPolicy
                                                 fine-grained password policies.
                                                 Gets the users and groups to which a
Get-ADFineGrainedPasswordPolicySubject           fine-grained password policy is
                                                 applied.
Get-ADForest                                     Gets an Active Directory forest.
                                                 Gets one or more Active Directory
Get-ADGroup
                                                 groups.
                                                 Gets the members of an
Get-ADGroupMember
                                                 Active Directory group.
                                                 Gets one or more Active Directory
Get-ADObject
                                                 objects.
                                                 Gets one or more Active Directory
Get-ADOptionalFeature
                                                 optional features.
                                                 Gets one or more Active Directory
Get-ADOrganizationalUnit
                                                 OUs.
                                                 Gets the Active Directory groups that
Get-ADPrincipalGroupMembership                   have a specified user, computer, or
                                                 group.
                                                 Gets the root of a domain controller
Get-ADRootDSE
                                                 information tree.
                                                 Gets one or more Active Directory
Get-ADServiceAccount
                                                 service accounts.
                                                 Gets one or more Active Directory
Get-ADUser
                                                 users.
                                                 Gets the resultant password policy
Get-ADUserResultantPasswordPolicy
                                                 for a user.
                                              Installs an Active Directory service
Install-ADServiceAccount
                                              account on a computer.
                                              Moves a domain controller in AD DS
Move-ADDirectoryServer
                                              to a new site.
                                              Moves operation master (also known
                                              as flexible single master operations
Move-ADDirectoryServerOperationMasterRole
                                              or FSMO) roles to an
                                              Active Directory domain controller.
                                              Moves an Active Directory object or
Move-ADObject                                 a container of objects to a different
                                              container or domain.
                                              Creates a new Active Directory
New-ADComputer
                                              computer.
                                              Creates a new Active Directory fine-
New-ADFineGrainedPasswordPolicy
                                              grained password policy.
New-ADGroup                                   Creates an Active Directory group.
New-ADObject                                  Creates an Active Directory object.
New-ADOrganizationalUnit                      Creates a new Active Directory OU.
                                              Creates a new Active Directory
New-ADServiceAccount
                                              service account.
New-ADUser                                    Creates a new Active Directory user.
                                              Removes an Active Directory
Remove-ADComputer
                                              computer.
                                              Removes one or more service
Remove-ADComputerServiceAccount
                                              accounts from a computer.
                                              Removes users, computers, and
Remove-
                                              groups from the Allowed List or the
ADDomainControllerPasswordReplicationPolicy
                                              Denied List of the RODC PRP.
                                              Removes an Active Directory fine-
Remove-ADFineGrainedPasswordPolicy
                                              grained password policy.
                                              Removes one or more users from a
Remove-ADFineGrainedPasswordPolicySubject
                                              fine-grained password policy.
Remove-ADGroup                                Removes an Active Directory group.
                                              Removes one or more members from
Remove-ADGroupMember
                                              an Active Directory group.
Remove-ADObject                               Removes an Active Directory object.
Remove-ADOrganizationalUnit                   Removes an Active Directory OU.
                                              Removes a member from one or
Remove-ADPrincipalGroupMembership
                                              more Active Directory groups.
                                              Removes an Active Directory service
Remove-ADServiceAccount
                                              account.
Remove-ADUser                                 Removes an Active Directory user.
                                              Changes the name of an
Rename-ADObject
                                              Active Directory object.
                                              Resets the service account password
Reset-ADServiceAccountPassword
                                              for a computer.
Restore-ADObject                    Restores an Active Directory object.
                                    Gets Active Directory user,
Search-ADAccount
                                    computer, and service accounts.
                                    Modifies user account control (UAC)
Set-ADAccountControl                values for an Active Directory
                                    account.
                                    Sets the expiration date for an
Set-ADAccountExpiration
                                    Active Directory account.
                                    Modifies the password of an
Set-ADAccountPassword
                                    Active Directory account.
                                    Modifies an Active Directory
Set-ADComputer
                                    computer.
                                    Modifies the default password policy
Set-ADDefaultDomainPasswordPolicy
                                    for an Active Directory domain.
                                    Modifies an Active Directory
Set-ADDomain
                                    domain.
                                    Sets the domain functional level for
Set-ADDomainMode
                                    an Active Directory domain.
                                    Modifies an Active Directory fine-
Set-ADFineGrainedPasswordPolicy
                                    grained password policy.
Set-ADForest                        Modifies an Active Directory forest.
                                    Sets the forest mode for an
Set-ADForestMode
                                    Active Directory forest.
Set-ADGroup                         Modifies an Active Directory group.
Set-ADObject                        Modifies an Active Directory object.
Set-ADOrganizationalUnit            Modifies an Active Directory OU.
                                    Modifies an Active Directory service
Set-ADServiceAccount
                                    account.
Set-ADUser                          Modifies an Active Directory user.
                                    Uninstalls an Active Directory
Uninstall-ADServiceAccount
                                    service account from a computer.
Unlock-ADAccount                    Unlocks an Active Directory account.
WMI i powershell

WMI står for Windows Management Instrumentation, det har gjort drifting av datasystem ein god
del enklare for driftarar sidan det gir eit standardisert brukargrensesnitt for og samhandle med
windows-baserte system uansett kva underliggande maskinvare produsentar og spesifikke Windows
versjonar. Før WMI kom ut kunne forskjellige maskinvare produsentar kan ha gitt forskjellige
application programming Interfaces (APIs) som du kunne brukt til og skrive litt kode og henta
informasjonen du trengte sjølv. Men visst du hadde maskinvare frå forskjellige produsentar var du
tvungen til og lære deg forskjellige APIs. Dette førte til at det var veldig vanskelig visst ikkje umulig og
skaffe seg den informasjonen du trengte raskt.

Dette har no endret seg etter at DMTF(Distributed Management Task Force) lagde og oppretthelde
eit sett eit set med standard teknologia som dei kalte WBEM (web-Based Enterprise Management)
for windows. DMTF er ein industri organisasjon som samarbeider med tusen av teknologi firma over
heile verden for og utvikle managements standardar og intrigere teknologi for enterprise og internet
miljø. DMTF har ogso ein CIM (Common Information Model) som spesifisera ein standar definisjon av
managment information som har med system og services. WMI er fullt kompatibelt med CIM og
WBEM og fortsatte å oppretthalde kompatibleten etter som standaren utviklar seg.

WMI er ikkje so komplisert, men det har noken få bevegelige delar. På bunnen av WMI arkitekturen
are the managed objects. Dei tinga du vanligvis jobbar med, som fysiske delara i systemet ditt
(hovedkortert, minne, dvd-rom drive), windows registry og alt anna som du kan få takk i ved og bruke
Windows API. Opp på managed objects laget er det ein mengde med WMI providers. Du kan tenke
på WMI providers som mellom mannen når du skal komunisere med operasjons systemet gjennom
WMI.

Å jobbe med WMI når du brukar Windows PowerShell er veldig enkelt siden du trenger kunn ein
cmdlet, og den er Get-WMIObject. Du trenger berre og gi Get-WMIObject navnet til klassen og den
skriver ut om alle instances for den klassen ilag med alle properties den har. For og finne ut
informasjon om BIOS, kan du kjøre følgande linje:
Get-WMIObject WIN32_BIOS
La oss sei at vi vil vite litt generell informasjon om maskina du sitter på som namn, produsent og
modell kan vi kjøre følgande kommando
Get-WMIObject WIN32_ComputerSystem

Dette vil be maskina om og returnere den informasjon du ville ha. WMI gjer det mulig for deg å
tileigne seg informasjon om ander maskiner via nettverket. Du kan spør etter den same BIOS
informasjonen av ei maskin som heiter TESTER ved og bruke følgande kommandoe der
maskinnamnet er tester og ønska cmdlet er Win32_BIOS:
Get-WMIObject Win32_BIOS –comuptername TESTER
Ein enkel måtte og sjå alle tilgjengelige klasser som er tilgjengelig til din bruk er ved og bruke
Get_WMIObject for liste dei ut, ved og bruke den enkle kommandoen som følger:
Get-WMIObject –list

Meste parten av tid, vil du jobbe med hovud WMI klassene som direkte samhandlar med dei
forskjellige windows eller system delane. Navnet til alle disse WMI klassene starter med Win32_, so
ved og ta fordel av pipeling, kan du bruke den følgande sekvense av kommandoa for og filtrere ut
berre dei WMI klassene:
Get-WMIObject –list | where {$_.name.startswith(”Win32_”)}
Du vil nå oppdage eit relatitvt stor liste over klasser, siden du kan bruke WMi klasser til og samhandle
med nesten hvilken som helst del av windows. Men du vil normal berre jobbe med ein litten del av
desse klassene. Under følger ei liste med dei vanligaste brukte WMI klassene.
Klasse                       Kva den representerer
Win32_BIOS                   Forskjellige eigenskapar som er relatert til system BIOS
Win32_Computersystem Forskjellige eigenskapar som er relatert til ei maskin som kjører Windows
Win32_Directory              Ein plass/mappe i Windows
Win32_Environment            System miljø variabler
Win32_LogicalDisk            Lagrings innretning på eit system
Win32_NetworkAdapter Ein nettverk adapter på eit system
Win32_NetworkadapterC Konfigurering av ein nettverk adapter på eit system
onfiguration
Win32_NTLogEvent             Ein hendelse logg
Win32_OperationSystem OSet inkludere ting som build nummer og service pack level
Win32_Printer                Ein printer som er instalert på systemet
Win32_PrinterJob             Ein printer jobb som kjører på systemet
Win32_Process                Ein prosess som kjører på systemet
Win32_Processor              Ein CPU på systemet
Win32_QuickFixEngineeri Små patchar til OSet
ng
Win32_Registry               Windows registeret
Win32_ScheduledJob           Ein planlagt oppgåve på systemet
Win32_Service                Ein service installert på systemet
Win32_Share                  Ein delt ressurs på systemet
Win32_TimeZone               Tidssona på systemet

Du kan finne ut meir om dei spesifikke WMI klassane som kva den representera og kva eigenskaper
som er tilgjengelige til deg ved og slå dei opp op Microsoft Developer Network(MSDN). Du finner ein
liste av alle WMI klassane på http://msdn2.microsoft.com/en-us/library/aa394084(VS.85).aspx.
Standard namespacet til windows er root\CIMV2. Du vil ikkje endre på dette untatt visst du har ein
veldig spesifikk grunn fordi alle WIN32_ klassen går under dette namespacet. Get-WMIObject
kommandoan vi såg på tidligar fungera fordi dei WMI klassane vi spurte tilhører alle root\CIMV2.
Visst du ønsker og spør ein klasse utanfor ditte namespacet, vil du trenge og definere det ved og
bruke –namespace parameter. Under følger eit eksempel der vi spør IISWebService klassa til
root\MiscrosoftIISV2 visst du har IIS instalert.
Get-WMIObject IISWebService –namespace ”root\MiscrosoftIISV2”
Ved å bestemet spesifisere –namespace parameteret, får vi sjå alle eigenskapane som er
tilgjengelige, og ikkje berre dei som blir returnert som standar. Det betyr at visst du vil finne ut alle
eigenskapane i Win32_ComputerSystem klassa kan du kjøre følgande kommando:
Get-WMIObject Win32_ComputerSystem –namespace ”root\CIMV2”

Du kan kanskje begynde og lure på korfor dette er nyttig for ein drifter og kunne. Men det er viktig og
forstå at praktisk sett er alt i Windows representert av ein WMI klasse. Dette gjer at du kan
automatisere nesten kva som helst i Windows. No når vi har sett på korleis du kan spøre WMI i
windows powershell, vi ser på eit fiktive scenario (dette scenarioet er henta frå: ”Windows
Powershell 2 for Dummies” (av Steve Seguls) scenarioet begynner på side: 108)

I dette scenarioet, får du ein telefon frå ein brukar som seier at eine applikasjonen ho bruker ikkje
fungerer. Du begynner å mota fleire telefonar om same applikasjon, so du begynne og tru at dette
må være eit server-sida problem sidan dei andre netverks baserte applikasjonane fortsetter å virke
heilt fint. Du er normalt ikkje administrator for denne applikasjonen, men du trenger å få fiksa
problemet raskt. Korleis kan Windows PowerShell og WMI hjelpe deg?
Vi ser no på 2 av alternativa du har i ein slik situasjo:
    1. Sjekk om nokon av tjenestane som er setje til automatisk startup men kjører ikkje no – dette
         kan visse til at tjenesten denne applikasjonen er avhengig av har kræsja.
    2. Sjekk om applikasjons hendelse logen for nokon feilbeskjedar(errors).
Vi skal no forklare korleis du gjer dei to tinga i dei følgande avsnittet.

1. Spør etter teneste status
For og finne ut kva for ein teneste som er setje til automatisk startup og ikkje kjører kan du bruke
følgande kommando pipeline:
Get-WmiObject Win32_Service | Where-Object {($_.StartMode –eq ”Auto”) –and
($_.State –ne ”Running”)} | Select-Object DisplayName,Name,State
Denne kommandoen spør Win32_Service WMI klassa for alle teneste på systemet og filtrer det ved
og bruke ein Where-Object Cmdlet for tenesta som har StartMode eigenskapen lik Auto og State
eigenskapen ikkje lik Running. Fordi du er berre interessert i berre i navnet til tenesta, display
namnet, og statusen til tenesta, brukar du etter på ein Select-Object for og velje akkurat dei
eigenskapane. Av og til holder dette for og fikse problemet. Visst det er ein web-basert applikasjon
og du ser at World Wide Web Publishing service har stoppet, so er det mest sannsynlig at du trenger
berre og starte det opp igjen for at ting skal fungere igjen. Du kan starte tenesten med og bruke
Start-Service Cmdlet. Grunnen til at vi la til namn eigenskapen i tillegg til DisplayName eigenskapen
når vi spurte etter stoppa tenesta er fordi du trenger og spesifisere namn eigenskapen til tenesten
som startar opp . So visst du skal starte opp World Wide Web Publishing Service (W3SVC), må du
kjøre følgande linje:
Start-Service W3SVC


2. Sjå etter hendelse log input
Det andre valget du kan ta er og leite gjennom hendelse loga for noken mulig feilbeskjedar(errors).
Win32_NTLogEvent WMI klassa gir deg tilgang til alle Windows hendelse log innlegg(Windows event
log entries), so det er ein god plass å starte. Vi kan bruke følgande kommando pipeline til å spørje
applikasjon log for alle error hendingar:

Get-WmiObject Win32_NTLogEvent | Where-Object {($_.LogFile –eq
”Application”) –and ($_.Type –eq ”Error”)} | Select-Object
Category,ComputerName,EventCode,Description,Message,TimeWritten | Sort-
Object TimeWritten

Du kan bruke Get-WmiObject for og spørje alle gjenstandar i Win32_NTLogEvent og pipe det til
Where-Object Cmdlet for og filtrere innlegga der og logfila er lik til applikasjon og Type er lik Error.
Du passera desse resultata til Select-Object for og spesifiser felta du er interessert i og sortera
resultatet etter TimeWritten feltet. I realiteten, kan det være raskare eller til og med enklare å berre
bruke Event Viewer for og få denne informasjonen heller ein og skrive inn longe kommando sekvensa
for og få same informasjon. I røynda ville du mest sannsynlig ikkje skrive disse kommandoane, men
den beste måten og utnytte WMI er og lage eit verktøysskrin med script for vanlige problemsøkings
oppgåve. Ein meir ideal situasjon er for applikkasjons eksperten eller administrator og beskrive eit set
med problemløysnings steg og følgje visst der er eit problem med applikkasjonen. Mest sannsynlig
kan du automatisere monge av desse problemløysningsstega som relatera direkte med Oset gjennom
Windows PowerShell WMI scripting.
Endre WMI autentiserings nivået(levels)
Vi har framleis ikkje snakkas om eit viktig aspekt av WMI autentiserings nivået. Autentiserings nivået
kontroller når og korleis autetisering blir gjort når du koblar til ein WMI leverandør. Dette er viktig
fordi WMI tilgang er veldig spesifikk, og i enkelte tilfeller helde det ikkje og barre være administrator
til maskina, for og få tilgang på og spørje ein WMI leverandør.
Microsoft IIS er ein av desse leverandørane. På grunn av den ekstra risikoen assossiert ved og kjøre
ein nett-teneste, vil Microsoft IIS WMI leverandør(provider) (root\MicrosoftIISv2) trenge all data
som er sendt mellom serveren og klienten og være autentisert, bekrefta og kryptert. For å finne ut av
dei store og små IIS versjon nummera til ein IIS instance som kjører på ein server vi kaller (t.d.
web01), kan du kjøre den følgjande kommando sekvensen:

Get-WMIObject –class iiswebinfo –namespace ”root\MicrosoftIISv2” –computer
web01 –authentication 6 | Select-Object
MajorIISVersionNumber,MinorIISVersionNumber |Format-List

Hovuddelen av denne kode delen er i Get-WMIObject cmdleten. Viktige aspekt er at du må
spesifisere namespace til og gå til root\MicrosoftIISv2, siden den ikkje eksisterar i standard
namespacet root\CIMV2. Sidan klassa vi er interessert i er iiswebinfo som inneheld informasjon
relatert til IIS versjon nummeret. Visst du kjører denne kommandoen på ein annen maskin enn nett-
serveren må du spesifisere nett-serveren sitt maskin namn med –computer ”bryttaren”(switch) for
og kjøre spørjing. Ein spennande del er –authentication parameteren, denne er ny til Windows
PowerShell 2. Utan og spesifisere denne –authentication paramtere med verdien 6, vil Windows
Powershell returnere ein Access Denied error beskjed (dette er egentlige den underligande WMI
leverandøren som gjer). Verdien 6 setter autetiserings nivået til PacketPrivacy, som autentiserer,
bekrefter, og kryperer data overføringa mellom klienten og leverandøren(tenaren).

Vi følgjer opp med ein tabell som visser dei sju autentiserings nivåa. Som nemnt tidligare so er dette
ein av forskjellane mellom Windows Powershell 1.0 og 2. I 1.0 var du begrensa til kunn standarden,
utan desse endringane som kom til powershell 2, var der ingen måtte å bruke PowerShell til og
samhandle med Microsoft IIS leverandøren ved og bruke WMI.

Namn                  Skildring                                                       Autentiserings
                                                                                      Parameter verdi
Default (standard)    Autetisering brukar standard instillingar.                             0
None                  Der er ingen autetisering som blir brukt.                              1
Connect               Autetisering skjer kunn under start fasen av koblingen                 2
                      mellom klienten og leverandøren
Call                  Autetisering skjer under kvar oppringing mellom klient og                3
                      leverandør, men data som er sendt etter er verken kryptert
                      eller signert
Packet                Autetisering skjer mot all data som er mottatt frå klienten              4
                      men data pakkane er framleis ikkje signert eller kryptert.
Packet Integrity      All data overføring er autetisert og bekrefta. Alle                      5
                      datapakka er signer men ikkje kryptert
Packet Privacy        Dette er den høgast nivået av autetisering:                              6
                      All data overføring er autetisert, bekrefta og kryptert
Når du koblar deg til ein WMI instance, kan du ogso fortelje den korleis den skal bruke dine
credentials(attestar) for og gjere enkelte handlingar. Du kan spesifisere kva
etterlikning(imnpersonation) nivå du vil ha med Get-WmiObject og bruke –ImpersonatinLevel
peramettert. Du kan velje mellom dei fem følgande etterliknings nivå verdian som følger.

Namn             Skildring                                                       Etterliknings nivå
                                                                                 parameter verdi
Default             Brukar Standard verdien til remote host                                  0
Anonymous           Gjømer attestane dine frå WMI leverandøren                               1
Identify            Gjer det mulig for WMI objekt og spørje etter dine                       2
                    attestar. Standard for WMI.
Impersonate         Gjer det mulig for WMI objekter og bruke dine attestar                   3
                    når den kjøre, dermed etterlikne deg. Dette nivået er
                    standard for WMI versjon 1.5 og seinare
Delegate            Lar WMI objekt etterlikne deg og i tillegg bruke dine                    4
                    attestar til og aksessere andre system.
Du vil normalt ikkje måtte spesifisere etterliknings nivået. Men visst du kobler til ein WMI leverandør
på ei anna maskin, må du kanskje sette Etterliknings nivået til 3(Impersonate), spesielt visst du ikkje
veit WMI versjonen til den eksterne verten på forkant. Dette er fordi tidligare versjonar før WMI
versjon 1.5 var standard etterliknings nivå satt til 2(Identify), som er bra nok for lokale WMI
spørjingar men ikkje nok når du skal kjøre eksterne WMI kommandoar. Du kan bruke Delegate
Impersonation level berre visst alle kontoane involvert i WMI spørjinga har fått trusted-for-
delagation løyve i Active Directory. Dette er ein sikring for å bruke delegated access fordi det tillatter
ein ekstern maskin å etterlikne deg på enda ein ekstern maskin. Dette kan potensielt være farlig
derfor er det viktig å være varsam når du brukar Delegate impersonation level, på grun av med nok
privileger og litt vondsida koding kan det bli gjort store skadde.



Bruke dei nye WMI cmdlets
Autetiserings parameter til Get-WMIObject cmdlet er ikkje den einaste nye funksjonen i WMI for
Windows PowerShell 2. Faktisk er det 3 nye cmdlets som spesifikt har med WMI som er tilgjengelig til
brukaren. Desse nye cmdletsane er Invoke-WMIMethod, Remove-WMIObject og Set-WMIInstance, vi
skal no beskrive dei i følgande avsnitt.



Få ting til og skje ved og bruke Invoke-WMIMethod
WMI handlar ikkje barre om å kunne utføre spørjingar på eigenskaper. Du kan ogso bruke WMI til å
utføre handlingar gjennom forskjellige WMI leverandørar ved og kalle på metodar definert i WMI
klassa. Methods er kode blokker som er designa til å utføre ein spesifikk handling. Til dømes,
Win32_Service klassa har ein StartService og StopService metoder som du kan bruke til og starte og
stope tenestar. Til dømes for å stope World Wide Web Publishing Service (W3SVC) kan vi kjøre
følgande kommando:
Invoke-WMIMethod –path ”Win32_Service.Name=’W3SVC’” –name StopService
Du kan bruke –path parameteren til å spesifisere ein spesifikk instance til Win32_Service klass til og
kjøre denne metoden på. I dette tilfelle sei du at den skal kjøre mot Win32_Service instance der
Name eigenskapen er lik W3SVC. Mens –name parameteret gir det namnet til metoden du vil kalle
på. Enkelte metodar krevjar at argumentet er spesifikt slik at det veit kva det skal gjere. Eit godt
eksempel på dette er Create metoden for Win32_Process klassen. Create metoden blir brukt til å
lage nye processa, men for å gjere dette trenger den namnet til exe-fila som du ønskjer å kjøre. Visst
du vil bruke WMI til å starte Internet Explorer kan vi bruke følgjande kommando:
Invoke-WMIMethod –class Win32_Process –name Create –argumentlist
”C:\Program Files\Internet Explorer\iexplore.exe”
Her er det viktig å merke seg korleis du brukte –argumentlist parametert for å gi Create metoden
argumentet det trengte for å utføre oppgåve sin.
WMI klasser kan definer deira metodar som instance- eller static-based:
     Ein instance metode er avhengig av ein spesifikk instance til ein klasse og handle med.
         StopService metoden til Win32_Service klassa er eit godt eksempel til ein instance metode.
         Du kan kalle StopService berre på ein spesifikk service instance. Visst du berre Win32_Service
         til å StopService vil det ikkje fungere sidan den ikkje veit kva service du snakkar om
     Ein Statisk metode kan kjørast på ein klasse uavhengig av instance. Create metoden til
         Win32_Process klassen er eit godt eksempel på ein statisk metode. Du trenger ikkje å
         spesifiser Win32_Process til å kalle Create, sidan du lager ein heilt ny prosessar uansett, som
         generelt ikkje er avhengig av nokon andre prosessar.



Sletting av objekt ved bruk av Remove_WmiObject
Du kan bruke Remove-WmiObject til å sende eit WMI objekt til denns virtuelle grav. Dette fungere so
klart kunn på objekter som du faktisk kan slette – til dømes kan du ikkje bruke Remove-WmiObject
for å få RAMen til og magisk forsvinne. Du vil normalt bruke denne Cmdleten til å fjerne objekter som
filer, printerar, registry keys og prosessar.
Denne cmdleten har omtrent like mange argument som Get-WmiObject, so den er veldig fleksibel.
Men praktisk sett er det ein mykje enklare veg å bruke denne cmdleten på. Du brukar berre Get-
WmiObject for å få ein liste over objekta du er interessert i og so pipe den inn i Remove-WmiObject
og du er ferdig. Vi tenkte vi skal ta med eit døme på korleis du kan bruke denne kommandoen igjen
takker vi til ”Windows Powershell 2 for Dummies” (av Steve Seguls) for dømet.
     1. Du begynner med å opne notisblokk(notepad) på maskina di.
     2. kjør følgande kommando:
     Get-WmiObject –query ”Select * from Win32_Process where
     Name=’notepad.exe’”
     Visst du har oppe notisblokk, vill den returnere all informasjone du noken sinne skulle ønske å
     vitte om notepad.exe prosessen.
     3. No kjører du denne kommadoen:
     Get-WmiObject –query ”Select * from Win32_Process where
     name=’notepad.exe’” | Remove-WmiObject
No skal ikkje Notisblokk lengre kjøre på di maskin, takket være Remove-WmiObject
Remove-WmiObject er eit veldig mektig, derfor må du passe på at dei objekta du vil fjerne faktisk er
dei objekta du ønsker å fjerne. Den beste metoden er å sende ein spøring først for å sjekke før du
piper det gjennom til Remove-WmiObject.



Sette WMI eigenskapar ved å bruke Set-WmiInstance
Set-WmiInstance cmdleten er brukt for å sette read-write WMI eigenskaper. Sjølv om mesteparten
av WMI klassa eigenskaper er read-only, er det ganske monge som ikkje er det, og denne cmdleten
lar deg ta fordel av desse eigenskapane. Eit døme på ein klasse som har read-write eigenskapar er
Win32_Environment klassa. Den definer alle miljø variablane på systemet. Du kan sjå alle miljø
variablane definer på ditt system ved å kjøre denne kommandoen:
Get-WmiObject Win32_Enviroment
Kvar miljø variabel består av tre eigenskaper: namn, variabel verdi og brukernavn. Namnet og
variabelverdi eigenskapane innehelder namnet og verdiane til desse variablane, og brukanavn
definerer brukaren denne variabelen gjelder for. Eit innlegg med <SYTEM> betyr at det er ein system
variabel, men visst du ser eit spesifikt brukarnamn der so representerar det brukar variablar. For å
lage ein ny system miljø variabel som vi kallar MinVariabel med ein verdi satt til MinVerdi, kan du
bruke Set-WmiInstance Cmdleten slik:
Set-WmiInstance –class Win32_Enviroment –argument
@{Name=”MinVariabel”;VariableValue=”MinVerdi”;UserName=”<SYSTEM>”}
-Argument parametert er der du spesifiserar namn/verdi paret som vil bli laget. Argument verdien er
i eit format til ein hash table. Vi nemner kort om hash tabellar at ein hash table er ein data struktur
som kartlegger nøkklar til veridar. I Set-WMIInstance kommandoen vi lagde, vil eit eksempel på ein
nøkkel være namn, og minvariabel som døme på verdiar.
Administrasjon med Powershell

Remoting
Første steg er å sikre at WinRM er installert, hvis det er snakk om et Windows 7 eller Windows 2008
R2 system er dette automatisk installert i basis Operativ Systemet, hvis ikke så kan det lastes ned fra
Microsoft sine sider.

Nødvendige komponenter for å kjøre fjern kommandoer i Powershell:
           Microsoft .NET Framework 2.0
           Powershell 2
           WinRM 2.0 Service

Introduksjon
Vi har tre metoder for å kjøre kommander på en fjern maskin, vi kan enten bruke Invoke-Command
eller –ComputerName for å kjøre kommandoen som en enkelt instans på en eller flere maskiner, eller
vi kan bruke Enter-PSSession for å være direkte i Managment Shell’et til maskinen vi er koblet til, da
vil Command Promtet forandre seg fra PS> til Server\PS> for å vise oss at nå vil alle kommandoer
som vi kjører bli kjørt på “Server” maskinen og ikke den lokale maskinen. Det som er viktig og
bemerke er at Invoke-Command og –ComputerName bare åpner en kobling til målet for å kunne
kjøre den enkelte kommandoen, så vil kobling lukkes etter det. Men for å kunne lage en mer
permanent kobling kan vi bruke New-Pssession cmdlet’en *PS>$session = New-Pssession –
ComputerName Server01]. Det er også mulig å bruke Import-PSSession for å importere session’n inn i
det lokale skallet. Vedlagt til slutt ligger det en liste over kommanoder hvor man kan bruke –
ComputerName opsjonen for å kjøre kommandoen remote.

Remote Variabler
Til tider vil vi bruke lokale verdier i en remote session, for eksempel vi har en lokal variabel som
inneholder en liste over alle maskiner som vi vil at kommandoen som vi kjører på fjern maskinen skal
kjøres på, det vi da kan gjøre er å bruke –Args opsjonen for å føre variabelen til remote maskinen.

PS> $s = New-PSSession -ComputerName localhost
PS> Invoke-Command -Session $s -Script { Get-Process -Id $args[0] } -Args
$pid

Her vil –Args returnere prosess ID’en til den lokale powershell sesjonen til remote maskinen, så den
vil liste ut Powershell statusen til remote maskinen.



Oppkobling:
Det første som må gjøres er å kjøre “Enable-PSRemoting” på tjeneren som det skal remotes til, som
vi går ut ifra at det er installert verktøyene som kreves for at dette skal fungere som gitt ovenfor.

PS>$session = New-PSsession –ComputerName 14e-AD
PS>Enter-PSsession -session $session
14e-AD\PS>Get-Process | Sort-Object –property PM –desc | Select-Object –first 10

Hvordan få tilgang til variabler brukt på remote maskiner.
Eksempler
PS>Invoke-Command –ComputerName 14e-AD –ScriptBlock {Get-Process | sort-
object –property PM -desc | Select-Object –first 10}

PS>Get-Process –ComputerName 14e-AD | Sort-Object –property PM –desc |
Select-Object –first 10

Her kjører vi Get-Process med opsjonen –ComputerName for å hente ut prosesser fra maskinen 14e-
ad, spesifikt sortert etter bruk av fysisk minne, og får opp de 10 prosessene som bruker mest.


Exchange Remoting
Mer om Exchange remoting under selve Exchange artikkelen, men i bunn og grunn er Exchange
remoting mye det samme som vanlig remoting, bortsett fra at man må ha –ConfigurationName
Microsoft.Exchange for å si til konsollen at det er Exchange skallet vi vil ha og ikke det vanlige remote
skallet. Vi bruker her ConnectionUri istedenfor ComputerName eller UseSSL for å vise til den eksakte
lokasjonen som vi kobler til.

Her bruker vi Import-PSSessions for å få tilgang til Exchange Cmdlet’ene i den lokale session som
inkluderer Tab auto-fullfør funksjonalitet.

PS>$Session = New-PSSession -ConfigurationName Microsoft.Exchange -
ConnectionUri
http://14e-exchange.14e-ad.local/powershell/ -Authentication Kerberos
PS> Import-PSSession $Session
14e-Exchange\PS>Get-Mailbox


Remote Jobs
Ved å bruke “Invoke-Command‛, ‚-ScriptBlock‛ opsjonen og “Start-Job‛ kan vi opprette
cmdletter som prosesser som kjører i bakgrunnen på mål maskinen.
Det er flere metoder for å sette opp en Remote Job, noen av metodene er at vi bruker Enter-
PSSession og starter så bakgrunnsjobben med Start-Job, eller bruker Invoke-Command for å kjøre
Start-Job på fjernmaskinen. Det er også mulig å legge til –AsJob opsjonen på slutten av et script som
vi vet kommer til å kjøre lenge
Eksempel:

$session = New-Pssession –computername Computer1
Invoke-Command –session $session –scriptblock {$newjob = Start-job –
scriptblock {Get-process}}
Invoke-command –session $session –scriptblock {receive-job $newjob}
Invoke-command –session $session –scriptblock {remove-job $newjob}
Remove-PSsession -$session

Jobs er hendige for prosesser som vi for eksempel vil kjøre i bakgrunnen, eller som vil ta så lang tid å
gi oss resultatet at tiden vil være bedre brukt til å fullføre noe annet arbeide.
For å få resultatet bruker vi cmdlet’et Recieve-Job.

Eksempel
PS>Start-Job –ScriptBlock {Get-Process}
PS> Get-Job
Id                    Name                  State           HasMoreData           Location
Command
--                    ----                   -----          -----------           --------
-------
1                     Job1                  Completed       False                 localhost
Get-Process

PS>Recieve-Job –id 1

Her kjører vi Get-Process på den lokale maskinen som en job, så finner vi Id’en til jobben og anskaffer
resultatet med Recieve-Job



Secure Strings
Vi har et par metoder for å gjøre at passord ikke blir lagret i klartekst i Powershell. Først og fremst
når vi vil at brukeren skal skrive inn et passord til bruk for innlogging eller annen informasjon som vi
ikke vil at skal kunne være tilgjengelig i klartekst. Her er et eksempel hvor brukeren blir spurt om å
skrive inn passordet, hvor det blir lagret som en Secure String. “ PS>$password = Read-Host -
AsSecureString "Enter your password" “. Problemer med denne er at den er bare i variabelen, og er
problematisk å forflytte. Det kan vi omgå ved å gjøre det om til en kryptert streng med “Convert-
FromSecureString” cmdlet’et for så å liste det ut i ei tekst fil, hvor det vil være som bare en serie med
tall, men som vi kan importere og bruke Convert-ToSecureString for å få tilbake den originale sikre
strengen som var lagret, som vi da igjen kan bruke i variabler for å autentisere oss eller lignende.

Eksempel:
PS Scripts:\> $password = Read-Host -AsSecureString "Skriv inn ditt
passord"
Skriv inn ditt passord: ****
PS Scripts:\> $password
System.Security.SecureString
PS Scripts:\> $Convertpass = ConvertFrom-SecureString $password
PS Scripts:\> $Convertpass
01000000d08c9ddf0115d1118c7a00c04fc297eb010000003cf14d8c180fe24597a6a39b38a
a8f65000000000200000000001066000000010000200
0000053ede26c00d58203446ee790af2b6048ed4907a6935a20b93972227f403f7a8e000000
000e800000000200002000000037a145e2bdeb4349b5
98ca5b640240987d28b37762ff775f4ca377c3d4a6fe4810000000b36ebb3f1080ab2114970
3c2a616e4f6400000007add01f5317d811fd6acb02b5
0b4fa7427361367488aa151665fc505425c4cbb40f99fee22a936dde9e2619ec07cf98f33a3
b8d0c48d1af679df5eaf8b35871b
PS Scripts:\> $Properpass = ConvertTo-SecureString $Convertpass
PS Scripts:\> $properpass
System.Security.SecureString

Process
Get-Process | Sort-Object –Property pm –desc | Select-object –first 10 | where {$_.ProcessName –eq
“Firefox”- | Write-out c:\scripts\Get-Process_10.txt

Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-FileVersionInfo] [-
Module] [<CommonParameters>]
Get-Process kan vi for eksempel bruke for å overvåke maskiner å sjekke at ingen prosesser bruker
mer enn vanlig CPU eller RAM.

Service
PS>get-service | where {$_.Status –eq “Stopped”-
PS>New-Service
PS>Set-Service

Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] [-DependentServices] [-
Exclude <string[]>] [-Include <string[]>] [-RequiredServices] [<CommonParameters>]

Get-Service gir oss en liste over alle services som er på maskinen, enten de kjører eller er stoppet,
dette kan være nyttig når vi for eksempel vet alle Services som skal kjøre på en maskin og vil sjekke
om det er startet noen uønskede eller usikre services siden sist gang.

Det er også mulig å opprette programmer eller kjøre script i bakgrunnen som Services med New-
Service cmdlet’et.



EventLog
PS Scripts:\> Get-Eventlog -list

  Max(K) Retain OverflowAction                      Entries Log
  ------ ------ --------------                      ------- ---
  20 480      0 OverwriteAsNeeded                     4 495 Application
  20 480      0 OverwriteAsNeeded                         0 HardwareEvents
     512      7 OverwriteOlder                            0 Internet Explorer
  20 480      0 OverwriteAsNeeded                         0 Key Management Service
   8 192      0 OverwriteAsNeeded                         0 Media Center
     128      0 OverwriteAsNeeded                        38 OAlerts
                                                            Security
  20 480           0 OverwriteAsNeeded               20 397 System
  15 360           0 OverwriteAsNeeded                  606 Windows PowerShell


Gir oss en liste over alle typer logger som er registrert på den lokale maskiner. Ved å skrive inn
“PS>Get-EventLog Application” vil vi få ut det som er blitt logget under applikasjoner, det som er
generelt mest interessant å se på er feil, derfor bruker vi EntryType Error for å få ut alle feil.



get-eventlog -logname System -EntryType Error -ComputerName c:\scripts\computername.txt

BestPractices
Best Practices modulen inneholder hva Microsoft ser på som Best Practices når det gjelder drift, og er
et verktøy som er ment for å hjelpe driftere å analysere eksisterende systemer om de følger disse
retnings linjene. Vi henter den inn ved å kjøre “PS>Import-Module BestPractices”.

Har ikke fått den til å fungere, men tenkte jeg skulle nevne den her da det kan være en særdeles
Sende E-post med Powershell
For å sende en e-post gjennom Powershell 2.0 bruker vi enkelt nok bare cmdlet’en Send-
MailMessage, hvor de viktigste opsjonene er –To, -From, -Body og –Smtpserver.

Send-MailMessage [-To] <string[]> [-Subject] <string> [[-Body] <string>] [[-
SmtpServer] <string>] -From <string> [-Attachments <string[]>] [-Bcc <string[]>] [-
BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-
DeliveryNotificationOption {<None> | <OnSuccess> | <OnFailure> | <Delay> |
<Never>}] [-Encoding <Encoding>] [-Priority {<Normal> | <Low> | <High>}] [-UseSsl]
[<CommonParameters>]




Group Policy Administering med Powershell
Først om fremst for å administrere GPO’er med Powershell:

Viktig å påpeke at vi kan ikke forandre settingene til GPO’en i selve powershell, men at
administrasjonen er mer fokusert på overhengende oppgaver som vi gjennomfører på mer enn en
GPO samtidig. Noe som gjør at GPO modulen tillater større migreringer og konfigurasjon av GPO’er
mot et ny-opprettet domene. For å få tilgang til disse cmdlet’ene må først modulen som inneholder
de være importert i det lokale skallet, dette gjør vi ved å skrive inn Import-Module GroupPolicy.
Enklere vil være å gjøre dette som en del av bruker profilen slik at denne og andre moduler blir
importert ved oppstart og at man slipper å skrive det inn hver gang.



Tilgjengelige GPO kommandoer med Powershell

Name                         Description

Backup-GPO                   Tar backup av en eller flere GPO’er I et domene.



                             Backup-GPO [-Name] <string> -Path <string> [-Comment
                             <string>] [-Domain <string>] [-Server <string>]
                             [<CommonParameters>]




                             PS>Backup-Gpo –all –Patch \\14e-dc\GpoBackup


                             Her tar vi backup til en nettverks lokasjon på domene kontrollen av alle
                             Group Policy Objektene som ligger på serveren.

Copy-GPO                     Kopierer en GPO.



                             Copy-GPO [-SourceName] <string> -TargetName <string>
                             [-CopyACL] [-MigrationTable <string>] [-SourceDomain
                             <string>] [-SourceDomainController <string>] [-
                             TargetDomain <string>] [-TargetDomainController
                    <string>] [-Confirm] [-WhatIf] [<CommonParameters>]


                    PS>Copy-GPO –SourceName 14e-GPO –SourceDomain 14e-
                    ad.local –TargetName 14e-GPO-Kopi –TargetDomain -14e-
                    ad.local


                    Lager en kopi av GPO’en 14e-GPO fra domenet 14e-ad.local, og lager
                    en kopi i samme domene ved navn 14e-GPO-kopi.

Get-GPInheritance   Henter Group Policy arv informasjon for et spesifikt domene eller en
                    OU.



                    Get-GPInheritance [-Target] <string> [-Domain
                    <string>] [-Server <string>] [<CommonParameters>]




                    PS>Get-GPInheritance –Target ‚dc=14e-ad,dc=local‛ –
                    Domain 14e-ad.local –Server 14e-dc


                    Henter informasjon om arv fra domenet 14e-ad.local fra
                    domenekontrolleren 14e-dc.

Get-GPO             Henter en eller flere GPO’er som tilhører et domene.

                    Get-GPO [-Name] <string> [-Domain <string>] [-Server
                    <string>] [<CommonParameters>]




                    PS>Get-Gpo –all –domain 14e-ad.local


                    Henter alle GPO’ene under domenet 14e-ad.local

Get-GPOReport       Lager en rapport i enten XML eller HTML format av en eller flere
                    GPO’er i et domene.



                    Get-GPOReport [-Name] <string> -ReportType {<Xml> |
                    <Html>} [-Domain <string>] [-Path <string>] [-Server
                    <string>] [<CommonParameters>]




                    PS>Get-GPOReport –Name 14e-GPO –ReportType XML –Path
                    \\14e-dc\14e-GPO-Report.xml
                          Lager en GPO Rapport av GPO’en 14e-GPO i filtypen XML (Hendig siden
                          powershell kan håndtere XML og gir oss bedre muligheter for utlesing
                          av attributter og annen informasjon.

Get-GPPermissions         Henter sikkerhets nivåene for brukere eller grupper for en spesifik GPO.



                          Get-GPPermissions [-Name] <string> [-TargetName
                          <string>] [-TargetType {<Computer> | <User> |
                          <Group>}] [-Domain <string>] [-Server <string>]
                          [<CommonParameters>]




                          PS:>Get-GPPermissions –Name 14e-GPO –TargetName
                          ‚Tenknisk Brukere‛ –TargetType Group


                          Informasjon om hvilke rettigheter gruppen “Teknisk Brukere” har over
                          GPO’en 14e-GPO.

Get-GPPrefRegistryValue   Henter en eller flere register preferanser under enten Maskin
                          Konfigurering eller Bruker Konfigurering i en GPO.



                          Get-GPPrefRegistryValue -Guid <Guid> -Context {<User>
                          | <Computer>} -Key <string> [-Domain <string>] [-
                          Order <int>] [-Server <string>] [-ValueName <string>]
                          [<CommonParameters>]




                          PS>get-gpprefregistryvalue -name 14e-gpo -context
                          user -key hklm\software\microsoft\microsoftoffice


                          Viser alle preferansene for register nøkkelen
                          hklm\software\microsoft\microsoftoffice.

Get-GPRegistryValue       Henter en eller flere register-baserte policy innstillinger under enten
                          Maskin eller Bruker konfigurasjon i en GPO.



                          Get-GPRegistryValue -Guid <Guid> -Key <string> [-
                          Domain <string>] [-Server <string>] [-ValueName
                          <string>] [<CommonParameters>]
Get-                     Leser ut “Resultant Set of Policy” informasjon til en fil, for en bruker
GPResultantSetOfPolicy   eller maskin, eller begge.

                         Get-GPResultantSetofPolicy -Path <string> -ReportType
                         {<Xml> | <Html>} [-Computer <string>] [-User
                         <string>] [<CommonParameters>]




Get-GPStarterGPO         Henter en eller flere Starter GPO’er fra et domene.



                         Get-GPStarterGPO [-Name] <string> [-Domain <string>]
                         [-Server <string>] [<CommonParameters>]




Import-GPO               IImporterer Group Policy innstillinger fra en GPO backup inn i en
                         spesifik GPO.



                         Import-GPO -BackupId <Guid> [-TargetGuid <Guid>] [-
                         TargetName <string>] -Domain <string> [-
                         CreateIfNeeded] [-MigrationTable <string>] [-Path
                         <string>] [-Server <string>] [<CommonParameters>]




New-GPLink               Kobler en GPO til en site, domene eller Organizational Unit.



                         New-GPLink [-Name] <string> -Order <int> -Target
                         <string> [-Domain <string>] [-Enforced {<Unspecified>
                         | <No> | <Yes>}] [-LinkEnabled {<Unspecified> | <No>
                         | <Yes>}] [-Server <string>] [-Confirm] [-WhatIf]
                         [<CommonParameters>]




New-GPO                  Lager en ny GPO.



                         New-GPO [-StarterGpoGuid <Guid>] [-Name] <string> [-
                         Comment <string>] [-Domain <string>] [-Server
                         <string>] [-Confirm] [-WhatIf] [<CommonParameters>]
                         PS>New-GPO –StarterGPOName New-14e-GPO –Name New-14e-GPO

New-GPStarterGPO         Lager en ny Starter GPO.



                         New-GPStarterGPO [-Name] <string> [-Comment <string>]
                         [-Domain <string>] [-Server <string>] [-Confirm] [-
                         WhatIf] [<CommonParameters>]




                         PS>New-GPStarterGPO –Name New-14e-StarterGPO –Domain 14e-
                         ad.local

Remove-GPLink            Fjerner en GPO kobling fra et site, domene eller OU.



                         Remove-GPLink -Guid <Guid> [-Domain <string>] [-
                         Server <string>] [-Target <string>] [-Confirm] [-
                         WhatIf] [<CommonParameters>]




Remove-GPO               Sletter en GPO.



                         Remove-GPO [-Name] <string> [-Domain <string>] [-
                         KeepLinks] [-Server <string>] [-Confirm] [-WhatIf]
                         [<CommonParameters>]




                         Remove-Gpo –Name 14e-GPO –Domain 14e-ad.local

Remove-                  Fjerner en eller flere register preferanse object fra enten maskin eller
GPPrefRegistryValue      bruker konfigurasjon i en GPO.



                         Remove-GPPrefRegistryValue -Guid <Guid> -Context
                         {<User> | <Computer>} -Key <string> [-Domain
                         <string>] [-Order <int>] [-Server <string>] [-
                         ValueName <string>] [-Confirm] [-WhatIf]
                         [<CommonParameters>]




Remove-GPRegistryValue   Fjerner en eller flere register-baserte policy innstillinger object fra
                         enten maskin eller bruker konfigurasjon i en GPO.
                    Remove-GPRegistryValue -Guid <Guid> -Key <string> [-
                    Domain <string>] [-Server <string>] [-ValueName
                    <string>] [-Confirm] [-WhatIf] [<CommonParameters>]




Rename-GPO          Gir et nytt navn til en allerede eksisterende GPO.



                    Rename-GPO -Guid <Guid> -TargetName <string> [-Domain
                    <string>] [-Server <string>] [<CommonParameters>]




Restore-GPO         Gjennoppretter en eller flere GPO’er i et domene fra en eller flere
                    backup filer.



                    Restore-GPO -All -Path <string> [-Domain <string>] [-
                    Server <string>] [-Confirm] [-WhatIf]
                    [<CommonParameters>]




Set-GPInheritance   Slår av eller på blokkering av arv for et spesifikt domene eller OU.



                    Set-GPInheritance [-Target] <string> -IsBlocked {<No>
                    | <Yes>} [-Domain <string>] [-Server <string>] [-
                    Confirm] [-WhatIf] [<CommonParameters>]




Set-GPLink          Forandrer attributter til en spesifik GPO kobling.



                    Set-GPLink [-Name] <string> -Target <string> [-Domain
                    <string>] [-Enforced {<Unspecified> | <No> | <Yes>}]
                    [-LinkEnabled {<Unspecified> | <No> | <Yes>}] [-Order
                    <int>] [-Server <string>] [-Confirm] [-WhatIf]
                    [<CommonParameters>]




Set-GPPermissions   Grants a level of permissions to a security principal for one GPO or for
                    all the GPOs in a domain.

                    Gir en
                           Set-GPPermissions -Guid <Guid> -PermissionLevel
                           <GPPermisssionType> -TargetName <string> -TargetType
                           {<Computer> | <User> | <Group>} [-Domain <string>] [-
                           Replace] [-Server <string>] [-Confirm] [-WhatIf]
                           [<CommonParameters>]




Set-GPPrefRegistryValue    Konfigurerer en eller flere register preferanse object fra enten maskin
                           eller bruker konfigurasjon i en GPO.




                           Set-GPPrefRegistryValue -Guid <Guid> -Action
                           {<Create> | <Replace> | <Update> | <Delete>} -Context
                           {<User> | <Computer>} -Key <string> -Type {<Unknown>
                           | <String> | <ExpandString> | <Binary> | <DWord> |
                           <MultiString> | <QWord>} -Value <psobject> [-Disable]
                           [-Domain <string>] [-Order <int>] [-Server <string>]
                           [-ValueName <string>] [-Confirm] [-WhatIf]
                           [<CommonParameters>]




Set-GPRegistryValue        Konfigurerer en eller flere register baserte policy innstillinger fra enten
                           maskin eller bruker konfigurasjon i en GPO.




                           Set-GPRegistryValue -Guid <Guid> -Key <string> -
                           ValueName <string[]> [-Additive] [-Disable] [-Domain
                           <string>] [-Server <string>] [-Type {<Unknown> |
                           <String> | <ExpandString> | <Binary> | <DWord> |
                           <MultiString> | <QWord>}] [-Value <psobject>] [-
                           ValuePrefix <string>] [-Confirm] [-WhatIf]
                           [<CommonParameters>]




Opprette en GPO med Powershell
For å opprette et Group Policy Object med Powershell bruker vi “New-GPO” kommandoen, men først
og fremst kan vi opprette en StarterGPO som vi kan bruke som basis for den nye GPO’en vi skal
opprette. Det gjør vi ved å kjøre “New-GPStarterGPO –Name “14e-StarterSec” –Domain 14e-ad.local
–Comment “Security Template”” så kan vi kjøre “New-GPO –Name 14e-Security –StarterGPOName
“14e-StarterSec”” og får i koble den opp mot en OU bruker vi “New-GPLink –name 14e-StarterSec –
target “OU=Security,DC=14e-ad,DC=local”” vi har også en mulighet for å droppe “-name” fra New-
GPLink og bare pipe New-GPO inn i New-GPLink, som gitt her: New-GPO –Name 14e-Security –
StarterGPOName “14e-StarterSec” | New-GPLink –target “OU=Security,DC=14e-ad,DC=local”



For å anskaffe en liste av alle eksisterende GPO’er på et domene kjører vi kommandoen Get-Gpo –all
–domain 14e-ad.local

Viktige administrative oppgaver som kan gjennomføres gjennom Powershell med Group Policy
Modulen er Backup og Migrering av GPO’er fra et domene til et annet og sikkerhets annstaltninger.



Vedlegg:
Liste over Cmdlets i Powershell hvor det er mulig å bruke –ComputerName opsjonen
----
Get-WinEvent                 Får tak i events fra logger og hendelses log filer på lokale og
                             remote maskiner.

                             Get-WinEvent [-LogName] <string[]> [-ComputerName
                             <string>] [-Credential <PSCredential>] [-FilterXPath
                             <string>] [-Force <switch>] [-MaxEvents <int64>] [-
                             Oldest] [<CommonParameters>]


                             C:\PS>get-winevent -logname *disk*, Microsoft-
                             Windows-Kernel-WHEA

                             Description
                             -----------
                             This command gets the error events whose names
                             include "disk" from all of the event logs on the
                             computer and from the Microsoft-Windows-Kernel-WHEA
                             event log.


Get-Counter                  Gets performance counter data from local and remote computers.

                             Get-Counter [-Counter] <string[]> [-ComputerName
                             <string[]>] [-Continuous] [-MaxSamples <Int64>] [-
                             SampleInterval <int>] [<CommonParameters>]

                             C:\PS># get-counter -computername (get-random
                             servers.txt -count 50) -counter "\LogicalDisk(*)\%
                             Free Space"

                             Description
                             -----------
                             This command uses the Get-Counter and Get-Random
                             cmdlets to find the percentage of free disk space on
                             50 computers selected randomly from the Servers.txt
                             file.
Test-WSMan           Tests whether the WinRM service is running on a local or remote
                     computer.

                     Test-WSMan [[-ComputerName] <string>] [-
                     ApplicationName <string>] [-Authentication
                     <Authentication>] [-CertificateThumbprint <string>]
                     [-Credential <PSCredential>] [-Port <int>] [-UseSSL]
                     [<CommonParameters>]

                     C:\PS>test-wsman -computername server01

                     wsmid           :
                     http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanid
                     entity.xsd
                     ProtocolVersion :
                     http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
                     ProductVendor   : Microsoft Corporation
                     ProductVersion : OS: 0.0.0 SP: 0.0 Stack: 2.0

                     Description
                     -----------
                     This command determines whether the WinRM service is
                     running on the server01 computer named.




Invoke-WSManAction   Invokes an action on the object that is specified by the Resource
                     URI and by the selectors.

                     Invoke-WSManAction [-ResourceURI] <Uri> [-Action]
                     <string> [-ApplicationName <string>] [-Authentication
                     <AuthenticationMechanism>] [-CertificateThumbprint
                     <string>] [-ComputerName <string>] [-Credential
                     <PSCredential>] [-FilePath <File>] [-OptionSet
                     <hashtable>] [-Port <int>] [-SelectorSet <hashtable>]
                     [-SessionOption <hashtable>] [-UseSSL] [-ValueSet
                     <hashtable>] [<CommonParameters>]


                     C:\PS>invoke-wsmanaction -action startservice -
                     resourceuri wmicimv2/win32_service -selectorset
                     @{name="spooler"} -authentication default

                     xsi         : http://www.w3.org/2001/XMLSchema-
                     instance
                     p           :
                     http://schemas.microsoft.com/wbem/wsman/1/wmi/root/ci
                     mv2/Win32_Service
                     cim         :
                     http://schemas.dmtf.org/wbem/wscim/1/common
                     lang        : en-US
                     ReturnValue : 0

                     Description
                     -----------
                     This command calls the StartService method of the
                     Win32_Service WMI class instance that corresponds to
                     the Spooler service.
                The return value indicates whether the action was
                successful. In this case, a return value of 0
                indicates success. A return value of 5 indicates that
                the service is already started.


Connect-WSMan   Connects to the WinRM service on a remote computer.

                Connect-WSMan [-ApplicationName <string>] [-
                Authentication <Authentication>] [-
                CertificateThumbprint <string>] [-ComputerName
                <string>] [-Credential <PSCredential>] [-OptionSet
                <hashtable>] [-Port <int>] [-SessionOption
                <hashtable>] [-UseSSL] [<CommonParameters>]



                C:\PS>Connect-WSMan -computer server01



                PS C:\Users\testuser> cd wsman:

                PS WSMan:\>

                PS WSMan:\> dir




                   WSManConfig:
                Microsoft.WSMan.Management\WSMan::WSMan



                ComputerName                                          Type

                ------------                                          ----

                localhost
                Container

                server01
                Container



                Description

                -----------

                This command creates a connection to the remote
                server01 computer.



                The Connect-WSMan cmdlet is generally used within the
                    context of the WSMan provider to connect to a remote
                    computer, in this case the server01 computer.
                    However, you can use the cmdlet to establish
                    connections to remote computers before you change to
                    the WSMan provider. Those connections will appear in
                    the ComputerName list.




Disconnect-WSMan    Disconnects the client from the WinRM service on a remote
                    computer.

                    Disconnect-WSMan [-ComputerName <string>]
                    [<CommonParameters>]

                    C:\PS>Disconnect-WSMan -computer server01



                    C:\PS> cd WSMan:

                    PS WSMan:\>

                    PS WSMan:\> dir




                       WSManConfig:
                    Microsoft.WSMan.Management\WSMan::WSMan



                    ComputerName                                          Type

                    ------------                                          ----

                    localhost
                    Container




Get-WSManInstance   Displays management information for a resource instance
                    specified by a Resource URI.

                    Get-WSManInstance [-ResourceURI] <Uri> -SelectorSet
                    <hashtable> [-ApplicationName <string>] [-
                    Authentication <Authentication>] [-
                    CertificateThumbprint <string>] [-ComputerName
                    <string>] [-Credential <PSCredential>] [-Dialect
                    <Uri>] [-Fragment <string>] [-OptionSet <hashtable>]
                    [-Port <int>] [-SessionOption <hashtable>] [-UseSSL]
                    [<CommonParameters>]



                    C:\PS>Get-WSManInstance -Enumerate -Dialect
                    association -Associations -filter
                    "{Object=win32_service?name=winrm}" -res wmicimv2/*



                    Description

                    -----------

                    This command gets association instances that are
                    related to the specified instance (winrm). Because
                    the Dialect parameter is set to "association" and the
                    Associations parameter is used, this command returns
                    association instances, not associated instances.



                    Important: You must enclose the filter in quotation
                    marks, as shown in the example.




Set-WSManInstance   Modifies the management information that is related to a resource.

                    Set-WSManInstance [[-SelectorSet] <hashtable>] -
                    ResourceURI <Uri> [-Authentication
                    <AuthenticationMechanism>] [-CertificateThumbprint
                    <string>] [-ConnectionURI <Uri>] [-Credential
                    <PSCredential>] [-Dialect <Uri>] [-FilePath <File>]
                    [-Fragment <string>] [-OptionSet <hashtable>] [-
                    SessionOption <hashtable>] [-ValueSet <hashtable>]
                    [<CommonParameters>]

                    C:\PS>set-wsmaninstance -resourceuri
                    winrm/config/listener -computername SERVER02 -
                    selectorset @{address="*";transport="https"} -
                    valueset @{Enabled="false"}
cfg                   :
http://schemas.microsoft.com/wbem/wsman/1/config/list
ener

xsi                   :
http://www.w3.org/2001/XMLSchema-instance

lang                  : en-US

Address               : *

Transport             : HTTPS

Port                  : 443

Hostname              :

Enabled               : false

URLPrefix             : wsman

CertificateThumbprint :

ListeningOn           : {127.0.0.1, 172.30.168.172,
::1, 2001:4898:0:fff:0:5efe:172.30.168.172...}



Description

-----------

This command disables the https listener on the
remote computer SERVER02.



Important: The ValueSet parameter is case-sensitive
when matching the properties specified.



For example, using the above command.



This fails:      -ValueSet @{enabled="False"}



This succeeds:   -ValueSet @{Enabled="False"}
Remove-WSManInstance   Deletes a management resource instance.

                       Remove-WSManInstance [[-SelectorSet] <hashtable>] [-
                       ApplicationName <string>] [-Authentication
                       <Authentication>] [-CertificateThumbprint <string>]
                       [-ComputerName <string>] [-Credential <PSCredential>]
                       [-OptionSet <hashtable>] [-Port <int>] [-ResourceURI
                       <Uri>] [-SessionOption <hashtable>] [-UseSSL]
                       [<CommonParameters>]

                       C:\PS>Remove-WSManInstance winrm/config/listener -
                       SelectorSet @{Address="*";Transport="HTTP"}



                       Description

                       -----------

                       Deletes the WS-Management HTTP listener on a
                       computer.




New-WSManInstance      Creates a new instance of a management resource.

                       New-WSManInstance [-SelectorSet] <hashtable> -
                       ResourceURI <Uri> [-ApplicationName <string>] [-
                       Authentication <Authentication>] [-
                       CertificateThumbprint <string>] [-ComputerName
                       <string>] [-Credential <PSCredential>] [-FilePath
                       <File>] [-Port <int>] [-SessionOption <hashtable>] [-
                       UseSSL] [-ValueSet <hashtable>] [<CommonParameters>]

                       C:\PS>New-WSManInstance winrm/config/Listener -
                       SelectorSet @{Transport=HTTPS} -ValueSet
                       @{Hostname="HOST";CertificateThumbprint="XXXXXXXXXX"}



                       Description

                       -----------

                       This command creates an instance of a WS-Management
                       HTTPS listener on all IP addresses.
Invoke-Command   Runs commands on local and remote computers.

                 Invoke-Command [[-ComputerName] <string[]>] [-
                 ScriptBlock] <scriptblock> [-ApplicationName
                 <string>] [-ArgumentList <Object[]>] [-AsJob] [-
                 Authentication {<Default> | <Basic> | <Negotiate> |
                 <NegotiateWithImplicitCredential> | <Credssp> |
                 <Digest> | <Kerberos>}] [-CertificateThumbprint
                 <string>] [-ConfigurationName <string>] [-Credential
                 <PSCredential>] [-HideComputerName] [-InputObject
                 <psobject>] [-JobName <string>] [-Port <int>] [-
                 SessionOption <PSSessionOption>] [-ThrottleLimit
                 <int>] [-UseSSL] [<CommonParameters>]

                 C:\PS>$so = New-PSSessionOption -SkipCACheck



                 PS C:\> invoke-command -session $s -scriptblock {
                 get-hotfix } -SessionOption $so -credential
                 server01\user01



                 Description

                 -----------

                 This example shows how to create and use a
                 SessionOption parameter.



                 The first command uses the New-PSSessionOption cmdlet
                 to create a session option. It saves the resulting
                 SessionOption object in the $so parameter.



                 The second command uses the Invoke-Command cmdlet to
                 run a Get-Hotfix command remotely. The value of the
                 SessionOption parameter is the SessionOption object
                 in the $so variable.




New-PSSession    Creates a persistent connection to a local or remote computer.

                 New-PSSession [[-ComputerName] <string[]>] [-
                 ApplicationName <string>] [-Authentication {<Default>
                 | <Basic> | <Negotiate> |
                 <NegotiateWithImplicitCredential> | <Credssp> |
                 <Digest> | <Kerberos>}] [-CertificateThumbprint
                   <string>] [-ConfigurationName <string>] [-Credential
                   <PSCredential>] [-Name <string[]>] [-Port <int>] [-
                   SessionOption <PSSessionOption>] [-ThrottleLimit
                   <int>] [-UseSSL] [<CommonParameters>]

                   C:\PS>new-PSSession -ConnectionURI
                   https://management.exchangelabs.com/Management



                   Description

                   -----------

                   This command creates a new PSSession that connects to
                   a computer that is specified by a URI instead of a
                   computer name.

Get-PSSession      Gets the Windows PowerShell sessions (PSSessions) in the
                   current session.

                   Get-PSSession [[-ComputerName] <string[]>]
                   [<CommonParameters>]

Remove-PSSession   Closes one or more Windows PowerShell sessions (PSSessions).

                   Remove-PSSession [[-ComputerName] <string[]>] [-
                   Confirm] [-WhatIf] [<CommonParameters>]

                   C:\PS>function EndPSS { get-pssession | remove-
                   pssession }



                   Description

                   -----------

                   This function deletes all of the PSSessions in the
                   current session. After you add this function to your
                   Windows Powershell profile, to delete all sessions,
                   just type "endpss".

Receive-Job        Gets the results of the Windows PowerShell background jobs in
                   the current session.

                   Receive-Job [-Job] <Job[]> [[-ComputerName]
                   <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

                   C:\PS>$s = new-pssession -computername Server01,
                   Server02, Server03



                   C:\PS> $j = invoke-command -session $s -scriptblock
                  {start-job -scriptblock {get-eventlog -logname
                  system}}



                  C:\PS> $j



                  Id   Name       State         HasMoreData      Location
                  Command

                  --   ----       -----         -----------      --------     ---
                  ----

                  1    Job1     Completed       True             Localhost
                  get-eventlog system

                  2    Job2     Completed       True             Localhost
                  get-eventlog system

                  3    Job3     Completed       True             Localhost
                  get-eventlog system



                  C:\PS> $results = invoke-command -session $s -
                  scriptblock {param($j) receive-job -job $j} -
                  ArgumentList $j

                  Description

                  -----------

                  This example shows how to get the results of background jobs run
                  on three remote computers.
Enter-PSSession   Starts an interactive session with a remote computer.

                  Enter-PSSession [-ComputerName] <string> [-
                  ApplicationName <string>] [-Authentication {<Default>
                  | <Basic> | <Negotiate> |
                  <NegotiateWithImplicitCredential> | <Credssp> |
                  <Digest> | <Kerberos>}] [-CertificateThumbprint
                  <string>] [-ConfigurationName <string>] [-Credential
                  <PSCredential>] [-Port <int>] [-SessionOption
                  <PSSessionOption>] [-UseSSL] [<CommonParameters>]

                  C:\PS>Enter-PSSession -computername Server01 -port 90
                  -credential domain01\user01



                  Server01\PS>
                 Description

                 -----------

                 This command starts an interactive session with the
                 Server01 computer. It uses the Port parameter to
                 specify the port and the Credential parameter to
                 specify the account of a user with permission to
                 connect to the remote computer.

Get-EventLog     Gets the events in an event log, or a list of the event logs, on the
                 local or remote computers.

                 Get-EventLog [-AsString] [-ComputerName <string[]>]
                 [-List] [<CommonParameters>]

                 C:\PS>get-eventlog -log system -username NT* | group-
                 object -property username -noelement | format-table
                 Count, Name -auto



                 Count Name

                 ----- ----

                  6031 NT AUTHORITY\SYSTEM

                    42 NT AUTHORITY\LOCAL SERVICE

                      4 NT AUTHORITY\NETWORK SERVICE



                 Description

                 -----------

                 This command returns the events in the system log
                 grouped by the value of their UserName property. The
                 Get-EventLog command uses the UserName parameter to
                 get only events in which the user name begins with
                 "NT*".

Clear-EventLog   Deletes all entries from specified event logs on the local or remote
                 computers.

                 Clear-EventLog [-LogName] <string[]> [[-ComputerName]
                 <string[]>] [-Confirm] [-WhatIf] [<CommonParameters>]




Write-EventLog   Writes an event to an event log.
                  Write-EventLog [-LogName] <string> [-Source] <string>
                  [-EventID] <int> [-Message] <string> [[-EntryType]
                  {<Error> | <Warning> | <Information> | <SuccessAudit>
                  | <FailureAudit>}] [-Category <Int16>] [-ComputerName
                  <string>] [-RawData <Byte[]>] [<CommonParameters>]




Limit-EventLog    Sets the event log properties that limit the size of the event log and
                  the age of its entries.

                  Limit-EventLog [-LogName] <string[]> [-ComputerName
                  <string[]>] [-MaximumSize <Int64>] [-OverFlowAction
                  {<OverwriteAsNeeded> | <OverwriteOlder> |
                  <DoNotOverwrite>}] [-RetentionDays <int>] [-Confirm]
                  [-WhatIf] [<CommonParameters>]




Show-EventLog     Displays the event logs of the local or a remote computer in Event
                  Viewer.

                  Show-EventLog [[-ComputerName] <string>]
                  [<CommonParameters>]




New-EventLog      Creates a new event log and a new event source on a local or
                  remote computer.

                  New-EventLog [-LogName] <string> [-Source] <string[]>
                  [[-ComputerName] <string[]>] [-CategoryResourceFile
                  <string>] [-MessageResourceFile <string>] [-
                  ParameterResourceFile <string>] [<CommonParameters>]




Remove-EventLog   Deletes an event log or unregisters an event source.

                  Remove-EventLog [-LogName] <string[]> [[-
                  ComputerName] <string[]>] [-Confirm] [-WhatIf]
                  [<CommonParameters>]




Get-WmiObject     Gets instances of Windows Management Instrumentation (WMI)
                  classes or information about the available classes.

                  Get-WmiObject [-Authority <string>] [-Amended] [-
                  AsJob] [-Authentication {<Default> | <None> |
                  <Connect> | <Call> | <Packet> | <PacketIntegrity> |
                  <PacketPrivacy> | <Unchanged>}] [-ComputerName
                    <string[]>] [-Credential <PSCredential>] [-
                    EnableAllPrivileges] [-Impersonation {<Default> |
                    <Anonymous> | <Identify> | <Impersonate> |
                    <Delegate>}] [-Locale <string>] [-Namespace <string>]
                    [-ThrottleLimit <int>] [<CommonParameters>]

Invoke-WmiMethod    Calls Windows Management Instrumentation (WMI) methods.

                    Invoke-WmiMethod [-Class] <string> [-Name] <string>
                    [[-ArgumentList] <Object[]>] [-AsJob] [-
                    Authentication {<Default> | <None> | <Connect> |
                    <Call> | <Packet> | <PacketIntegrity> |
                    <PacketPrivacy> | <Unchanged>}] [-Authority <string>]
                    [-ComputerName <string[]>] [-Credential
                    <PSCredential>] [-EnableAllPrivileges] [-
                    Impersonation {<Default> | <Anonymous> | <Identify> |
                    <Impersonate> | <Delegate>}] [-Locale <string>] [-
                    Namespace <string>] [-ThrottleLimit <int>] [-Confirm]
                    [-WhatIf] [<CommonParameters>]




Get-Process         Gets the processes that are running on the local computer or a
                    remote computer.

                    Get-Process [[-Name] <string[]>] [-ComputerName
                    <string[]>] [-FileVersionInfo] [-Module]
                    [<CommonParameters>]




Remove-WmiObject    Deletes an instance of an existing Windows Management
                    Instrumentation (WMI) class.

                    Remove-WmiObject [-Class] <string> [-Authentication
                    {<Default> | <None> | <Connect> | <Call> | <Packet> |
                    <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}]
                    [-Authority <string>] [-ComputerName <string[]>] [-
                    Credential <PSCredential>] [-EnableAllPrivileges] [-
                    Impersonation {<Default> | <Anonymous> | <Identify> |
                    <Impersonate> | <Delegate>}] [-Locale <string>] [-
                    Namespace <string>] [-AsJob] [-ThrottleLimit <int>]
                    [-Confirm] [-WhatIf] [<CommonParameters>]




Register-WmiEvent   Subscribes to a Windows Management Instrumentation (WMI)
                    event.

                    Register-WmiEvent [-Class] <string> [[-
                    SourceIdentifier] <string>] [[-Action] <scriptblock>]
                    [-ComputerName <string>] [-Credential <PSCredential>]
                  [-Forward] [-MessageData <psobject>] [-Namespace
                  <string>] [-SupportEvent] [-Timeout <Int64>]
                  [<CommonParameters>]

Get-Service       Gets the services on a local or remote computer.

                  Get-Service [[-Name] <string[]>] [-ComputerName
                  <string[]>] [-DependentServices] [-Exclude
                  <string[]>] [-Include <string[]>] [-RequiredServices]
                  [<CommonParameters>]




Set-Service       Starts, stops, and suspends a service, and changes its properties.

                  Set-Service [-Name] <string> [-Description <string>]
                  [-DisplayName <string>] [-PassThru] [-StartupType
                  {<Automatic> | <Manual> | <Disabled>}] [-Status
                  <string>] [-ComputerName <string[]>] [-Confirm] [-
                  WhatIf] [<CommonParameters>]




Set-WmiInstance   Creates or updates an instance of an existing Windows
                  Management Instrumentation (WMI) class.

                  Set-WmiInstance [-Class] <string> [[-Arguments]
                  <hashtable>] [-Authentication {<Default> | <None> |
                  <Connect> | <Call> | <Packet> | <PacketIntegrity> |
                  <PacketPrivacy> | <Unchanged>}] [-Authority <string>]
                  [-ComputerName <string[]>] [-Credential
                  <PSCredential>] [-EnableAllPrivileges] [-
                  Impersonation {<Default> | <Anonymous> | <Identify> |
                  <Impersonate> | <Delegate>}] [-Locale <string>] [-
                  Namespace <string>] [-AsJob] [-PutType {<None> |
                  <UpdateOnly> | <CreateOnly> | <UpdateOrCreate>}] [-
                  ThrottleLimit <int>] [-Confirm] [-WhatIf]
                  [<CommonParameters>]




Get-HotFix        Gets the hotfixes that have been applied to the local and remote
                  computers.

                  Get-HotFix [[-Id] <string[]>] [-ComputerName
                  <string[]>] [-Credential <PSCredential>]
                  [<CommonParameters>]

Test-Connection   Sends ICMP echo request packets ("pings") to one or more
                  computers.

                  Test-Connection [-ComputerName] <string[]> [[-Source]
                   <string[]>] [-AsJob] [-Authentication {<Default> |
                   <None> | <Connect> | <Call> | <Packet> |
                   <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}]
                   [-BufferSize <int>] [-Count <int>] [-Credential
                   <PSCredential>] [-Delay <int>] [-Impersonation
                   {<Default> | <Anonymous> | <Identify> | <Impersonate>
                   | <Delegate>}] [-Quiet] [-ThrottleLimit <int>] [-
                   TimeToLive <int>] [<CommonParameters>]

Restart-Computer   Restarts ("reboots") the operating system on local and remote
                   computers.

                   Restart-Computer [[-ComputerName] <string[]>] [[-
                   Credential] <PSCredential>] [-AsJob] [-Authentication
                   {<Default> | <None> | <Connect> | <Call> | <Packet> |
                   <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}]
                   [-Force] [-Impersonation {<Default> | <Anonymous> |
                   <Identify> | <Impersonate> | <Delegate>}] [-
                   ThrottleLimit <int>] [-Confirm] [-WhatIf]
                   [<CommonParameters>]




Stop-Computer      Stops (shuts down) local and remote computers.

                   Stop-Computer [[-ComputerName] <string[]>] [[-
                   Credential] <PSCredential>] [-AsJob] [-Authentication
                   {<Default> | <None> | <Connect> | <Call> | <Packet> |
                   <PacketIntegrity> | <PacketPrivacy> | <Unchanged>}]
                   [-Force] [-Impersonation {<Default> | <Anonymous> |
                   <Identify> | <Impersonate> | <Delegate>}] [-
                   ThrottleLimit <int>] [-Confirm] [-WhatIf]
                   [<CommonParameters>]
Guide om standard administrering av AD med Powershell

Intro til guiden
Denne guiden gjelder storsett om Windows 2008 Active Directory R2.

Enkelte delar av guiden handlar om Windows 2008 Active Directoy, sidan til dømes ting som har med
ADSI har blitt oppgrader til eigne objekt i R2. Den nyttige delen her er LDAP filter, og enkle
kommandoar i AD R2.

I denne guiden skal vi sjå om korleis du kan gjere enkelte av jobbane du er vant med og gjere i AD
korleis du kan gjere dei i Windows PowerShell 2.0.

Visst du er ny til powershell 2.0 kan du sjå vår intro til bruk av powershell.



Koble opp mot AD
Vi startar med noko nødvendig å kunne koble opp mot active Directory ved og bruke Windows
PowerShell, du bruker då Active Directory Services Interfaces (ADSI) og Lightweitght Directory Access
Protocol(LDAP). Dette hørest kanskje litt komplisert ut men det er veldig enkelt, og nyttig og huske.
Vi kan finne alle brukernamn (sAMAccountNamne attributt) til alle objekt i domenet ditt, til dømes:
$objADSI = [adsi]‛‛
$domain = $objADSI.distinguishedname
$userContainer = [adsi](‚LDAP://cn=users,‛ + $domain)
foreach($child in $userContainer) {
Write-Host $child.samaccountname
}
Den første linja er ein veldi enkel måtte og definer ein ADSI koplinga. Ein tom streng fortelje berre
ADSI at den skal koble til standard root directory entry. Du kan bruke denne koda til og dynamisk
skaffe DN for domenet ved og aksesere distinguishedName property. Denne teknikken er veldig stillig
fordi du ikkje trenger og hard-kode domenets DN, som ogso betyr at du kan gi dette scriptet til noken
andre og han kan kjøre det på sitt domenet utan modifikasjonar. På vårt testområdet blir verdien
noko liknande; DC=14e-DC,DC=LOCAL.
Du trenger domene namnets DN fordi det er ein del av kvar DN for kvart objekt i Active Directory. So
derfor vil du ha denne informasjonen lagra i ein variabel ein plass so du kan bruke den enkelt – som
er nøyaktig kva du gjer i neste del. For å etablere ein kopling til domain’s user container, kan du kjøre
denne biten med kode:
$userContainer = [adsi](‛LDAP://cn=users,‛ +$domain)
Denne koden koplar til objektet via LDAP og lagrar referanse til det objektet i $userContainer. Dette
er der det er nyttig å ha det domenet DN dynamisk fylt og lagra som ein variabel. Visst
containeren(behaldaren) er vel kjent, som bruker behaldaren, vil ei linje som dette fungere for alle
uansett kva deira domene namne er. Brukar behaldaren innehelde mange forskjellige ting, og du kan
loope gjennom dei ved og bruke ein enkel foreach løkke. Denne løkka loopar gjennom kvar ting i
behaldaren og visse verdiane til sAMAccountName attributtet, som i dette dømet:
foreach($child in $userContainer) {
Write-Host $child.samaccountname
}
Du kan bruke lowercase – samaccountname – når du refererer til attributtet i Windows PowerShell
direkte, sjølv om den aktuelle attributtet innehelder ein mix av teikn størrelsar. Dette var ganske
enkelt og det er mykje enklare enn og bruke VBScript.
Spørje etter objekt og attributta
Spørje Active Directory etter forskjellige bitar av informasjon er hovuddelen av operasjonane som blir
gjort på ein reguler basis. Dette kjøme av at Active Directory er designa til å være ein sentral lagrings
katalog som lagrar mange forskjellige typar informasjon. Det er ofte brukt som ein autoritær kjelde
for brukar informasjon spesielt visst du brukar produkt som er tungt integrert med det. Mange av
Microsoft produkt integrerer med Active Directory for og bruke den som ein kjelde for brukarnamn,
gruppe informasjon og anna viktig brukar informasjon den blir til og med brukt som ein
autentiserings kjelde

For å spørje Active Directory etter objekt eller attributt informasjon, trenger du og følgje desse stega:

    1. Skaff ein referanse til DirectoryEntry der du vil starte søket ditt. (Denne referansen kan være
       rooten til domenet eller ein bestemt OU(organization Unit)).
    2. Lag ein ny System.DirectoryServices.DirectorySearcher objekt, ved og bruke DirectoryEntry
       objektet frå det føregåande steget.
    3. Definere eit spørje filter. (dette filteret definerar kriteria for søket ditt og kan være litt
       vanskelig fordi du må vite ein del om syntaxten til eit LDAP filter.(vi tar dette om litt)
    4. Definer eit område (dette området kontrollerar om spørjinga er for kunn objekt i søks root’a
       eller i det påfølgande subtreda ogso.
    5. Kjør søket, bruk FindOne eller FindAll metoden. (Visst søket returnerar resultat, hent ut
       DirectoryEntry (i tilfelle med FindOne) eller loop gjennom resultat og hent DirectoryEntry(i
       tilfelle med FindAll).

Vi følgjar no opp med eit enkelt script som spør Active Directory for den første og siste namnet til alle
brukar kontoane som har verdiar for desse attributtane:

$objADSI = [adsi]‛‛
$domain = $objADSI.distinguishedname
$objDomain = [adsi](‚LDAP://‛ + $domain)
$search = New-Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $objDomain
$search.Filter = ‚(&(objectClass=user)(givenName=*)(sn=*))‛
$search.SearchScope = ‚Subtree‛
$results = $search.FindAll()
foreach($item in $results)
{
$objUser = $item.GetDirectoryEntry()
Write-Host ($objUser.displayname)
}


Du har allereie sett den første delen av denne koden, men eg vil at du skal sjå litt nærmare på den
delen der DirectorySearcher objektet blir sett opp. New-Object Cmdlet blir brukt for å lage ein ny
System:directoryServices.DirecorySearcher objekt. No som du har ein DirectorySearcher objekt, kan
du konfigurere dei forskjellige eigenskapane. Den første er SearchRoot, som definerar DirectoryEntry
kor DirectorySearcher vil byrje søket sitt. I dette tilfelle vil du at den skal søke heile katalogen.
Den neste delen er Filter. Visst du ikkje forstår denne delen enda so skal vi forklare den seinare. Kort
sagt, filter ser etter alle objekt som har ein objektklasse av bruker og nokon verdi for både
givenName (første namnet) og sn(etternamnet) attributta.

Endelig, setter du SearchScope til ”Subtree”, som betyr at du vil søke igjen om søksroota og alle
undermapper den har. (eit recursive search).

No som DirectorySearcher er satt opp, kan du bruke FindAll metoden for å gjere søket. Alt som er
igjen er og loope gjennom resultata og hente ut displayName. Objekta som blir returnert av søket er
ikkje DirectoryEntry objekt. For å faktisk få tilgang til dei, må du bruke GetDirectoryEntry metoden.
Visst du har mange brukarar i domenet vil du kanskje legge merke til at ikkje alle brukarane blir
returnert. For sikkerheits grunner, definerar Microsoft eit maksimum resultat på 1000 innlegg. Denne
avgrensinga beskyttar veldig store katalogar frå vandrande søk som forsøker og hente fleire verdiar
enn forventa (som eit feilaktig søk filter som returnerar 100 000 resultat når du forventa at den skulle
hente tilbake berre 5). For å omgå AD spørjing avgrensinga, må du side(page) resultat, som betyr at
du må hente inn resultata i bitter definert av side størrelsen. Dette nummeret bør ikkje være meir
enn maksimum tillat av AD. Denne kode biten setter PageSize som 1000 som betyr at spørjinga ikkje
vil prøve og hente ut meir enn 1000 resultat omgongen:

$search.PageSize = 1000



Skaping av LDAP filteret ditt.
LDAP filter er veldig mektige verktøy fordi dei gir deg evna til og definere nøyaktig kva du leiter etter
når du sender ei spørjing i AD. Nedsida med dette er at syntaksen tar litt tid og bli vant til, derfor
startar vi med og visse korleis du lager dine eigene LDAP filter.

Definere eit enkelt filter
Eit enkelt filter består av ein betingelse du sjekkar for å sjå om ein gitt attributt er lik ein spesifikk
verdi og er i dette formatet:

(attribute=value)

Attributt namnet er case sensitive, so visst du prøvar å sjå om brukarnamnet(samaccountname) er
likt eit spesifikt brukarnamn, må du skrive attributt namnet på same måtten som den ser ut i Active
Directory, som i dette dømet:

(sAMAccountName=sseguis)



Bruk av jokerteikn

Ofte vil du matche eit spesifikt mønster i staden for ein spesifikk verdi, du kan gjere dette med å
bruke jokerteikn. Jokerteiknet er asterisk teiknet(*), dette kan bli brukt til og samanlikne mønster.
Visst du brukar jokerteiknet åleine, betyr det at den samanlikna alle objekt som har ein verdi for den
attributtet, som alle objekt der e-mail adressa ikkje er blank dømet følgjar:

(mail=*)
Her er korleis du kan samanlikne kva som helst objekt med eit vanlig namn(common name(cn)) som
startar med s:

(cn=s*)

Du kan ogso putte jokerteiknet i starten for å finne treff der samaccountname sluttar i svc, slik som i
dette dømet:

(sAMAccountName=*svc)

Du kan til og med bruke jokerteiknet i midten. Her er korleis det ser ut for alle objekt som har eit
display name som startar og endar med s:

(displayName=s*s)

Endelig visst du føler deg litt eventyrlysten kan du legge jokerteikna der du vil. Her er eit generelt
jokerteikn søk som finner objekt der mail attributtet innehelder eit punktum (.) og eit (@) symbol,
men punktumet må kome før @ symbolet:

(mail=*.*@*)

Benektig i filteret
Der er mange gangar du vil finne noko som ikkje passer til ein spesifikk kondisjon. Til dømes må du
kanskje ha ein namne konvensjon som krevjar at brukarnamna til alle teneste kontoar skal ende i
srvc. For å ekskludere desse brukarnamna frå ei spøring, må du lagge eit filter som passar objektet
der samaccountname sluttar i srvc og so benekte det. Du benketar ein påstand ved å bruke
utropsteiknet (!) vi visser det i dømet under:

(!(sAMAccountName=*srvc))

Benektinga skjer utanfor filteret, so du kan definere det matchande filteret og lukke det i parentesar,
og putte eit utropsteikn framfor det, so lukke heile tingen i parentesar.

Kombinere filter vilkår
I den verkelige verdene LDAP filter brukar vanlegvis å bestå av fleire vilkår, til dømes gjere seg sikker
at objectClass er user og at mail attributta har ein verdi. Du kan bruke Boolean and, and or
kondisjonane når kombinerer forskjellige filter vilkår. Teikna brukt av Boolean and er (ampersand)
teiknet (&) mens symbolet for Boolean or er pipe teiknet (|). Her er korleis du puttar saman eit filter
som sjekkar for å sjå om objektClass er user og at mail attributtet startar med bokstaven a:

(&(objektClass=user)(mail=a*))

Du legger merke til at alt du må gjere er å definere dei to filter vilkåra du vil ha ogso kombinere dei
ved og bruke &-teiknet. Det som er interessant er at ampersand teiknet ikkje skal plasserast mellom
dei to termen, som du kanskje kan forvente, men at det skal stå i starten, og at heile kombinerte
filteret er innekapsla i parentesar. Du må putte denne operatoren framfor termane som skal
kombinerast. Bruk av Boolean or verkar på ein liknande måte. Vi tar eit dømet der vi er interessert i
brukar sitt fornamen (givenName) startar med enten a eller s:

(|(givenName=a*)(givenName=s*))
Det er enkelt nok

Dette var enkelt nok. Men kva om du vil ha meir enn to vilkår kombinert? Alt du trenger å gjere er og
legge til dei ekstra vilkåra. Vi tar nå eit døme der vi legger til kondisjonen at det etter namnet (sn)
startar med ein s inn i koden, det ser nå slik ut:

(&(objektClass=user)(mail=a*)(sn=s*))

Du kan til og med mikse slik du vil med både and, or og negativ operatorer. Vi tar nå eit døme, men
denne koden kan virke litt forvirrande, men den blir lett og forstå visst du brytte den opp men først
ser vi på kode dømet:

(|&(objectClass=user(!(mail=a*)))(&(objectClass=person)(sAMAccountName=a*))
)

Det viktige i dømet over er at du må huske kvar du opnar og lukker parentesar so du forstår kva vilkår
som påverkar kva i forhold til kvarandre. Det første du legger merke til er den første operatoren du
møter er Boolean or. Dette betyr at du sjekkar etter kondisjon som kan passe til ein av dei to vilkåra.
Visst du ser nøye etter på dei matchande parentesane, vil du finne ut at koda gjennomfører ein or
operasjon på desse to vilkåra:

(&(objectClass=user(!mail=a*)))

(&(objectClass=person)(sAMAccountName=a*))

Det første termen brukar boolean and for å bli sikker på at begge vilkåra er sanne. Den første
påstanden er enkel, sidan den gjer det sikkert at objectClass er ein user. Den andre påstanden sjekkar
om mail attributtet startar med a, men fordi den er innkapsla med ein negativ operator, heile denne
setninga betyr at objectClass må være ein user og at mail attributtet ikkje må starte med ein a. Den
andre termen er ein enkel Boolean and som gjer det sikkert at objectClass er person og at username
startar med a.

Det viktigaste du får ut av dette dømet er at du ikkje bør la deg sjølv bli skremt av longe filter termar;
du trenger berre og dele dei opp i delar du sjølv finner akseptable for å forstå dei. Det same kan
gjerast når du skal lage eit veldig komplekst filter, då er det best og brytte den opp i delar som er
enkle og ha med og gjer. Når du har kontroll kan du sette delane saman til den store og komplekse
filteret.

Visst dette var spennande og du vil ha meir informasjon/detaljer, so kan du lese om det på Request
for Comment(RFC) 4515 (http://tools.ietf.org/html/rfc4515) og RFC 3687
(http://tools.ietf.org/html/rfc3687) so kan du få meir



Sjekking av userAccountControl eigenskapar
Ein kritisk attributt til ein brukar konto er userAccountControl attributtet. Denne attributtet er kritisk
fordi den definerar kva type konto objektet er saman med kva sikkerheits restriksjonar og untakk den
har, som om kontoen er låst eller kopla ut. Men i motsetning ti enkle attributta som givenName, sn
og sAMAccountName. So er userAccoutControl attributtet ein gruppe med bits, der kvar bit
representerar eit bestemt flag (true= 1 eller false=0, til dømes). Eit flag er ein term gitt til ein verdi
som indikerar om noko er bestemt (verdien satt til 1) eller ikkje (verdien satt til 0). Vi følgjar no opp
med ein tabell som innehelde ei liste over mulige flag som du kan sette for denne attributtet.

Property Flag                                         Value

SCRIPT                                                1

ACCOUNTDIABLED                                        2

HOMEDIR_REQUIRED                                      8

LOCKOUT                                               16

PASSWD_NOTREQD                                        32

PASSWD_CANT_CHANGE                                    64

ENCRYPTED_TEXT_PWD_ALLOWED                            128

TEMP_DUPLICATE_ACCOUNT                                256

NORMAL_ACCOUNT                                        512

INTERDOMAIN_TRUST_ACCOUNT                             2048

WORKSTATION_TRUST_ACCOUNT                             4096

SERVER_TRUST_ACCOUNT                                  8192

DONT_EXPIRE_PASSWORD                                  65536

MNS_LOGON_ACCOUNT                                     131072

SMARTCARD_REQUIRED                                    262144

TRUSTED_FOR_DELEGATION                                524288

NOT_DELEGATED                                         1048576

USE_DES_KEY_ONLY                                      2097152

PASSWORD_EXPIRED                                      8388608

TRUSTED_TO_AUTH_FOR_DELEGATION                        16777216

Dette var kanskje litt forvirrande vi skal no forklare det litt betre. Visst du ser på UserAccountControl
attributtet for dei fleste brukar kontoar, so er verdien 512, dette betyr at den er ein vanlig konto.
Visst kontoen blir deaktivert so er verdien 514, fordi ein vanlig konto er 512 og ACCOUNTDISABLE
flaget er 2, so når du legger til vanlig konto 512 ilag med deaktivert 2 so får du 514. Som du ser blir
tabellen over eit nyttig verktøy. Du kan blant anna raskt finne ut at ein konto er låst, fordi verdien vil
være 528 (NORMAL_ACCOUNT + LOCKOUT), so du skriver eit LDAP filter som ser noko liknande
dette:
(&(objectClass=user)(userAccountControl=528))

Denne koden fungerar for dette scenarioet, men problemet er at ting ikkje alltid er so enkle. Visst
andre flag er setje, som SMARTCARD_REQUIRED, kan verdien bli 528+262144 eller 262672. Gitt heile
spekteret av verdiar kan bli lagt saman til ein match, det du er interessert i er om bit nummer
6(verdien 16) er satt. Du gjer dette med å gjennomføre ein bitwisa AND på verdien til
userAccountControl med verdien du er interessert i, som 16. Den resulterande verdien vil bli være
sann visst den er satt, elles vil resultatet være falskt. Denne koda hørest mykje meir forvirrande enn
den eigentlig er, so vi går rett til dømet av ein filter streng som ser etter låste kontoar.

(&(objecClass=user)(userAccountContro:1.2.840.113556.1.4.803:=16))

Den nye og spennande delen her er so klart den bakarste delen

(userAccountContro:1.2.840.113556.1.4.803:=16)

Denne rare verdien, 1.2.840.113556.1.4.803 er LDAP versjonen til bitwise AND. Kva heile strenge sei
er at du vil gjennomføre ein bitwise AND operasjon på verdien til userAccountControl med verdien
16(LOCKOUT). Denne koda returnerar true visst og berre visst denne verdien er satt. No visst du vil
finne alle deaktiverte kontoar, kan du berre bytte ut 16 med 2(ACCOUNTDISABLE), og koda vil
fungere.

Bitwise AND sammenlignar to verdiar i binærkode. Berre visst bits er begge satt til 1 blir resultatet lik
1. Grunnen til at denne operatoren kan sjekke for å sjå om eit bestemt flag er satt er at visst du
bitwise AND to nummer og den resulterande verdien er nonzero, skjer det definitivt ein match i
minst ein av dei to nummera. For å forstå denne situasjonen litt betre, tenk på userAdccountControl
verdien 528. Du veit at LOCKOUT flag verdien er 16(sjå tabellen) Du vil sjekke om LOCKOUT flaget er
satt i den userAccountControl verdien. For å gjere dette, gjennomfører du ein bitwise AND på to
verdiar, det ser slik ut:

1000010000 (528 in binary)
0000010000 (16 in binary)
----------
0000010000 (result)
Du simpeltent setter opp binary verdiane, og når du ser at begge verdiane er 1, putta du 1 i
resultatet. Fordi resultatet inneheld 1 einplass, fant koda ein match til LOCKOUT flaget, so kontoen
må være låst.



Dynamisk anskaffing av ein brukars distinguishedName
Sjølv om det er veldig enkelt og referer til brukaren ved og bruke usernames eller andre attributta i
AD brukar kontoen deira, når du skal påverke AD med bruk av ADSI’s LDAP leverandøren må du ofte
referer til brukar objektet med distingusihedName(DN) heller enn brukarnamnet. Denne prosessen
kan være nokso slitsamt, fordi ettersom korleis du organiserar Aden din, kan brukar objekt flytte få
ein behaldar til ein anna, dermed forandre deira DN. Du he kanskje eit script som brukar ein bestemt
brukar konto og kan hardkode DN til det objektet, men visst DN’en endrar seg vil ikkje scriptet
fungere lengre.
Det er mykje enklare å generere DN dynamisk basert på eit AD søk for ein bestemt attributt, som
logon namnet (sAMAccountName). Her er ein veldig enkel funksjon som du kan ombruke i alle script
for å gjere akkurat det.

function GetUserDN([string]$username) {
$objADSI = [adsi]‛‛
$domain = $objADSI.distinguishedname
$objDomain = [adsi](‚LDAP://‛ + $domain)
$search = New-Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $objDomain
$search.Filter = ‚(sAMAccountName=$username)‛
$search.SearchScope = ‚Subtree‛
$result = $search.FindOne()
if ($result -eq $null) {
return $null
} else {
return $result.GetDirectoryEntry().distinguishedName
}
}
Denne funksjonen returnerar DN for det gitte brukarnamnet eller $null visst den ikkje kan finne
DNen. Visst du puttar denne funksjonen i eit av scripta din, kan du bruke den slik:

$username = ‚administrator‛
$userDN = GetUserDN($username)
if ($userDN -eq $null) {
Write-Host (‚Unable to find ‚ + $username)
} else {
Write-Host ($username + ‚ - ‚ + $userDN)
}
Du kan modifisere GetUserDN funksjonen for og imøtekomme andre objekt. Som datamaskiner,
grupper eller kontaktar. Dette gjerast enkelt med å endre DirectorySearcher filter kriteria og justere
din funksjonens parameter deretter.



Modifisere objekt attributta
Modifisere objekt attributtar i Active Directory ved å bruke Windows PowerShell er mykje enklare
enn man skulle tru. Den består av tre steg:

    1. Skaffe ein DirectoryEntry objekt som representerar det objektet du vil modifisere
    2. Bruk DirectoryEntry objektets put metode til å gi den ny verdi
    3. Gjer endringande ved å bruke SetInfo metoden.

For å demonstrere kor enkelt denne prosessen er kjemme vi med eit enkelt script som endrar
brukarens fornamn, etternamn, display name og beskriving:

$user = [adsi]‛LDAP://CN=testuser,ou=test,dc=testlab,dc=local‛
$user.put(‚givenName‛,‛Chris‛)
$user.put(‚sn‛,‛Laile‛)
$user.put(‚displayName‛,‛Laile, Chris‛)
$user.put(‚description‛,‛Master of Disaster‛)
$user.SetInfo()
Sjølv om eg velger å bruke user objektet i dette dømet, fungerar den same prosedyren for grupper og
organization units, enkelt sagt for alle objekt i Active Directory. Put metoden tar attributt namnet
som første parameter og verdien som den andre parameter. Du kan kunn endre attributta som
faktisk eksisterar for den typen objekt du gjer endringar på. Visst du prøver å endre ein attributt som
ikkje eksisterar, vil det komme opp ein feilmelding.

Attributt namna sjølv er ikkje case sensitive, sjølv om det er anset som god haldning å bruke case-
sensitive attributt namn so du blir vant med dei for du trenger namna til ting som LDAP filter. Det blir
ogso lettare og sjå kva som står der. SetInfo metoden gjer det faktiske arbeidet i å gjere endringar i
Active Directory. Visst du glømmer dette steget vil du finne ut at det ikkje er gjort nokon endringar i
Active Directory, sjølv om Windows PowerShell ikkje klagar, fordi alle eigenskap endringane du gjer
er gjort i minnet i ein cached mode. Kunn når du kallar på SetInfo metoden etter å gjere endringa i eit
objekt er dei endringane gjort til Active Directory



Oppdatering av Group Membership
Sjølv om du kan handtere alle attributta ved og bruke put metoden, so er ikkje prosessen like enkelt
når det kjemme til group membership. Generelt når du skal gjere ting manuelt har du to måtter og
fjerne ein brukar frå ei gruppe: opne gruppa og fjern brukaren som ein av brukarane, eller opne
brukar og fjerne gruppa frå lista av brukarens gruppe. Den enklaste måtten og legge til ein brukar til
ei gruppe på er og manipulere gruppa direkte ved å bruke ADSI, som vi viser no:

$user = ‚cn=testuser,ou=test,dc=testdom,dc=local‛
$group = [ADSI]‛LDAP://cn=MyGroup,cn=Users,dc=testdom,dc=local‛
$group.add(‚LDAP://‛ + $user)
$group.SetInfo()
Når du skal legge til ein brukar til ei gruppe, du må spesifiser heile DN for brukar objekta. Praktisk
sett er det ikkje enkelt og huske den nøyaktige DN til bruka objektet du vil legge til, derfor kan du
bruke til dømes GetUserDN funksjonen for å dynamisk hente objekts DN for deg.

Du kan fjerne ein brukar frå ei gruppe like enkelt som du la til ein brukar i gruppa. Faktisk kan du
bruke nesten den same koda, du må bytte ut add metoden med add metoden, som visst i dømet
under:

$user = ‚cn=testuser,ou=test,dc=testdom,dc=local‛
$group = [ADSI]‛LDAP://cn=MyGroup,cn=Users,dc=testdom,dc=local‛
$group.remove(‚LDAP://‛ + $user)
$group.SetInfo()
Enkle AD kommandoar i Windows 2008 R2 Server
Vi skal no sjå på ein del av AD sine cmdlets og enkle kommandoar du kan bruke i powershell.

User Management

Modifisere ein attributt for fleire brukar på eingong.
Vi følger no opp med eit døme der vi skal hente brukar objekta i OUen Finance og sette description
attributt:

Get-ADUser –Filter ’Name –like ”*” –SearchBase ”OU=Finance,OU=UserAccounts,DC=14e-
DC,DC=local” | Set-ADUser – Description ”Medlem av Finance Department”

Tilleggsinformasjon;

Du kan bruke følgande parameter når du skal sette mange av dei vanlige verdiane som er assosiert
med brukar objektet i AD DS: (vi har valgt og skille dei forskjellige parametera med komma).

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath , -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

I tillegg til standard Lightweigth Directory Access Protocol (LDAP) attributtar, kan du hente følgande
av dei kommande utvida eigenskapane til Get-ADUser cmdlet ved og bruke –Properties parameteret:

City, Country, EmailAddress, Fax, LogonWorkstations, MobilePhone, Office, OfficePhone,
Organization, OtherName, POBox, SmartcardLogonRequired, State, Surname

For ein full forklaring på parameter som du kan sende til Set-ADUser eller Get-ADUser i Active
Directory modul kommando promten. Kan du skrive Get Help Set-ADUser –detailed eller
Get-Help Get-ADUser –detailed, trykk so ENTER.



Setje ein brukars Profil Attributta
Dette emnet forklarer korleis du brukar AD modul for Windows PS for å setje ein brukars profile
attributta. Dømet under demonstrear korleis du kan setje profil attributta til brukaren SaraDavis:

Set-ADUser SaraDavis -ProfilePath ‛\\14e-srv1\profiles\%username%‛ -
ScriptPath ‛logon.vbs‛ -HomeDrive ‛Z‛ -HomeDirectory ‛\\14e-srv1\saradavis‛

Du kan bruke følgande parametters når du skal setje mange av dei vanlige verdiane som er assosiert
med user objektet i Active Directory Domain Services (AD DS):
-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation , -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring av parametera, som du kan sende til Set-ADUser, på AD Modul kommando
prompt, kan du skrive Get-Help Set-ADUser –detailed, og so trykke ENTER



Flytte ein brukar
Vi skal no visse korleis du brukar AD module i Win PS for å flytte ein brukar til ein anna organizational
unit(OU), vi viser eit døme under:

Get-ADUser SaraDavis | Move-ADObject -TargetPath ‛OU=Finance,DC=14e-
DC,DC=local‛

I tillegg til standard LDAP attributtar, kan du hente dei følgande utvida eigenskapane til Get-ADUser
cmdlet ved og bruke Properties parametteren:

City, Country, EmailAddress, Fax, LogonWorkstations, MobilePhone, Office, OfficePhone,
Organization, OtherName, POBox, SmartcardLogonRequired, State, Surname

For ein betre forklaring av parameteren som du kan sende til Get-ADUser eller Move-ADObject,
på AD modul kommando prompt, skriv inn Get-Help Get-ADUser –detailed eller Get-Help
Move-ADObject -detailed og trykk ENTER.

Skifte namn på ein brukar
Vi skal no sjå på korleis du skifter namn på ein brukar. Vi skal no sjå på eit døme på korleis du skiftar
relative distinguished name(ogso kjent som RDN) til brukaren Sara Davis til Sara Hettich:

Rename-ADObject ‛CN=Sara Davis,OU=Finance,DC=14e-DC,DC=local‛ -NewName
'Sara Hettich'

For ein full forklaring på parametter som du kan sende til Rename-ADObject, i ADmcp(Active
Directory module command prompt) skriv inn, Get-Help Rename-ADObject –detailed og
trykk ENTER.



Kopier ein brukars eigenskaper
Dette emne forklarer korleis du kan bruke ADm for win PS og kopiere eigenskapar frå ein brukar til
ein annen brukar. Vi visser no eit døme script der vi kopierar eigenskapne til brukaren Sara Davis til
brukaren Miles Reid:
$u=Get-ADUser -Identity Sara Davis -Properties *

New-ADUser -Instance $u -SamAccountName Miles Reid

Du kan bruke dei følgjande parameteren når du sette mange av dei vanlige verdiane som er assosiert
med å lage ein ny brukar i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation , -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description , -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress , -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title , -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

I tillegg til standard LDAP attributtar, kan du hente dei følgande utvida eigenskapane til Get-ADUser
cmdlet ved og bruke –Properties parameter:

City, Country, EmailAddress, Fax, LogonWorkstations, MobilePhone, Office, OfficePhone,
Organization, OtherName, POBox, SmartcardLogonRequired, State, Surname

For ein full forklaring på kva parametera som du kan sende til New-ADUser eller Get-ADUser, i AD
module kommando prompt, skriv inn Get-Help New-ADUser –detailed eller Get-Help Get-
ADUser –detailed trykk so ENTER.



Finne brukarar som er låst ute
Som du kanskje huskar visste vi ein metode og finne brukarar som er låst ute tidligare det var i win
2008 før R2 nå skal vi visse korleis du kan gjere det i R2. Vi visser korleis vi finner brukarer som er låst
ute i 14e-DC.local, sjå i dømet under:

Search-ADAccount -LockedOut | where {$_.ObjectClass -eq 'user'} | FT
Name,ObjectClass -A

For ein full forklaring på parameter som du kan sende til Search-ADAccount, i ADmcp, skriv inn
Get-Help Search-ADAccount –detailed og trykk ENTER.



Setje ein brukars passord
Dette emne forklare korleis du brukar AD modulen for Win PS til å setje ein brukars passord, vi visser
nå i dømet under korleis du setter passord for brukar kontoen U1:

Set-ADAccountPassword –Identity U1 -Reset -NewPassword (ConvertTo-
SecureString -AsPlainText "p@ssw0rd" –Force)
For full forklaring på kva parameter du kan sende til Set-ADAccountPassword, i ADmcp, skriv inn
Get-Help Set-AdAccountPassword –detailed.



Låse opp ein brukars konto
Dette emnet forklarer korleis du brukar AD module for Win PS for å låse opp brukarar som er låst ute
av systemet. Vi kjeme no med eit døme der vi demonstrear korleis du låser opp brukar kontoen til U1
i OUen Test i 14e-ad.local:

Unlock-ADAccount -Identity "CN=U1,OU=Test,DC=14e-DC,DC=local"

For en full forklaring på parameteren som du kan sende til Unlock-ADAccount i ADmcp skriv inn
Get-Help Unlock-ADAccount –detailed, Trykk so ENTER.



Konto lockout og passord policies
Dette emne forklarar korleis du brukar AD modul for Win PS til å sjå account lockout og passord
polices til brukarar. Dømet visser korleis du ser på overnemnte til SaraDavis:

Get-ADUserResultantPasswordPolicy -Identity SaraDavis

For full forklaring på parameteren som du kan sende til Get-ADUserResultantPasswordPolicy,
i ADmcp skriv inn Get-Help Get-ADUserResultantPasswordPolicy –detailed, og trykk
ENTER.



Aktivere og deaktiver ein brukar konto
Dette emnet forklarer korleis du brukar AD module for Win PS til å enable og disable user
accounts(aktivere og deaktivere brukar kontoar). Vi har to dømer eit for aktivering og eit for
deaktivering, vi brukar SaraDavis begge gangane:

Døme 1

Enable-ADAccount -Identity SaraDavis

Døme2

Disable-ADAccount -Identity SaraDavis

For ein full forklaring på parameter som du kan sende til Enable-ADAccount eller Disable-
ADAccount, i ADmcp skriv inn Get-Help Enable-ADAccount –detailed eller Get-Help
Disable-ADAccount –detailed, og trykk då ENTER.
Lagge ein UPN suffiks(suffix) til ein Skog(Forest)
Dette emnet forklarer korleis du brukar AD modulen for Win PS for å lage ein ny brukar principal
name(UPN(user principal name)) suffiks for brukarane i ein skog(Forest). Å lage ein ekstra UPN suffiks
hjelper å simplifisere namnet som er brukt til og logge på eit anna domene i skogen. I følgande døme
demonstrear vi korleis du lager eit nytt UPN suffiks (vi kallar det NYTT) for brukarane i 14e-DC.local:

Set-ADForest -UPNSuffixes @{Add="NYTT.14e-DC.local"}

Du kan setje dei følgjande parameter når du skal setje mange av dei vanlige verdiar som er assosiert
med Forest management i AD DS:

-SPNSuffixes, -UPNSuffixes

For ein full forklaring av parameter som du kan sende til Set-ADForest i ADmcp skriv inn Get-
Help Set-ADForest –detailed og trykk ENTER.



Lokalisere deaktiverte brukar kontoar
Dette emnet forklarer korleis du brukar AD module for Win PS for å finne brukarar der kontoen deira
er deaktivert. Vi såg på dette tidligare men det var før R2 vi visser nå korleis det gjerast med R2.
Dømet vi komer med visser korleis du kan finne brukarar med deaktiverte kontoar(diabled accounts)
i domenet.

Search-ADAccount -AccountDisabled | where {$_.ObjectClass -eq 'user'} | FT
Name,ObjectClass –A

For full forklaring på kva paramater du kan sende til Search-ADAccount, i ADmcp, skriv inn Get-
Help Search-ADAccount –detailed og trykk ENTER.



Sjå på ein brukars Managed Objects
Dette emnet forklarer korleis du brukar AD module for Win PS for å sjå ein brukars managed objekts.
Managed objects som brukaren eige i AD DS, som ein OU eller ei gruppe. Dømet demonstrer korleis
du kan sjå managed objects for brukaren JaneDow:

Get-ADUser JaneDow -Properties ManagedObjects

I tillegg til standard LDAP attributta kan du hentar dei følgjande utvida eigenskapane til Get-ADUser
cmdlet ved og bruke –Properties parameter:

City, Country, EmailAddress, Fax, LogonWorkstations, MobilePhone, Office, OfficePhone,
Organization, OtherName, POBox, SmartcardLogonRequired, State, Surname

For ein full forklaring på parametera som du kan sende til Get-ADUser, i ADmcp skriv inn Get-Help
Get-ADUser –detailed og trykk ENTER.
Korleis å lagge ein stor mengde med brukarar
Dette emnet forklarer korleis du skal lage ein stor mengde brukarar i AD DS. I dømet visser vi korleis
du lager mange brukar i AD DS ved og importere innhaldet til ein comma-separated value(CSV) fil:

Import-CSV usersFinance.csv | foreach {New-ADUser -SamAccountName
$_.SamAccountName -Name $_.Name -Surname $_.Surname -GivenName $_.GivenName
-Path "OU=Finance,OU=UserAccounts,DC=14e-DC,DC=local" -AccountPassword
(ConvertTo-SecureString -AsPlainText $_.SamAccountName -Force) -Enabled
$true}

Du kan bruke dei følgande parametera når du skal setje monge av dei vanlige verdian som er
assosiert med å lage ein ny brukar i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring på parameter som du kan sende til New-AdUser i ADmcp skriv inn Get-Help
New-ADUser –detailed og trykk ENTER.



Sjå ein brukars gruppe medlemskap
Dette emnet tar for seg korleis du ser ein brukars gruppe medlemskap, dette er nok eit emne som no
blir tatt opp for og visse korleis det gjerast i R2 i forhold til win 2008 server før R2. Dømet visser
korleis du ser gruppe medlemskap til brukaren SaraDavis:

Get-ADPrincipalGroupMembership -Identity SaraDavis

For ein full forklaring på parameter som du kan sende gjennom Get-
ADPrincipalGroupMembership i ADmcp skriv inn Get-Help Get-
ADPrincipalGroupMembership –detailed og trykk ENTER.



Fjerning av Gruppe Medlemskap
Dette emnet tar opp korleis du fjernar alle gruppe medlemskap frå ein brukar. I dømet fjerner vi alle
gruppe medlemskap til brukaren SaraDavis:

Get-ADPrincipalGroupMembership -Identity SaraDavis | % {Remove-
ADPrincipalGroupMembership -Identity SaraDavis -MemberOf $_}

For full forklaring på parameter som du kan sende gjennom Get-ADPrincipalGroupMembership
eller Remove-ADPrincipalGroupMembership, i ADmcp skriv inn Get-Help Get-
ADPrincipalGroupMembership –detailed eller Get-Help Remove-
ADPrincipalGroupMembership –detailed og trykk ENTER.



Flytte Gruppe medlemskap til ein anna brukar
Vi visser her korleis du flyttar ein brukars gruppe medlemskap til ein anna brukar. I dømet visser vi
korleis vi flyttar gruppe medlemskapet til brukaren SaraDavis til brukaren JaneDow:

Get-ADPrincipalGroupMembership -Identity SaraDavis | % {Add-
ADPrincipalGroupMembership -Identity JaneDow -MemberOf $_}

For full forklaring på parameter som du kan sende til Get-ADPrincipalGroupMembership eller
Add-ADPrincipalGroupMembership i ADmcp skriv inn Get-Help Get-
ADPrincipalGroupMembership –detailed eller Get-Help Add-
ADPrincipalGroupMembership –detailed og trykk Enter.



Korleis lage ein ny brukar
Dette emnet forklar korleis du lager ein ny brukar i AD DS, i dømet visser vi korleis vi lager ein ny
brukar U1 med passordet(p@ssword) i ein OU (test) i 14e-DC.local domenet:

New-ADUser -SamAccountName U1 -Name "User 1" -AccountPassword (ConvertTo-
SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true -Path
‛OU=Test,DC=14e-DC,DC=local‛

Du kan bruke følgjande parameter når du sette mange av dei vanlige verdiane som er assosiert med
lagging av ein ny brukar i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ei full forklaring på parameter som du kan sende til New-ADUser i ADmcp, skriv inn Get-Help
New-ADUser –detailed og trykk ENTER.



Forhindre ein brukars Passord Endring
Dette emnet forklarer korleis du kan hindre ein brukar frå og endre passordet sitt. Vi tar eit døme der
vi hindre JaneDow frå og endre passordet sitt.

Set-ADAccountControl -Identity JaneDow -CannotChangePassword $true
Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med brukar konto kontroll i AD DS.

-AllowReversiblePasswordEncryption, -TrustedForDelegation, -PasswordNeverExpires, -
AccountNotDelegated, -DoesNotRequirePreAuth, -TrustedToAuthForDelegation, -UseDESKeyOnly, -
PasswordNotRequired, -CannotChangePassword, -Enabled, -HomedirRequired, -MNSLogonAccount

For ein full forklaring av parameter som du kan sende til Set-ADAccountControl i ADmcp skriv inn
Get-Help Set-AdAccountControl –detailed og trykk ENTER.



Krevje at ein brukar endrar Passord ved neste innlogging
Emnet forklarer korleis du kan krevje at ein brukar endrar passordet sitt neste gong dei logga på. I
dømet ber vi brukaren TonyAllen og endre sitt passord neste gong han logger på:

Set-ADUser -Identity TonyAllen -ChangePasswordAtNextLogon $true

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med brukar objekt i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring på parameter som du kan sende til Set-ADUser i ADmcp skriv inn Get-Help
Set-ADUser –detailed og trykk ENTER.



Hindre at ein brukar sitt passord går ut på dato
Dette emnet forklarer korleis du kan hindre ein brukars passord frå og gå ut på dato(expire),
følgjande døme visser korleis du forhindrar at passordet til SaraDavis går ut på dato:

Set-ADAccountControl -Identity SaraDavis -PasswordNeverExpires $true

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med brukar konto kontroll i AD DS:

-AllowReversiblePasswordEncryption, -TrustedForDelegation, -PasswordNeverExpires, -
AccountNotDelegated, -DoesNotRequirePreAuth, -TrustedToAuthForDelegation, -UseDESKeyOnly, -
PasswordNotRequired, -CannotChangePassword, -Enabled, -HomedirRequired, -MNSLogonAccount

For ein full forklaring på parameter som du kan sende gjennom til Set-ADAccountControll i
ADmcp skriv inn Get-Help SetADAccountControl –detailed og trykk ENTER.
Setje ein brukars konto val (User’s Account Options)
Dette emnet handlar om korleis du kan setje ein brukar konto val. Desse vala kontrollert av
userAccountControl attributtet i AD DS. Det følgjande dømet korleis du setje mange forskjellige av
brukar konto kontroll attributta for brukarane Ann Beebe:

Set-ADAccountControl -Identity ‛CN=Ann
Beebe,OU=HumanResources,OU=UserAccounts,DC=14e-DC,DC=local‛ -
HomedirRequired $true -PasswordNeverExpires $true -
ChangePasswordAtNextLogon $true -PasswordNotRequired $false

Du kan bruke føgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med brukar konto kontroll i AD DS.

-AllowReversiblePasswordEncryption, -TrustedForDelegation, -PasswordNeverExpires, -
AccountNotDelegated, -DoesNotRequirePreAuth, -TrustedToAuthForDelegation, -UseDESKeyOnly, -
PasswordNotRequired, -CannotChangePassword, -Enabled, -HomedirRequired, -MNSLogonAccount

For ein full forklaring på parameter som du kan sende til Set-ADAccountControl i ADmcp skriv
inn Get-Help Set-ADAccountControl –detailed og trykk ENTER.



Setje ein brukars konto å gå ut på dato
Dette emnet forklarer korleis du sette ein brukar sin konto til å gå ut på dato. Det følgande dømet
visser korleis vi sette kontoen til JaneDow til og gå ut på dato 11/27/2010:

Set-ADUser JaneDow –AccountExpirationDate 11/27/2010

Du kan bruke dei følgjande parameteren når du skal setje mange av dei vanlige verdiane som er
assosiert med brukar objekt i AD DS.

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring av parameteren som du kan sende til Set-ADUser, i ADmcp skriv inn Get-
Help Set-ADUser –detailed og trykker ENTER.
Finne brukar der kontoen/passord deira helde på og gå ut på dato
Dette emnet tar for seg korleis du finne brukar som har ein konto eller passord som helde på og gå ut
på dato. VI har 2 dømer det første finner alle brukar som har ein konto som kommer til og gå ut på
dato dei neste 90 dagane. Det andre dømet visser korleis du kan finne alle brukarane der passordet
deira går ut på datoen 10/15/2010

Døme 1:

Search-ADAccount -AccountExpiring -TimeSpan 90.00:00:00 | where
{$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A

Døme 2:

Search-ADAccount -PasswordExpiring -DateTime 10/15/2010 | where
{$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A

For ein full forklaring av parameter som du kan sende til Search-ADAccount i ADmcp skriv inn
Get-Help Search-ADAccount –detailed og trykk ENTER.



Modifisere Default Display Name
Vi tar no for oss korleis du kan endre på default display name når du lager ein brukar i AD Users and
Computers. I dømet visser vi korleis du modifiserar default display name når du lager ein brukar i AD
users and Computers:

Set-ADObject 'CN=user-
Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=14e-DC,DC=local' -
Partition 'CN=Configuration,DC=14e-DC,DC=local' -Replace
@{CreateDialog="%<sn>, %<givenName>"}

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion

For ein full forklaring av parameter som du kan sende til Set-AdObject, i ADmcp skriv inn Get-
Help Set-ADObject –detailed og trykk ENTER.



Lage ein inetOrgPerson brukar
Dette emnet forklarer korleis du lager ein brukar frå inetOrgPerson klassa i AD DS. I dømet visser vi
korleis du lager ein inetOrgPerson brukar (U1) med passord (p@ssword), i OU (test) i 14e-AD.local
domenet:

New-ADUser -SamAccountName U1 -Name "User 1" -AccountPassword (ConvertTo-
SecureString -AsPlainText "p@ssw0rd" -Force) -Enabled $true -Path
'OU=Test,DC=14e-DC,DC=local' –Type iNetOrgPerson
Du kan bruke følgjande parameter når du setjar mange av dei vanlige verdiane som er assosiert med
lagging av ein ny brukar i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring av parmater som du kan sende til New-ADUser i ADmcp skriv inn Get-Help
New-ADUser –detailed og trykk ENTER.




Endre eit brukar objekt til ein inetOrgPerson Object (eller reversert)
Nå forklarer vi korleis vi konverterar eit brukar objekt til eit objekt i inetOrgPerson klassa eller
reversert. Vi har 2 dømer, det første dømet korleis du konverterer brukar objektet SaraDavis til ein
inetOrgPerson objekt, det andre dømet visser korleis du konverterer inetOrgPerson objekt SaraDavis
til eit brukar objekt

Døme 1:

Set-ADUser SaraDavis -Add @{objectClass='inetOrgPerson'}

Døme 2:

Set-ADUser SaraDavis -Remove @{objectClass='inetOrgPerson'}

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med brukar objektet i AD DS:

-AccountExpirationDate, -AccountNotDelegated, -AccountPassword, -
AllowReversiblePasswordEncryption, -CannotChangePassword, -ChangePasswordAtLogon, -Enabled,
-PasswordNeverExpires, -PasswordNotRequired, -SmartcardLogonRequired, -TrustedForDelegation, -
DisplayName, -GivenName, -Initials, -OtherName, -Surname, -Description, -City, -Country, -POBox, -
PostalCode, -State, -StreetAddress, -Company, -Department, -Division, -EmployeeID, -
EmployeeNumber, -Manager, -Office, -Organization, -Title, -Fax, -HomePhone, -MobilePhone, -
OfficePhone, -EmailAddress, -HomeDirectory, -HomeDrive, -HomePage, -ProfilePath, -ScriptPath, -
Certificates, -LogonWorkstations, -PermittedLogonTimes, -UserPrincipalName, -
ServicePrincipalNames

For ein full forklaring på parameter som du kan sende til Set-ADUser i ADmcp skriv inn Get-Help
Set-ADUser –detailed og trykk ENTER.
Finne ut ein brukars Last Logon Time
Vi skal no finne ut når ein brukar siste var innloget seg på systemet. I dømet visser vi eit script som du
kan bruke for å finne Last Logon Time til brukaren SaraDavis.

C#

Import-Module ActiveDirectory

function Get-ADUserLastLogon([string]$userName)
{
  $dcs = Get-ADDomainController -Filter {Name -like "*"}
  $time = 0
  foreach($dc in $dcs)
  {
    $hostname = $dc.HostName
    $user = Get-ADUser $userName | Get-ADObject -Properties lastLogon
    if($user.LastLogon -gt $time)
    {
      $time = $user.LastLogon
    }
  }
  $dt = [DateTime]::FromFileTime($time)
  Write-Host $username "last logged on at:" $dt }

Get-ADUserLastLogon -UserName SaraDavis


For ein full forklaring på parameter som kan sende til Get-ADDomainController, Get-ADUser
eller Get-ADObject i Active Directory module command prompt skriv inn Get-Help <namnet
til cmdlet> -detailed og trykk ENTER.



Finne ein brukar som ikkje har logga seg på i det siste
Vi skal no visse korleis du finner brukarar som ikkje har logga seg på systemet i det siste, vi har tre
dømer. Det første dømet demonstrer korleis du finner inaktive(inactive) brukar kontoar. Døme nr to
visser korleis du finner brukar kontoar som har vorre inaktive for 90 dagar. Døme nr tre visser
brukarar som har vorre inaktive sidan 10/15/2009.

Døme 1:

Search-ADAccount -AccountInactive | where {$_.ObjectClass -eq 'user'} | FT
Name,ObjectClass –A

Døme 2:

Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 | where
{$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A

Døme 3:

Search-ADAccount -AccountInactive -DateTime 10/15/2009 | where
{$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A
For ein full forklaring på kva parameter som du kan sende til Search-ADAccount i ADmcp skriv inn
Get-Help Search-ADAccount –detailed og trykk ENTER.




Computer Managment


Legge til ein maskin i eit Domene
Vi skal no ta for oss korleis du legger til(join) ein maskin til eit domene. Vi har 5 dømer, vi skriver kva
kvart døme handlar om før dømet i staden for her som har vært norma:

Døme 1: Det følgjande døme demonstrer korleis du legger til lokal maskina til 14e-DC.local domenet
ved og bruke dei noverande pålogga brukar credentials. Du må kjøre denne kommandoen på lokal
maskina:

Add-Computer –DomainOrWorkgroupName 14e-AD

Døme 2: Det følgjande dømet visser korleis du legger til maskinen Maskin1 til 14e-DC-Group
arbeidsgruppa, ved og bruke dei noverande pålogga brukar credentials. Du må kjøre denne maskinen
på lokal maskinen:

Add-Computer –Maskin1 –WGN 14e-DC-Group

Døme 3: Det følgjande dømet demonstrer korleis du legger til maskinen S1 til domenet 14e-DC.local
Domene kontrollaren som gjennomfører join er spesifisert ved –Server parameteren, bruk den
noverande pålogga brukar credentials. Du må kjøre denne kommandoen på lokal maskina:

Add-Computer S1 –DN 14e-AD –Server 14e-AD

Døme 4: Det følgjande dømet demonstrer korleis du legger til den lokale maskina der kommandoen
blir kjørt til 14e-DC.local doment. Lokal maskina blir lagt til OU i directoryen som er spesifisert i -
OUPath parameteren, ved og bruke dei noverande pålogga bruka credentials. Du må kjøre denne
kommandoen på lokal maskina:

Add-Computer –DomainOrWorgroupName 14e-AD –OUPath OU=testOU,DC=14e-
DC,DC=local

Døme 5: Det følgjande dømet demonstrerar korleis du legger til maskina S1 til 14e-DC.local domenet
ved og bruke dei spesifiserte credentials 14e-AD\Administrator. Når operasjonen er gjennomført,
maskina restartar automatisk. Du må kjøre denne kommandoen på lokal maskina:

Add-Computer S1 14e-AD 14e-AD\Administrator –Reboot

For ein full forklaring på parameter som du kan sende til Add-Computer, i Active Directory module
command prompt (ADmcp) skriv inn Get-Help Add-Computer –detailed og trykk ENTER.
Enumererer antall maskin kontoar i eit domene
Vi skal no visse korleis du lista ut alle maskin kontoane i eit domen. I dømet demonstrer vi korleis du
lista ut alle maskinen i eit domene:

Get-ADcomputer -Filter 'Name -like "*"'

I tillegg til standard LDAP attributta kan du hente følgjande utvida eigenskapar til Get-ADComputer
cmdlet ved og bruke –Properties parameteren:

IPv4Address, IPv6Address, ServiceAccount

For ein full forklaring på parameter som du kan sende til Get-ADComputer i ADmcp skriv inn Get-
Help Get-ADComputer –detailed og trykk ENTER.



Flytte ein maskin innan det same domenet
Vi skal nå sjå på korleis du flytter ein maskin inne i domenet, i dømet demonstrera vi korleis vi flytter
maskin maskin1 til OU ManagedCompturs i 14e-DC.local domenet.

Get-ADComputer Maskin1 | Move-ADObject -TargetPath
'OU=ManagedComputers,DC=14-DC,DC=local'

I tillegg til standard LDAP attributta kan du bruke følgjande utvidda eigenskapar til Get-ADComputer
cmdlet ved og bruke –Properties parameteren:

IPv4Address, IPv6Address, EmailAddress, ServiceAccount

For ein full forklaring på parameter som du kan sende til Get-ADComputer eller Move-ADObject i
ADmcp skriv inn Get-Help Get-ADComputer –detialed eller Get-Help Move-ADObject –detailed og
trykk ENTER.



Legge til eller fjerne ein maskin konto frå ein gruppe.

Vi ser no på korleis du legger til eller fjernar ein maskin konto frå ein gruppe, vi har 2 dømer. Vi ser
først på Døme 1, vi visser der korleis du legger til ein maskin til ein gruppe. For å legge til fleire
maskiner til ein gruppe kan du pipeline multiple maskin kontoar til Add-
ADPrincipalGroupMembership cmdlet ved og bruke Get-ADComputer cmdlet. I døme 2 visser vi
korleis du fjernar ein maskin frå ei gruppe

Døme 1:

Get-ADComputer testsrv1 | Add-ADPrincipalGroupMembership -MemberOf
ManagedComputerGroups

Døme 2:

Remove-ADGroupMember -Identity SvcAccPSOGroup -Member IIS01
For ein full forklaring på parameter som du kan sende til Get-ADComputer, Add-
ADPrincipalGroupMembership eller Remove-ADGroupMember i ADmcp skriv inn Get-Help
Get-ADComputer –detailed, Get-Help Add-ADPrincipalGroupMembership –
detailed, eller Get-Help Remove-ADGroupMember –detailed trykk so ENTER.



Endre maksimum nummer av maskiner som ein brukar kan join til domenet
Vi ser nå på korleis du kan endre maksimum antall maskiner som ein brukar kan joine til eit domene, i
dømet demonstrer vi korleis vi kan gjere det i domenet 14e-AD.local

Set-ADDomain 14e-DC.local -Replace @{"ms-ds-MachineAccountQuota"="2"}'

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med domain managemenet:

-LastLogonReplicationInterval, -AllowedDNSSuffixes, -ManagedBy

For ein full forklaring på parameter som du kan sende til Set-ADDomain i ADmcp skriv inn Get-
Help Set-ADDomain –detailed og trykk ENTER.



Endre namnet til ein maskin
Vi ser nå på korleis du kan endre namnet på ein maskin. Vi har 4 dømer vi forklarer derfor kva vi skal
gjere før kvart døme i staden for her.

Døme1: Det følgjande dømet demonstrer korleis du endrar namnet til den lokale domene-joined
maskina der kommandoen blir kjørt. Denne kommandoen må kjørast på lokal maskina:

ReName-Computer -NCN MyComputer

Døme 2: Dette dømet demonstrer korleis du endrar namnet på den lokale domen-joined maskina der
kommandoen blir kjørt. Kommandoen må kjørast på den lokale maskina:

ReName-Computer -ComputerName S1 -NCN MyComputer

Døme 3: Dette dømet demonstrer korleis du endrar namnet på den lokale domen-joined maskina der
kommandoen blir kjørt. Kommandoen må kjørast på den lokale maskina:

ReName-Computer S1 -NCN MyComputer

Døme 4: Det følgjande dømet demonstrer korleis du endrar namnet til ein ikkje-domene-joined
maskin:

Rename-ADObject ‘CN=Server1,OU=ManagedComputers,DC=14e-DC,DC=local’ –
NewName Server3
For ein full forklaring på parameter som du kan sende til ReName-Computer eller Rename-
ADObject i ADmcp skriv inn Get-Help ReName-Computer –detailed eller Get-Help
Rename-ADObject –detailed, og trykk ENTER



Teste den sikre kanalen for ein maskin.
Dette emnet forklarer korleis du kan teste den sikre kanalen til ein maskin. Ein siker kanal må være
plassert mellom ein domene-joined maskin og ein domene kontroller i domenet. Visst den sikre
kanalen ikkje er etabler mellom maskinen og domene kontroller, vil ikkje maskinen lengre kunne
autentisere til domenet. I dømet ser på korleis du kan sende ei spøring etter statusen til trust
relationship mellom den lokale maskinen og domenet som den er joina i. Du må kjøre denne
kommandoen på den lokale maskina:

Test-ComputerSecureChannel

For ein full forklaring på parameter som du kan sende til Test-ComputerSecureChannel i
ADmcp skriv inn Get-Help Test-ComputerSecureChannel –detailed og trykk ENTER.



Resetje ein Maskin konto
Dette emnet forklarer korleis du resetje ein maskin konto. For å resetje ein maskin konto, må du først
resetje den sikre kanalen mellom domain-joined maskina og domene kontrollaren i domenet. Ein
siker kanal er nødvendig for ein maskin å kunne bli autentisert vellykka til domenet. Vi har to dømer.
I det første dømet demonstrerar vi korleis du kan resetje den sikre kanalen mellom lokal maskina og
domenet som den er koplet opp mot. Du må kjøre denne kommandoen på den lokale maskina. I det
andre dømet demonstrer vi korleis du resetje den sikre kanalen mellom den lokale maskina og
domenet som den er koblet opp mot. Domene kontroller som gjennomfører operasjonen er
spesifisert som ServerDC1.14e-DC.local Du må kjøre denne kommandoen på den lokale maskinen

Døme 1:

Test-ComputerSecureChannel –Repair

Døme 2:

Test-ComputerSecureChannel -Repair -Server ServerDC1.14e-DC.local

For ei full forklaring på parameter som du kan sende til Test-ComputerSecureChannel i ADmcp
skriv inn Get-Help Test-ComputerSecureChannel –detailed og trykk ENTER.



Finne uaktive eller ubrukte maskiner
Dette emnet forklarer korleis du finner uaktive eller ubrukte maskiner. I dømet har vi eit C# script
som leiter gjennom domenet vårt.

Døme:
C#

$lastSetdate = [DateTime]::Now - [TimeSpan]::Parse("45")
Get-ADComputer -Filter {PasswordLastSet -le $lastSetdate} -Properties
passwordLastSet -ResultSetSize $null | FT samaccountname,PasswordLastSet


For ein full forklaring på parameter som du kan sende til Get-ADComputer, i ADmcp skriv inn Get-
Help Get-ADComputer –detailed og trykk ENTER.



Finne maskiner med eit bestemt OS
Vi skal no sjå korleis du kan finne maskiner som kjører eit bestemt OS, i dømet demonstrer vi korleis
du finne ei maskin som kjører Windows Server 2008 Enterprise. Vi har to måttar og gjer det på. Vi
viser begge.

Get-ADComputer -Filter 'OperatingSystem -eq "Windows Server 2008
Enterprise"'

eller

Get-ADComputer -Filter 'OperatingSystem -eq " 6.0 (6001)"'

For ein full forklaring på parameter som du kan sende til Get-ADComputer i ADmcp skriv inn Get-
Help Get-ADComputer –detailed, trykk so ENTER.



Lagge ein Maskin konto
Vi visser nå korleis du lager ein maskin konto. Vi har to dømer. Det første dømet visser korleis du
lager ein ny maskin Comp1 i OU ComputerAccounts i 14e-DC.local domenet. I døme 2 demonstrer vi
korleis du lager ein ny maskin Comp1 med passordet p@ssword i OU CompterAccounts i 14e-
DC.local domenet.

Døme 1

New-ADComputer -SamAccountName Comp1 -Path ‘OU=ComputerAccounts,DC=14e-
DC,DC=local'

Døme2

New-ADComputer -SamAccountName Comp1 -Path OU=ComputerAccounts,DC=14e-
DC,DC=local' -AccountPassword (ConvertTo-SecureString -AsPlainText
'p@assw0rd' -Force) -Enabled $true

Du kan bruke dei følgjande parameteren når du setje mange av dei vanlige verdiane som er assosiert
med og lagge maskiner.
Description, DisplayName, -DNSHostName, -Enabled, -Location, -ManagedBy, -OperatingSystem, -
OperatingSystemHotfix, -OperatingSystemServicePack, -OperatingSystemVersion, -
ServicePrincipalNames, -TrustedForDelegation

For ein full forklaring på parameter som du kan sende til New-ADComputer i ADmcp skriv inn
Get-Help New-ADComputer –detailed og skrive ENTER.



Modifisere attributta til ein maskin konto
Vi ser no på korleis du kan modifisere attributta til eit datamaskin objekt, i dømet demonstrar
vi korleis vi modifiserar ManagedBy attributten til maskina Maskin-srv2.

Set-ADComputer Maskin-srv2 -ManagedBy 'CN=SQL
Administrator,OU=UserAccounts,OU=Managed,DC=14e-DC,DC=local'

Du kan bruke dei følgjande parameteren når du skal setje mange av dei vanlige verdiane som er
assosiert med computer Management:

-Description, -DisplayName, -DNSHostName, -Enabled, -Location, -ManagedBy, -OperatingSystem, -
OperatingSystemHotfix, -OperatingSystemServicePack, -OperatingSystemVersion, -
ServicePrincipalNames, -TrustedForDelegation

For ein full forklaring på parameter som du kan sende til Set-ADComputer i ADmcp skriv Get-Help
Set-ADComputer –detailed og trykk ENTER.



Koble til Standard behaldar for Maskinen
Vi ser no på korleis vi kobler til standard behaldar for maskiner(på engelsk blir det Binding to the
Default Container for Computers) Dømet demonstrer korleis vi gjer det.

Get-ADDomain 14e-DC.local | FL ComputersContainer

For ein full forklaring på parameter som du kan sende til Get-ADDomain i ADmcp skriv Get-Help
Get-ADDomain –detailed og trykk ENTER.




Group Management


Sjå Permission til ein gruppe
Vi ser no på korleis du kan sjå på permissions til ein gruppe. I dømet visser vi korleis du ser
permission til gruppa ManagedGroups i 14e-DC.local. Du må kjøre følgjande kommando frå
AD:\>drive og drivaren må være kobla til domenet der gruppa eksisterar. Visst du lurer på meir om
leverandørar (providers) kan du sjekke http://go.microsoft.com/fwlink/?LinkId=150334.
Get-ACL (Get-ADGroup ManagedGroups) | fl * -f

I tillegg til standard LDAP attributta kan du hente følgjande utvida eigenskapar til Get-AdGroup
cmdlet ved og bruke –Properties parameteren:

GroupCategory, GroupScope, EmailAddress, Members

For ein full forklaring på parameter som du kan sende til Get-AdGroup eller Get-ACL i Active
Directory module command prompt (ADmcp) skriv inn Get-Help Get-ADGroup –detailed eller
Get-Help Get-ACL –detailed og trykk ENTER.



Lagge ein gruppe
Vi skal no sjå på korleis du kan opprette ein ny gruppe i AD DS, i dømet laggar vi gruppa RODCAdmins
i 14e-DC.local.

New-ADGroup -Name "RODC Admins" -SamAccountName RODCAdmins -GroupCategory
Security -GroupScope Global -DisplayName "RODC Administrators" -Path
"CN=Users,DC=14e-DC,DC=local"

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med å opprette ein gruppe:

GroupCategory, HomePage, ManagedBy, State, StreetAddress, Description, DisplayName

For ein full forklaring på parameter som du kan sende til New-ADGroup i ADmcp skriv inn Get-Help
New-ADGroup –detailed og trykk ENTER.



Sjå dei Nested Members til ein gruppe.
Vi skal no sjå på korleis du kan sjå dei nested medlemane av ein gruppe. Nested medlemane av ein
gruppe er medlemmar av ein gruppe som er bevart i ein anna gruppe. Til dømes visst gruppe A er
bevart i gruppe B, so er medlemmane av Gruppe A dei nested medlemmane av gruppe B. I dømet
visser vi korleis vi finner dei nested medlemmane av gruppe G1 i domenet vårt.

Get-ADGroupMember G1 -Recursive | FT Name,ObjectClass -A

Du kan bruke følgjande parameter når du skal hente mang av dei vanlige verdiane som er assosiert
med å sjå dei nested medlemmane av ein gruppe:

GroupCategory, HomePage, ManagedBy, State, StreetAddress, Description, DisplayName

For ein full forklaring av parameter som du kan sende til Get-ADGroupMember i ADmcp skriv inn
Get-Help Get-ADGroupMember –detailed og trykk ENTER.
Flytte ein gruppe inne i Domenet
Vi skal no sjå korleis du flyttar ein gruppe inne i domenet, i dømet visser vi korleis du flytter gruppa
SvcAccPSOGroup frå OU Managed til OU ManagedGroups i 14e-DC.local domenet:

Move-ADObject "CN= SvcAccPSOGroup,OU=Managed,DC=14e-DC,DC=local" -
TargetPath "OU=ManagedGroups,DC=14e-DC,DC=local"

For ein full forklaring av parameters som du kan sende til Move-ADObject i ADmcp og skriv inn
Get-Help Move-ADObject –detailed og trykk ENTER.



Muliggjere Universal Group Membership Caching
Vi skal no forklare korleis vi muliggjere Universal Group Membership Caching, i Dømet visser vi
korleis vi gjere det på Default-First-Site-Name sida til 14e-DC.local domenet:

Set-ADObject "CN=NTDS Site Settings,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=14e-DC,DC=local" –Replace @{options='32'}

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane til objekt i AD DS:

Description, DisplayName, ProtectedFromAccidentalDeletion

For ein full forklaring av parameter som du kan sende ti Set-ADObject i ADmcp skriv inn Get-Help
Set-ADObject –detailed og trykk ENTER.



Sjå Direct Members til ein gruppe
Vi skal no sjå korleis du kan sjå direkte medlemmane til ein gruppe. I dømet visser vi korleis vi gjer
det med gruppa G1 i 14e-DC.local domenet:

Get-ADGroupMember G1 | FT Name,ObjectClass -A

Du kan bruke følgjande parameter når du skal hente mange av dei vanlige verdiane som er assosiert
med viewing the direct members of a group:

GroupCategory, HomePage, ManagedBy, State, StreetAddress, Description, DisplayName

For ein full forklaring på kva parameter som du kan sende til Get-ADGroupMember i ADmcp og skriv
inn Get-Help Get-ADGroupMember –detailed og trykk ENTER.



Modifisere Gruppe attributt
Vi skal nå sjå på korleis du kan modifisere attributta til ein gruppe. I dømet blir det demonstrert
korleis du modifiserar description attributta til gruppa RODCAdminis i 14e-DC.local

Set-ADGroup RODCAdmins -Description "The delegated administrators of Read-
Only Domain Controllers"
Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er anvendt
til grupper i AD DS:

GroupCategory, HomePage, ManagedBy, State, StreetAddress, Description, DisplayName

For ein full forklaring av parameter som du kan sende til Set-ADGroup i ADmcp skriv inn Get-Help
Set-ADGroup –detailed og trykk ENTER.



Beslutne ein primær gruppe ID
Dette emnet forklarer korleis du beslutter ein primær Gruppe ID (resolve a primary group ID).
Standard, ein brukars primær gruppe er Domain Users. Brukarens primær gruppe gjelder berre
brukar som logger på netverket gjennom Services for Macintosh eller som kjører POSIX (Portable
Operation System Interface)-mottagelig applikasjonar. Unntatt visst du brukar desse tjenestane er
der ikkje behov for å endre primær gruppa frå Domain Users. I dømet visser vi korleis du beslutter
primær gruppe ID til brukaren SaraDavis i 14e-AD.local domenet. Legg inn kvar kommando
på ein separat linje:

Get-ADUser SaraDavis -Properties PrimaryGroup

$DomainSID = (Get-ADDomain ‘DC=14e-DC,DC=local).DomainSID

$GroupSID=$DomainSID + "-" + $PGID

Get-ADGroup $GroupSID

For ein full forklaring på parameter som du kan sende til Get-ADUser, Get-ADDomain eller Get-
ADGroup, i ADmcp skriv inn Get-Help Get-ADUser –detailed, Get-Help Get-ADDomain
–detailed, eller Get-Help Get-ADGroup –detailed og trykk ENTER.



Legge til eller fjerne Medlemer av ein gruppe
Vi ser no på korleis du legger til og fjerner medlemmer frå ein gruppe. Vi visser i døme 1 korleis du
legger til og i døme 2 korleis du fjerner.

Døme 1:

Add-ADGroupMember -Identity SvcAccPSOGroup -Member SaraDavis

Døme 2:

Remove-ADGroupMember -Identity SvcAccPSOGroup -Member SaraDavis

For ein full forklaring på parameter som du kan sende til Add-ADGroupMember eller Remove-
ADGroupMember, i ADmcp skriv inn Get-Help Add-ADGroupMember –detailed eller Get-
Help Remove-ADGroupMember –detailed og trykk ENTER.
Endre omfanget eller typen til ein gruppe
Vi visser nå korleis du endre enten omfanget eller typen til ein gruppe i dømet demonstrer vi korleis
du endre gruppe omfanget (scope) og gruppe kategorien til gruppa SvcAccPSOGroup i 14e-DC.local
domenet. I dømet endrar vi gruppe omfanget til Universal og gruppe kategorien til Security:

Set-ADGroup -Identity SvcAccPSOGroup –GroupScope Universal -GroupCategory
Security

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er gjelder for
grupper i AD DS:

GroupCategory, HomePage, ManagedBy, State, StreetAddress, Description, DisplayName

For ein full forklaring av parmeter som du sende til Set-ADGroup i ADmcp skriv inn Get-Help
Set-ADGroup –detailed og trykk ENTER.



Gjenopprettar ein sletta gruppe
Vi skal no sjå på korleis du gjenopprettar ein sletta gruppe. Det følgjande dømet demonstrar korleis
vi gjenopprettar den sletta gruppa RODCAdmins i 14e-DC.local domenet. For at gruppe
medlemskapet skal være bevart etter at du gjenopprettar ein sletta gruppe må du muliggjere Active
Directory Recycle Bin feature i Skogen.

Restore-ADObject -Identity "CN=RODCAdmins\\0ADEL:613dc90a-2afd-49fb-8bd8-
eac48c6ab59f,CN=Deleted Objects,DC=14e-DC,DC=local" -TargetPath
"OU=ManagedGroups,DC=14e-DC,DC=local"

For ein full forklaring av parameter som du kan sende til Restore-ADObject i ADmcp skriv inn
Get-Help Restore-ADObject –detailed og trykk ENTER.



Managed Service Accounts
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Lagge ein managed Service konto
Vi ser korleis du skaper ein managed service konto, dei blir bruk til og kjøre forskjellige tenester for
applikasjonar som operer i ditt domene miljø. Vi har to dømer i det første demonstrer vi korleis du
lager teneste kontoen, SQL-SRV1 i behaldaren Managed Service Accounts i 14e-DC.local. I døme 2
demonstrer vi korleis du skaper service kontoen SQL-SRV1,i behaldaren Managed Service Accounts i
14e-DC.local

Døme 1

New-ADServiceAccount -Name SQL-SRV1 -Path "CN=Managed Service
Accounts,DC=14e-DC,DC=local"
Døme 2

New-ADServiceAccount SQL-SRV1 -AccountPassword (ConvertTo-SecureString -
AsPlainText "p@ssw0rd" -Force) -Enabled $true -Path "CN=Managed Service
Accounts,DC=14e-DC,DC=local" -ServicePrincipalNames "MSSQLSVC/14e-SRV1.14e-
DC.local:1456"

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med skaping/lagging av ein managed service konto:

AccountNotDelegated, Enabled, HomePage, ServicePrincipalNames, TrustedForDelegation



Finne Managed Service kontoar per computer
Vi ser nå på korleis du kan finne kor monge service kontoar som er installert på kvar maskin. I dømet
gjer finner vi det på SQL-Server-1:

Get-ADServiceAccount –Filter {HostComputers –eq ‚SQL-Server-1‛ }

I tillegg til standard LDAP attributar, kan du bruke følgjande utvidda eigenskapar til Get-
ADServiceAccount cmdlet ved og bruke –Properties parameter:

HostComputers



Finne Managed Service kontoar
Vi ser no på korleis du kan finne managed service accounts i domenet:

Get-ADServiceAccount -Filter 'Name -like "*"' | FT Name,HostComputers -A

I tillegg til standard LDAP attributar, kan du bruke følgjande utvidda eigenskapar til Get-
ADServiceAccount cmdlet ved og bruke –Properties parameter:

HostComputers



Assosiere ein managed Service konto med ein maskin
Vi skal no sjå korleis vi assosierar ein managed service konto til ein maskin som driver applikasjoner
eller tjenester som maskina brukar. I dømet demonstrar vi korleis assosierar managed service
kontoen IIS-SRV1 med maskina SRV1 i 14e-DC.local domenet.

Add-ADComputerServiceAccount -Identity SRV1 -ServiceAccount IIS-SRV1



Fjerne ein managed Service konto frå ein maskin
Vi skal no sjå på korleis du fjernar ein managed service konto frå ein maskin. I dømet fjernar vi
kontoen EXCH-SRV1 frå maskina SRV1. Denne kommandoen må kjørast på den lokale maskina.
Remove-ADComputerServiceAccount -Identity SRV1 -ServiceAccount EXCH-SRV1



Slette ein managed Service konto
Vi ser no på korleis vi kan slette ein Managed Servce konto, i dømet slettar vi SQL-SRV1:

Remove-ADServiceAccount -Identity SQL-SRV1



Installere ein Managed Service konto
Vi skal no sjå korleis du installerar ein managed teneste konto. I dømet installerer vi managed service
konto SRV1, du må kjøre kommandoen på den lokale maskina.

Install-ADServiceAccount -Identity SQL-SRV1



Resetje passord til ein Managed Service konto
Vi skal no visse korleis du resetje eit passord for ein managed service konto, i dømet resetje vi
managed service kontoen SQL-SRV1:

Reset-ADServiceAccountPassword SQL-SRV1



Organizational Units
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Liste OUar i eit Domene
Vi skal no sjå på korleis vi listar ut alle OUane i domenet.

Get-ADOrganizationalUnit -Filter {Name -like '*'} | FT Name,
DistinguishedName -A

I tillegg til standard LDAP attributta kan du hente følgjande utvida eigenskapar i Get-
ADOrganizationalUnit cmdlet ved og bruke –Properties parameter:

StreetAddress, City, State, Country, PostalCode, Description, DisplayName,
ProtectedFromAccidentalDeletion, AppliedGroupPolicies



Setje eller fjerne ein Manager til ein OU
Vi ser no på korleis du enten setje ein Manager til ein OU eller korleis du fjernar han.

Set-ADOrganizationalunit 'OU=ManagedGroups,DC=14e-DC,DC=local' -ManagedBy
'CN=SaraDavis,OU=ManagedGroups,DC=14e-DC,DC=local'
For å fjerne ein manager av ein OU, setter du verdien av ManagedBy attributten til –ManagedBy
$null. Du kan bruke dei følgjande parameteren når du skal setje mange av dei vanlige verdiane som
er assosiert med modifikasjonen av ein OU:

Country, City, PostalCode, State, StreetAddress, Description, DisplayName,
ProtectedFromAccidentalDeletion, ManagedBy



Liste ut Objekta i ein OU
Vi ser no korleis du listar ut objekta som er i ein OU. I dømet ser vi i OUen UserAccounts i 14e-
DC.local domenet:

Get-ADObject -Filter 'Name -like "*"' –Searchbase
'OU=UserAccounts,DC=14e-DC,DC=local'



Opprette ein OU
Vi ser no korleis vi opprettar ein OU i AD DS, i dømet gir vi den namnet UserAccounts og legger den i
domenet 14e-DC.

New-ADOrganizationalUnit -Name UserAccounts -Path "DC=14e-dc,DC=local "

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med oppretting av ein OU:

Country, City, PostalCode, State, StreetAddress, Description, DisplayName,
ProtectedFromAccidentalDeletion, ManagedBy



Linke ein GPO til ein OU
Vi ser no på korleis du lenker opp ein Group Policy Object (GPO) til ein organizational unit(OU) i visser
det i dømet med og lenke GPOen ManagedGroupsGPO til OUen ManagedGroups i 14e-DC.local
domenet:

New-GPLink -Name ManagedGroupsGPO -Target "OU=ManagedGroups,DC=14e-
DC,DC=local" -order 1 –enforced



Finne ut det tilnærma nummeret av Child objekt i ein OU
Vi skal no sjå korleis du kan finne ut omtrent kor mange child objekt som er i ein OU. I dømet
demonstrer vi korleis du finner ut dette i OUen ManagedGroups i 14e-DC.local:

Get-ADOrganizationalUnit -Identity 'OU=ManagedGroup,DC=14e-DC,DC=local' -
Properties 'msds-approx-immed-subordinates'
I tillegg til standard LDAP attributta, kan du hente dei følgjande utvida eigenskapane til Get-
ADOrganizationalUnit cmdlet ved og bruke –Properties parameter:

StreetAddress, City, State, Country, PostalCode, Description, DisplayName,
ProtectedFromAccidentalDeletion, AppliedGroupPolicies



Slette ein OU
Vi visser no korleis du slettar ein OU, vi slettar OUen Test i 14e-DC.local domenet i dømet vårt:

Remove-ADOrganizationalUnit Test -Recursive

Visst flaget for ProtectedFromDeletion er satt til True, vil cmdelten ikkje slette OUen men
returere ein error.



Slette Objekt i ein OU
Vi viser korleis du sletter objekta i ein OU. I dømet slettar vi brukaren U1 i OUen Test i 14e-DC.local
domenet.

Remove-ADObject 'CN=U1,OU=Test,DC=14e-DC,DC=local'




Flytte Objekt i ein OU til ein anna OU
Vi ser no på korleis du flyttar objekta i ein OU til ein anna OU. I dømet flyttar vi objektar i OUen
ManagedGroups til OUen Managed i 14e-AD.local:

Get-ADObject -Filter 'Name -like "*"' -Searchbase 'OU=ManagedGroups,DC=14e-
DC,DC=local' -SearchScope OneLevel | Move-ADObject -TargetPath
"OU=Managed,DC=14e-DC,DC=local"




Renamne ein OU
Vi ser no på korleis du endrar namnet på ein OU. I dømet endrar vi namnet til OUen ManagedGroups
til Groups i domenet 14e-DC.local:

Rename-ADObject "OU=ManagedGroups,OU=Managed,DC=14e-DC,DC=local" -NewName
Groups

Det følgjande eigenskap verdien er brukt når du skal renamne ein Active Directory objekt:

NewName
Finne ein OU
Vi ser no på korleis du kan finne ein OU i AD, i dømet finner vi OU Test i domenet vårt:

Get-ADOrganizationalUnit -Identity Test, | ft
Name,Country,PostalCode,City,StreetAddress,State -A

I tillegg til standard LDAP attributta kan du kalle på dei følgjande utvidda eigenskaper til Get-
ADOrganizationalUnit cmdlet ved og bruke –Properties parameter:

StreetAddress, City, State, Country, PostalCode, Description, DisplayName,
ProtectedFromAccidentalDeletion, AppliedGroupPolicies



Modifisere ein OU
Vi skal no sjå på korleis du modifisera ein attributt til ein OU. I dømete modifisera vi description
attributtet til OUen Accounting i 14e-AD.local domenet:

Set-ADOrganizationalUnit –Identity Accounting -Description "Accounting
Department"

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assoisert
med modifisering av ein OU:

Country, City, PostalCode, State, StreetAddress, Description, DisplayName,
ProtectedFromAccidentalDeletion, ManagedBy



Flytte ein OU
Vi visser no korleis du kan flytte ein OU, i dømet flyttar vi OUen ManagedGroups til OUen Managed:

Move-ADObject "OU=ManagedGroups, DC=14e-DC,DC=local " -TargetPath
"OU=Managed,DC=14e-DC,DC=local"

Visst Protect from Accidental Deletion valget er muliggjort(enabled) på OUen som blir flytta, vil du få
ein ”Access denied” beskjed dukke opp når du prøver og gjennomføre operasjonen.



Tillate OUar og bli lagga inne i Behaldera
Vi visser no korleis du tillet OUar å bli laget/oppretta inne i behaldera(containers) i dømet
demonstrar vi korleis du tillett det:

Set-ADObject -Identity 'CN=Organizational-
Unit,CN=Schema,CN=Configuration,DC=14e-DC,DC=local' -Partition
'CN=Schema,CN=Configuration,DC=14e-DC,DC=local -Add
@{possSuperiors='Container'}

Du kan bruke følgjande parameter når du setje mange av dei vanlige verdiane i AD objekta:
-Description, -DisplayName, -ProtectedFromAccidentalDeletion




Beskytte alle OUar i domenet mot uheldig sletting
Vi skal no visse korleis du kan beskytte alle OUane i domenet mot og blir sletta ved eit uhell, i dømet
visser vi korleis du gjer det i domenet vårt 14e-DC.local:

Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Set-
ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

I tillegg til standard LDAP attributtar kan du hente inn dei følgjande utvidda eigenskaper til Get-
ADOrganizationalUnit cmdlet ved og bruke –Properties parameteren:

StreetAddress, City, State, Country, PostalCode, Description, DisplayName,
ProtectedFromAccidentalDeletion, AppliedGroupPolicies

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med modifisering av ein OU:

Country, City, PostalCode, State, StreetAddress, Description, DisplayName,
ProtectedFromAccidentalDeletion, ManagedBy



Password Policies
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Skappe ein ny Fine-Grained Password Policy
Vi ser no på korleis du skapper ein Fine-Grained Password Policy (fin-korna passord politikk(vi helder
oss til den engelske varrianten)), vi har 2 dømer på korleis du gjer det. I døme 1 demonstrer vi korleis
du laggar ein ny Fine-Grained Password Policy for domene brukarar i 14e-DC.local domenet. I døme 2
visser vi eit script som demonstrer korleis du skapper ein ny Fine-Grained Password Policy frå ein
template.

Døme 1:

New-ADFineGrainedPasswordPolicy -Name "DomainUsersPSO" -Precedence 500 -
ComplexityEnabled $true -Description "The Domain Users Password Policy"-
DisplayName "Domain Users PSO" -LockoutDuration "0.12:00:00" -
LockoutObservationWindow "0.00:15:00" -LockoutThreshold 10 -MaxPasswordAge
"60.00:00:00" -MinPasswordAge "1.00:00:00" -MinPasswordLength 8 -
PasswordHistoryCount 24 -ReversibleEncryptionEnabled $false

Døme 2: C#
$templatePSO = New-Object
Microsoft.ActiveDirectory.Management.Commands.ADFineGrainedPasswordPolicy
$templatePSO.ComplexityEnabled = $true
$templatePSO.LockoutDuration = [TimeSpan]::Parse("0.12:00:00")
$templatePSO.LockoutObservationWindow = [TimeSpan]::Parse("0.00:15:00")
$templatePSO.LockoutObservationWindow = [TimeSpan]::Parse("0.00:15:00")
$templatePSO.LockoutThreshold = 10
$templatePSO.MinPasswordAge = [TimeSpan]::Parse("0.00:10:00")
$templatePSO.PasswordHistoryCount = 24
$templatePSO.ReversibleEncryptionEnabled = $false
New-ADFineGrainedPasswordPolicy -Instance $templatePSO -Name "SvcAccPSO" -
Precedence 100 -Description "The Service Accounts Password Policy" -
DisplayName "Service Accounts PSO" -MaxPasswordAge "30.00:00:00" -
MinPasswordLength 20
New-ADFineGrainedPasswordPolicy -Instance $templatePSO -Name "AdminsPSO" -
Precedence 200 -Description "The Domain Administrators Password Policy" -
DisplayName "Domain Administrators PSO" -MaxPasswordAge "15.00:00:00" -
MinPasswordLength 10


Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med skaping av ein ny Fine-Grained Password Policy:

-ComplexityEnabled, -Description, -DisplayName, -LockoutDuration, -LockoutObservationWindow, -
LockoutThreshold, -MaxPasswordAge, -MinPasswordAge, -MinPasswordLength, -
PasswordHistoryCount, -ReversibleEncryptionEnabled



Hente ut detaljar om eit Fine-Grained Password Policy
Vi ser no på korleis du hentar ut detaljar frå eit Fine-Grained Password Policy, i døme hentar vi ut
password policyen til AdminsPSO:

Get-ADFineGrainedPasswordPolicy AdminsPSO

I tillegg til standard LDAP attributtar kan du hente ut følgjande utvidda eigenskaper til Get-
ADFineGrainedPasswordPolicy cmdlet ved og bruke –Properties parameter:

AppliesTo, ComplexityEnabled, LockoutDuration, LockoutObservationWindow, LockoutThreshold,
MaxPasswordAge, MinPasswordAge, MinPasswordLength, PasswordHistoryCount, Precedence,
ReversibleEncryptionEnabled



Søke etter eit Fine-Grained Password Policies
Vi ser no på korleis du kan søke etter Fine-Grained Password Policy, i dømet søker vi i domenet vårt:

Get-ADFineGrainedPasswordPolicy -Filter 'Name -like "*"' | ft Name,
Precedence,MaxPasswordAge,MinPasswordLength -A
Modifisere ein Fine-Grained Password Policy
Vi ser no på korleis du kan modifisere ein Fine-Grained Password Policy, i dømet visser vi korleis vi
modifserar minimum passord lengde og passord historie tellar til Fine-Grained Password Policy
DomainUsersPSO:

Set-ADFineGrainedPasswordPolicy "DomainUsersPSO" -MinPasswordLength 8 -
PasswordHistoryCount 24

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane som er assosiert
med ein Fine-Grained Password Policy:

-ComplexityEnabled, -Description, -DisplayName, -LockoutDuration, -LockoutObservationWindow, -
LockoutThreshold, -MaxPasswordAge, -MinPasswordAge, -MinPasswordLength, -
PasswordHistoryCount, -ReversibleEncryptionEnabled



Påføre Fine-Grained Password Policy
Vi skal no sjå korleis du kan påføre ein Fine-Grained Password Policy. Vi har 2 dømer. I det første
dømet visser vi korleis du får Fine-Grained Password Policy DomainUsersPSO til og gjelde for global
security groupe Domain Users. I det andre dømet demonstrar vi korleis vi får Fine-Grained Password
Policy DlgtfAdminsPSO til og gjelde for to brukarar med samAccountName(s) BobKe og KimAb.

Døme 1:

Add-ADFineGrainedPasswordPolicySubject DomainUsersPSO -Subjects 'Domain
Users'

Døme 2:

Add-ADFineGrainedPasswordPolicySubject DlgtdAdminsPSO -Subjects BobKe,KimAb



Fjerne ein Fine-Grained Password Policy
Vi ser no korleis du fjernar eit Fine-Grained Password Policy. I dømet demonstrar vi korleis du fjernar
Fine-Grained Password Policy DlgtdAdminsPSO for dei to brukarane BobKe og KimAb:

Remove-ADFineGrainedPasswordPolicySubject DlgtdAdminsPSO -Subjects
BobKe,KimAb



Slette ein Fine-Grained Password Policy
Vi ser no på korleis du slettar ein Fine-Grained Password Policy. I dømet slettar vi Fine-Grained
Password Policyen DlgtdAdminsPSO:

Remove-ADFineGrainedPasswordPolicy -Identity DlgtdAdminsPSO
Get Resultant Password Policy til ein brukar
Vi ser no korleis du kan hente ut Resultant Password Policy til ein brukar i dømet brukar vi BobKe:

Get-ADUserResultantPasswordPolicy BobKe



Finne alle brukarar og grupper der ein Fine-Grained Password Policy gjelder
Vi skal no sjå korleis vi kan finne alle grupper og brukarar der ein Fine-Grained Password Policy
gjelder i dømet brukar vi Fine-Grained Password Policyen AdminsPSO:

Get-ADFineGrainedPasswordPolicy AdminsPSO | ft AppliesTo -A



Hente detaljar om ein Default Domain Password Policy
Vi skal no hente ut detaljar om ein Default Domain Password Policy, i dømet visser vi korleis du
hentar fram detaljar til default domain password policy til 14e-DC.local doment:

Get-ADDefaultDomainPasswordPolicy 14e-DC

I tillegg til standard LDAP attributta kan du kalle på dei følgjande utvida eigenskapane til Get-
ADDefaultDomainPasswordPolicy cmdlet ved og bruke –Properties parameteren:

ComplexityEnabled, LockoutDuration, LockoutObservationWindow, LockoutThreshold,
MaxPasswordAge, MinPasswordAge, MinPasswordLength, PasswordHistoryCount,
ReversibleEncryptionEnabled



Modifisere Default Domain Password Policy
Vi ser no på korleis du kan modifisere Default Domain Password Policyen, vi demonstrar korleis du
gjer det i 14e-DC.local domenet:

Set-ADDefaultDomainPasswordPolicy -Identity 14e-DC.local -PasswordHistoryCount 10 –
MinPasswordLength 7 -MinPasswordAge 1.00:00:00 -MaxPasswordAge 30.00:00:00 -
LockoutObservationWindow 0.00:10:00 -LockoutThreshold 15

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med ein fine-grained password policy:

-ComplexityEnabled, -Description, -DisplayName, -LockoutDuration, -LockoutObservationWindow, -
LockoutThreshold, -MaxPasswordAge, -MinPasswordAge, -MinPasswordLength, -
PasswordHistoryCount, -ReversibleEncryptionEnabled
Optional Features
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Finne alle tilgjenglige Optional Features
Vi ser no korleis du kan finne alle Optional features i AD DS. I dømet visser vi korleis vi gjer det:

Get-ADOptionalFeature -Filter *

I tillegg til standard LDAP attributta kan du hente dei følgjande utvida eigenskapane til Get-
ADOptionalFeatur Cmdlet ved og bruke –Properties parameteren:

EnabledScopes, FeatureGUID, FeatureScope, IsDisableable, RequiredDomainMode,
RequiredForestMode



Hente detaljer til ein Optional Feature
Vi visser no korleis du kan hente detaljer om ein optional feature, i dømet henter vi detaljer om
optional feature Active Directory Recycle Bin i 14e-DC.local skogen:

Get-ADOptionalFeature 'Recycle Bin Feature'

I tillegge til standard LDAP attributta kan du hente dei følgjande utvidda eigenskapane til Get-
ADOptionalFeature cmdlet ved og bruke –Properties parameter:

EnabledScopes, FeatureGUID, FeatureScope, IsDisableable, RequiredDomainMode,
RequiredForestMode



Enable eller Disable Optional Features
Vi skal no sjå på korleis du aktiverar eller deaktiverar Optional Features. Vi har 2 dømer. I døme 1
demonstrer vi korleis du aktiverar(enable) den optional features Recycle Bin i 14e-DC.local skogen,
men her er det viktig og nemne at aktivering av AD Recycle Bin featuren er umulig og gjere
om(irreverisble action). I døme 2 demonstrer vi korleis du deaktiverar (disable) ein AD optional
feature i 14e-DC.local skogen.

Døme 1:

Enable-ADOptionalFeature `Recycle Bin Feature' -Scope Forest -Target `14e-
DC'

Døme 2:

Disable-ADOptionaFeature `OF2' -Scope Domain -Target `14e-DC'
Search\Modify Objects
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Telle objekt i AD (counting objects)
Vi skal sjå korleis du kan finne ut totale nummer av objekt som er lagra i Active Directory database. I
døme skal vi sjå kor mange objekt som er lagra i AD database i 14e-DC.local domenet:

Get-ADObject -Filter {name -like '*'} -SearchBase
'CN=Schema,CN=Configuration,DC=14e-DC,DC=local' -ResultSetSize $null |
Measure-Object



Sjå på RootDSE(viewing the RootDSE)
Vi skal no sjå på korleis vi kan sjå på RootDSE til eit domen. Ved og sjå på attributta til rootDSE, kan vi
sjå basis informasjon om, skogen(forest), domenet, eller domene kontrollerer utan og måtte hard-
kode naming context i eit søks spøring(search query). I dømet demonstrera vi korleis du gjer ser på
rootDSE til domenet:

Get-ADRootDSE

I tillegg til standard LDAP attributta kan du kalle på dei følgjande utvidda eigenskapar til Get-
ADRootDSE cmdlet ved og bruke –Properties parameter:

ConfigurationNamingContext, CurrentTime, DefaultNamingContext, DnsHostName,
DomainControllerFunctionality, DomainFunctionality, DsServiceName, ForestFunctionality,
HighestCommittedUSN, IsGlobalCatalogReady, IsSynchronized, LdapServiceName, NamingContexts,
RootDomainNamingContext, SchemaNamingContext, ServerName, SubschemaSubentry,
SupportedCapabilities, SupportedControl, SupportedLDAPPolicies, SupportedLDAPVersion,
SupportedRootDSEOperations, SupportedSASLMechanisms



Connecting to a Well-Known Container
Eit Well-Known container(behaldar) er eit objekt i AD DS som Users eller Computers, som innehelde
andre objekt. Vi skal sjå på korleis du kan koble opp til ein velkjent behaldar, i dømet visser vi korleis
du gjer dette:

Get-ADDomain 14e-DC.local | FL
UsersContainer,ComputersContainer,DomainControllersContainer,DeletedObjects
Container,SystemsContainer,LostAndFoundContainer,QuotasContainer,ForeignSec
urityPrincipalsContainer
Searching for a Large Number of Objects
Vi skal no sjå på korleis du kan søke etter store mengder av objekt i AD DS. I dømet visser korleis du
hentar ut ein stor mengde objekt frå domene partisjonen til 14e-DC.local domenet:

Get-ADObject -filter {name-like '*'}-SearchBase 'DC=14e-DC,DC=local'-
ResultSetSize $null | Measure-Object

I tillegg til standard LDAP attributta, kan du kalle på følgjande utvidda eigenskaper til Get-ADObjekt
cmdlet ved og bruke –Properties parameter:
ObjectClass, Created, Modified, Deleted, ProtectedFromAccidentalDeletion



Viewing the Attributes of an Object
Vi skal no sjå korleis du kan sjå på attributta til eit objekt, i AD DS. I dømet ser vi korleis du ser på
attributtane Name og CanonicalName til sites i 14e-DC.local domenet:

Get-ADObject -Filter 'ObjectClass -eq "site"' -SearchBase
'CN=Configuration,DC=14e-DC,DC=local' -Properties CanonicalName | FT
Name,CanonicalName -A

I tillegg til standard LDAP attributta kan du kalle på følgjande utvidda eigenskapar til Get-ADObject
cmdlet ved og bruke –Properties parameter:

ObjectClass, Created, Modified, Deleted, ProtectedFromAccidentalDeletion



Søke med eit Bitwise Filter
Vi skal no sjå på korleis du kan søke etter objekt i ADDS basert på eit bitwise filter spørjing. I dømet
demonstrer vi korleis du søker for alle universal groups i eit domenet ved og bruke eit bitwise filter:

Get-ADObject -Filter 'GroupType -band 8'



Skape/opprette eit objekt
Vi skal no sjå korleis du kna lage eit objekt i AD DS. I dømet visser vi korleis du lager eit nytt site
objekt i 14e-DC.local domenet:

New-ADObject -Name 'BO3' -Type site -Description 'Branch Office 3' -Path
'CN=Sites,CN=Configuration,DC=14e-DC,DC=local'

Dei følgjande parameterane er dei vanligaste brukte parameterane for skaping/oppretting av AD
objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion
Søke i Global Catalog
(Searching the Global Catalog) Vi skal no sjå korleis du kobler til og søker i global katalogen. I dømete
visser vi korleis du gjer dette og finner alle brukarane i 14e-DC.local skogen:

Get-ADObject -Filter 'ObjectClass -eq "users"' –Server corp-DC12:3268 -
SearchBase 'DC=14e-DC,DC=local' -Properties Name,sAMAccountName | FT
Name,sAMAccountName



Søkke for objekter i eit domen
Vi skal no sjå på korleis du kan søke etter objekt i eit domene i AD DS. I følgjande døme demonstrer
vi korleis du søker eter alle computer objekt i 14e-DC.local domenet:

Get-ADObject -Filter 'ObjectClass -eq "computer"' -SearchBase 'DC=14e-
DC,DC=local' -Properties Name,sAMAccountName | FT Name,sAMAccountName

I tillegg til standard LDAP attributta kan du kalle på følgjande utvidda eigenskapar til Get-ADObject
cmdlet ved og bruke –Properties parameter:

ObjectClass, Created, Modified, Deleted, ProtectedFromAccidentalDeletion



Slette ein behalder som har Child Objekt
(Deleting a Container That Has Child Objects) Vi skal no sjå på korleis du slettar ein behaldar som har
child objekt i AD DS. I dømet slettar vi OUen Finance, denne har child objekter:

Remove-ADObject "OU=Finance,OU=UserAccounts,DC=14e-DC,DC=local" -Recursive



Modifisere eit objekt
Vi skal no sjå på korleis vi kan modifiser attributtane til eit objekt i AD DS. I døme endrar vi på
Description attributtet til AntonioAl Direct Reports Distribution list i 14e-DC.local domenet:

Set-ADObject 'CN=AntonioAl Direct
Reports,OU=Finance,OU=UserAccounts,DC=14e-local,DC=local' -Description
"Distribution List of Antonio Alwan Direct Reports"

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Modifisere ein Bit Flag attributt
Vi skal no sjå på korleis du kan modifisere bit flag attributt til eit objekt i AD DS. I dømet visser vi det
med å endre på flag attributtet userAccountControl til brukar objektet SaraDavis til Enabled:

Set-ADObject 'SaraDavis' -Replace @{<BitflagAttributeName>='512'}
Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Connecting to an Object GUID
Vi skal no sjå korleis du kan kople til ein objekts globally unique identifier (GUID) i AD DS. I dømet
visser vi korleis du koplar til brukar objektet SaraDavis ved og bruke objektets GUID:

Get-ADObject -Identity ccc6c0f8-5dd9-42bc-93da-407c6f9695ef



Dynamically Linking an Auxiliary Class
Vi skal no sjå på korleis du kan dynamisk lenke til Auxiliary Class i AD DS. I dømet visser vi korleis du
dynamisk lenker auxiliary class objektet member User til brukaren SaraDavis:

Set-ADObject SaraDavis -Add @{ObjectClass="User"}

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane til AD
objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Refreshing a Dynamic Object
Vi skal no sjå på korleis du forfriske eit dynamisk objekt i AD DS. I dømet refreshar vi Time to Live
attributtet til den dynamiske brukar objektet Brad Sutton:

Set-ADObject -Identity ‘CN=Brad Sutton,OU=Accounting,DC=14e-DC,DC=local’ -
Replace @{entryTTL="200000"}

Du kan bruke følgjande parameters når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Exporting Objects to a CSV File
Vi skal no sjå på korleis du kan eksportere objekt i AD DS til ein CSV fil (comma-separated value). I
døme eksporterar vi OUen ManagedGroups og alle child objektar til ein CSV fil:

Get-ADObject -Filter 'Name -like "*"' -Searchbase 'OU=ManagedGroups,DC=14e-
DC,DC=local' | Export-CSV ExportOU.csv

I tillegg til standard LDAP attributta kan du kalle på følgjande utvidda eigenskaper til Get-ADObjekt
cmdlet ved og bruke –Properties parameteren:

ObjectClass, Created, Modified, Deleted, ProtectedFromAccidentalDeletion
Importing Objects by Using a CSV File
Vi skal no sjå korleis du kan importere objekt frå ein CSV fil til AD DS. I dømet importerar vi OUen
ManagedGroups og alle child objekt frå ein CSV fil:

Import-CSV ImportOU.csv | foreach {New-ADObject -Path $_.Path -Name $_.Name
-Type $_.Type}

Følgjande parameter er dei vanligaste brukte parameterane for å lage AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Referencing an External Domain
Vi skal no sjå på korleis vi kan referere til eit eksternt domene i AD DS. Vi skal visse korleis du kan
lagge ein kryss-referanse (cross-reference) til test.local domenet i 14e-DC.local domenet:

New-ADObject -Name test -Type crossref -OtherAttributes
@{NcName="DC=TEST,DC=local";DnsRoot="test-dc.test.local"} -Path
'CN=Partitions,CN=Configuration,DC=14e-DC,DC=local' -Description 'Eit kryss
referanse til eksterne domenet test.local'

Dei følgjande verdiane er dei meste brukte verdiane som er brukt ved oppretting/skaping av ein ny
AD objekt:

Description, DisplayName, ProtectedFromAccidentalDeletion



Renaming an Object
Vi skal no sjå korleis du kan endre namnet til eit objekt i AD DS. I dømet visser vi korleis vi endrar
namnet (name attributtet) til OUen ManagedGroups til Groups:

Rename-ADObject "OU=ManagedGroups,OU=Managed,DC=14e-DC,DC=local" -NewName
Groups

Det følgjande property value er verdien som er brukt når du skal endre namnet til eit AD objekt:

NewName



Moving an Object to a Different OU or Container
Vi skal no sjå på korleis du kan flytte eit objekt il ein annen OU eller behalder i AD DS. I dømet vårt
ser vi korleis vi kan flytte brukar objektet Brad Sutton frå Brukar behalderen til OU Accounting i
domenet vårt:

Move-ADObject 'CN=Brad Sutton,CN=Users,DC=14e-DC,DC=local' -TargetPath
'OU=Accounting,DC=14e-DC,DC=local'
Deleting an Object
Vi ser no på korleis du kan slette eit objekt i AD DS. I døme sletter vi computer objektet AmyA1-
LPTOP frå AD DS:

Remove-ADObject 'CN=AmyAl-LPTOP,CN=Computers,DC=14e-DC,DC=local'



Viewing the Created and Last Modified Time Stamp of an Object
Vi skal no sjå på korleis du kan sjå på det siste laga og siste modifiserte Time Stamp til eit objekt i AD
DS. I dømet demonstrar vi korleis du kan sjå det Created og Last Modified time stamp til OUen
ManagedGroups i 14e-DC.local domenet:

Get-ADObject ManagedGroups -Properties Created,Modified



Searching for Deleted Objects
Vi skal sjå korleis vi søke etter sletta objekt i AD DS. I dømet søker vi etter sletta OUen
Finance_Department i 14e-DC.local:

Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Finance_Department)" –
IncludeDeletedObjects



Restoring a Single Object
Vi skal no sjå korleis du kan gjenopprette eit enkelt objekt i AD DS. I dømet visser vi korleis vi
gjennopprettar den sletta OUen Accounting_Department i 14e-DC.local domenet:

Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Accounting_Department)" –
IncludeDeletedObjects | Restore-ADObject



Restoring a Container Object and Its Children
Vi ser no på korleis du gjenopprettar ein behaldar objekt og childeren objekta i AD DS. I dømet visser
korleis vi gjenopprettar OUen Finance_Department i 14e-DC.local

Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=Finance_Department)" –
IncludeDeletedObjects | Restore-ADObject

Du må først gjenopprett foreldre objekte og so gjenopprette child objektet fordi behalderen må
eksistere for at objekt skal kunne bli gjennoppretta til deira rettmesige lokasjon. Det følgjande dømet
gjenopprettar dei sletta child objekta til OUen Finance_Department:

Get-ADObject -SearchBase "CN=Deleted Objects,DC=14e-DC,DC=local" -Filter
{lastKnownParent -eq "OU=Finance_Department,DC=14e-DC,DC=local"} -
IncludeDeletedObjects | Restore-ADObject
Viewing the ACL for an Object
Vi skal no sjå på korleis du kan sjå ACL(access control List) til eit objekt i AD DS. I dømet viser vi korleis
du kan sjå ACLen til brukaren TempUser. I dømet AD er namnet til active Directory PowerShell dirve
som er koplet til AD DS.

(Get-ACL 'AD:\CN=TempUser,CN=Users,DC=14e-local,DC=local').Access | ft
IdentityReference,AccessControlType -A




Forest and Domain Management
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Finding the Domains in a Forest
Vi skal no sjå på korleis du kan finne domener i ein skog i AD DS. I dømet leigtar vi domener i 14e-
DC.local domenet:

Get-ADForest –Identity 14e-DC



Raising the Domain Functional Level to Windows 2000 Native
Vi tar no opp korleis du kan auke domene functional level til Windows 2000 native. Vi visser korleis
du gjer det i 14e-DC.local domenet:

Set-ADDomainMode -Identity 14eDC -DomainMode Windows2000

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med og auke domene functional level i AD DS:

-Windows2000, -Windows2003InterimDomain, -Windows2003Domain, -Windows2008Domain, -
Windows2008R2Domain



Finding the NetBIOS Name of a Domain
Vi skal no sjå korleis du kan finne NetBIOS namnet til eit domene i AD DS. I dømet visser vi korleis du
gjer dette i 14e-DC.local domenet:

Get-ADDomain –Identity 14e-DC.local
Raising the Functional Level to a Windows Server 2003 Domain
Vi skal no sjå korleis du kan auke domene functional level til Windows server 2003 og Windows
Server 2003 interim. Vi har 2 dømer i det første aukar vi det til Windows server 2003 i 14e-DC.local, i
døme 2 aukar vi det til Windows server 2003 interim i det same domenet:

Døme 1:

Set-ADDomainMode -Identity 14e-DC.local -DomainMode Windows2003Domain

Døme 2:

Set-ADDomainMode -Identity 14e-DC.local -DomainMode
Windows2003InterimDomain

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med å auke domene functional level i AD DS:

-Windows2000, -Windows2003InterimDomain, -Windows2003Domain, -Windows2008Domain, -
Windows2008R2Domain



Viewing the Trusts for a Domain
Vi skal no sjå korleis vi ser på Trusts for eit domenet i AD DS. I dømet visser vi korleis du ser trust for
domenet som du er logga på:

Get-ADObject -Filter {objectClass -eq "trustedDomain"} -Properties
TrustPartner,TrustDirection,trustType | FT
Name,TrustPartner,TrustDirection,TrustType



Raising the Functional Level to a Windows Server 2003 Forest
Vi skal no sjå korleis du aukar functional level til ein Windows server 2003 skog. I dømet visser vi
korleis du aukar functional levelet til ein Windows server 2003 skog til Windows server 2008:

Set-ADForestMode -Identity 14e-DC.local -ForestMode Windows2008Forest

eller

Set-ADForestMode -Identity 14e-DC.local -ForestMode Windows2008R2Forest

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane som er assosiert
med å auke skog(forest) funciton level i AD DS:

-Windows2003InterimForest, -Windows2003Forest, -Windows2008Forest, -Windows2008R2Forest



Modifying the Tombstone Lifetime for a Domain
Vi skal no forklare korleis du kan modifisere gravstein livstida for eit domen i AD DS. I dømet gjer vi
det for 14e-DC domenet:
Set-ADObject -Identity "CN=Directory Service,CN=Windows
NT,CN=Services,CN=Configuration,DC=14e-DC,DC=local" -Partition
"CN=Configuration,DC=14e-DC,DC=local" -Replace @{tombstoneLifetime='210'}

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion




Domain Controller and Operations Master Management
For ein full forklaring på parameter som kan sende til ein cmlet i Active Directory module command
prompt skriv inn Get-Help <namnet til cmdlet> -detailed og trykk ENTER.



Finding the Domain Controllers for a Domain
Vi skal no sjå på korleis du kan finne domene kontrollaren i eit domene i AD DS. I dømet gjer vi det i
domenet vårt 14e-DC.local

Get-ADDomainController -Discover -DomainName 14e-DC.local

I tillegg til standard LDAP attributta kan du kalle på følgjande utvidda eigenskapar til Get-
ADDomainCOntroller cmdlet ved å bruke –Properties parameter:

ComputerObjectDN, Domain, Enabled, Forest, IsGlobalCatalog, IsReadOnly, OperatingSystem,
OperatingSystemHotfix, OperatingSystemServicePack, OperatingSystemVersion, ServerObjectGuid



Finding the Closest Domain Controller
Vi skal no sjå korleis du finner den nærmaste domene kontrollaren i AD DS. I dømet visser vi korleis vi
gjer det i 14e-DC.local domenet:

Get-ADDomainController –DomainName 14e-DC-Discover -NextClosestSite



Finding a Domain Controller's Site
Vi skal no sjå korleis vi kan finne sida(site) til ein domene kontroller i AD DS. I dømet visser vi korleis
vi finner sida(site) til domen kontrolleren Srv-DC1:

Get-ADDomainController -Identity Srv-DC1 | FT Name,Site



Finding the Global Catalog Servers in a Forest
Vi skal no sjå korleis du kan finne global catalog serverar i ein skog. I dømet demonstrar vi korleis du
finne global katalog serverar i 14e-DC skogen:
Get-ADForest 14e-DC.local | FL GlobalCatalogs



Moving a Domain Controller to a Different Site
Vi skal no sjå korleis du kan flytte ein domene kontroller til ein anna side/plass(site) i AD DS. I dømet
demonstrar vi korleis du flyttar domene kontrollaren 14e-DC2 til site HQ i 14e-DC.local domenet:

Move-ADDirectoryServer -Identity 14e-DC2 -Site
"CN=HQ,CN=Sites,CN=Configuration,DC=14e-DC,DC=local"



Enabling and Disabling the Global Catalog
Vi skal no sjå korleis du kan enable eller diable global katalog i AD DS. I dømet demonstrer vi korleis
du kan enable global katalogen i 14e-DC.local domenet:

Set-ADObject "CN=NTDS Settings,CN=14e-DC1,CN=Servers,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=14e-DC,DC=local" -Replace@{options='1'}

For å diable den globale katalogen, erstatt verdien 1 med 0

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Determining Whether Global Catalog Promotion Is Complete
Vi skal no sjå på korleis du finne ut om global catalog promotion er ferdig. Når du gjennomfører
denne oppgåve, oppgraderer(promote) du ein spesifikk domene kontroller til og være ein global
catalog domain controller for eit domene. I dømet visser vi korleis du kan gjer det for server 14e-DC1:

Get-ADRootDSE -Server 14e-DC1 | FT GlobalCatalogReady



Finding the Domain Controllers or Global Catalog Servers in a Site
Vi skal no sjå på korleis du kan finne domene kontrollera eller Globale catalog serverar i ein side(site).
I dømet demonstrer vi korleis du korleis du finner dei global catalog servers i ein skog:

Get-ADDomainController -Filter {Site -eq 'Default-First-Site-Name'} | FT
Name,IsGlobalCatalog



Finding Domain Controllers and Global Catalogs with DNS
Vi skal no sjå korleis du kan finne domene kontrollerar eller global catalogs med DNS(Domain Name
System). I dømet visser vi korleis du finner dei globale katalog serverane i ein skog ved og bruke DNS:

Get-ADDomainController -Discover [-AvoidSelf] [-Writable] [-DomainName
<String>] [-ForceDiscover] [-NextClosestSite] [-Service
<ADDiscoverableService[]>] [-MinimumDirectoryServiceVersion
<ADMinimumDirectoryServiceVersion>] [-SiteName <String>]



Enabling Universal Group Caching
Vi skal no sjå korleis du kan enable universal group caching. I dømet demonstrer vi korleis du kan
enable universal group caching i 14e-DC skogen:

Set-ADObject -Identity "CN=NTDS Site Settings,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=14e-DC,DC=local" -Partition
"CN=Configuration,DC=14e-DC,DC=local" -Replace @{Options='32'}

Du kan bruke følgjande parameter når du skal setje mange av dei vanlige verdiane til AD objekt:

-Description, -DisplayName, -ProtectedFromAccidentalDeletion



Seizing an Operations Master Role
Vi ser no på korleis du kan bruke AD modul for Windows PowerShell til å overføre (”seize”) ein
operations master(ogso kjent som ein fleksibel singel master operasjon eller FSMO) rolle. I dømet
demonstrer vi korleis du seize(gripper) ein operations master role:

Move-ADDirectoryServerOperationMasterRole -Identity 14e-DC1 -
OperationMasterRole RIDMaster,InfrastructureMaster,DomainNamingMaster -
Force



Finding the PDC Emulator Role Owner with DNS
Vi skal no sjå korleis du kan finne primary domain controller(PDC) emulator operations master(ogso
kjent som ein fleksibel singel master operasjon eller FSMO) role eigaren ved og bruke DNS(Domain
Name System). I dømet demonstrer vi korleis du finner PDC emulator operations master role eigaren
ved og bruke DNS:

Get-ADDomainController -Discover -Service PrimaryDC



Finding the Operations Master Role Holders
Vi skal no sjå korleis du kan finne operations master (ogso kjent som ein fleksibel singel master
operasjon eller FSMO) rolle innehavaren. I dømet visser vi korleis du finner operations master role
holders for 14e-DC.local skogen eller 14e-DC.local domenet:

Get-ADForest 14e-DC.local | FT SchemaMaster,DomainNamingMaster

eller:

Get-ADDomain 14e-DC.local | FT PDCEmulator,RIDMaster,InfrastructureMaster
Transferring an Operations Master Role
Vi skal no sjå korleis du kan overføre operations master roller. I dømet demonstrar vi korleis du
overfører Operation Master, RID master og Domain Naming Master roles til server 14e-DC1 i
domenet der du er noverande logga på:

Move-ADDirectoryServerOperationMasterRole -Identity 14e-DC1 -
OperationMasterRole RIDMaster,InfrastructureMaster,DomainNamingMaster



Cmdlets i AD
Under følgjer ein liste med alle cmdlets som blei laget til Active Directory i Windows Server 2008 R2.

The following table lists all the cmdlets that are available in this release of the Active
Directory module in Windows Server 2008 R2.

                          Cmdlet                                             Description

Add-ADComputerServiceAccount                                    Adds one or more service accounts
                                                                to an Active Directory computer.
Add-ADDomainControllerPasswordReplicationPolicy                 Adds users, computers, and groups
                                                                to the Allowed List or the Denied
                                                                List of the read-only domain
                                                                controller (RODC) Password
                                                                Replication Policy (PRP).
Add-ADFineGrainedPasswordPolicySubject                          Applies a fine-grained password
                                                                policy to one more users and
                                                                groups.
Add-ADGroupMember                                               Adds one or more members to an
                                                                Active Directory group.
Add-ADPrincipalGroupMembership                                  Adds a member to one or more
                                                                Active Directory groups.
Clear-ADAccountExpiration                                       Clears the expiration date for an
                                                                Active Directory account.
Disable-ADAccount                                               Disables an Active Directory
                                                                account.
Disable-ADOptionalFeature                                       Disables an Active Directory
                                                                optional feature.
Enable-ADAccount                                                Enables an Active Directory
                                                                account.
Enable-ADOptionalFeature                                        Enables an Active Directory
                                                                optional feature.
Get-ADAccountAuthorizationGroup                                 Gets the Active Directory security
                                                                groups that contain an account.
Get-ADAccountResultantPasswordReplicationPolicy    Gets the resultant password
                                                   replication policy for an
                                                   Active Directory account.
Get-ADComputer                                     Gets one or more Active Directory
                                                   computers.
Get-ADComputerServiceAccount                       Gets the service accounts that are
                                                   hosted by an Active Directory
                                                   computer.
Get-ADDefaultDomainPasswordPolicy                  Gets the default password policy
                                                   for an Active Directory domain.
Get-ADDomain                                       Gets an Active Directory domain.
Get-ADDomainController                             Gets one or more Active Directory
                                                   domain controllers, based on
                                                   discoverable services criteria,
                                                   search parameters, or by providing
                                                   a domain controller identifier, such
                                                   as the NetBIOS name.
Get-ADDomainControllerPasswordReplicationPolicy    Gets the members of the Allowed
                                                   List or the Denied List of the
                                                   RODC PRP.
Get-                                               Gets the resultant password policy
ADDomainControllerPasswordReplicationPolicyUsage   of the specified ADAccount on the
                                                   specified RODC.
Get-ADFineGrainedPasswordPolicy                    Gets one or more Active Directory
                                                   fine-grained password policies.
Get-ADFineGrainedPasswordPolicySubject             Gets the users and groups to which
                                                   a fine-grained password policy is
                                                   applied.
Get-ADForest                                       Gets an Active Directory forest.
Get-ADGroup                                        Gets one or more Active Directory
                                                   groups.
Get-ADGroupMember                                  Gets the members of an
                                                   Active Directory group.
Get-ADObject                                       Gets one or more Active Directory
                                                   objects.
Get-ADOptionalFeature                              Gets one or more Active Directory
                                                   optional features.
Get-ADOrganizationalUnit                           Gets one or more Active Directory
                                                   OUs.
Get-ADPrincipalGroupMembership                     Gets the Active Directory groups
                                                   that have a specified user,
                                                   computer, or group.
Get-ADRootDSE                                      Gets the root of a domain controller
                                              information tree.
Get-ADServiceAccount                          Gets one or more Active Directory
                                              service accounts.
Get-ADUser                                    Gets one or more Active Directory
                                              users.
Get-ADUserResultantPasswordPolicy             Gets the resultant password policy
                                              for a user.
Install-ADServiceAccount                      Installs an Active Directory service
                                              account on a computer.
Move-ADDirectoryServer                        Moves a domain controller in
                                              AD DS to a new site.
Move-ADDirectoryServerOperationMasterRole     Moves operation master (also
                                              known as flexible single master
                                              operations or FSMO) roles to an
                                              Active Directory domain controller.
Move-ADObject                                 Moves an Active Directory object
                                              or a container of objects to a
                                              different container or domain.
New-ADComputer                                Creates a new Active Directory
                                              computer.
New-ADFineGrainedPasswordPolicy               Creates a new Active Directory
                                              fine-grained password policy.
New-ADGroup                                   Creates an Active Directory group.
New-ADObject                                  Creates an Active Directory object.
New-ADOrganizationalUnit                      Creates a new Active Directory
                                              OU.
New-ADServiceAccount                          Creates a new Active Directory
                                              service account.
New-ADUser                                    Creates a new Active Directory
                                              user.
Remove-ADComputer                             Removes an Active Directory
                                              computer.
Remove-ADComputerServiceAccount               Removes one or more service
                                              accounts from a computer.
Remove-                                       Removes users, computers, and
ADDomainControllerPasswordReplicationPolicy   groups from the Allowed List or
                                              the Denied List of the RODC PRP.
Remove-ADFineGrainedPasswordPolicy            Removes an Active Directory fine-
                                              grained password policy.
Remove-ADFineGrainedPasswordPolicySubject     Removes one or more users from a
                                              fine-grained password policy.
Remove-ADGroup                                Removes an Active Directory
                                              group.
Remove-ADGroupMember                Removes one or more members
                                    from an Active Directory group.
Remove-ADObject                     Removes an Active Directory
                                    object.
Remove-ADOrganizationalUnit         Removes an Active Directory OU.
Remove-ADPrincipalGroupMembership   Removes a member from one or
                                    more Active Directory groups.
Remove-ADServiceAccount             Removes an Active Directory
                                    service account.
Remove-ADUser                       Removes an Active Directory user.
Rename-ADObject                     Changes the name of an
                                    Active Directory object.
Reset-ADServiceAccountPassword      Resets the service account
                                    password for a computer.
Restore-ADObject                    Restores an Active Directory
                                    object.
Search-ADAccount                    Gets Active Directory user,
                                    computer, and service accounts.
Set-ADAccountControl                Modifies user account control
                                    (UAC) values for an
                                    Active Directory account.
Set-ADAccountExpiration             Sets the expiration date for an
                                    Active Directory account.
Set-ADAccountPassword               Modifies the password of an
                                    Active Directory account.
Set-ADComputer                      Modifies an Active Directory
                                    computer.
Set-ADDefaultDomainPasswordPolicy   Modifies the default password
                                    policy for an Active Directory
                                    domain.
Set-ADDomain                        Modifies an Active Directory
                                    domain.
Set-ADDomainMode                    Sets the domain functional level for
                                    an Active Directory domain.
Set-ADFineGrainedPasswordPolicy     Modifies an Active Directory fine-
                                    grained password policy.
Set-ADForest                        Modifies an Active Directory
                                    forest.
Set-ADForestMode                    Sets the forest mode for an
                                    Active Directory forest.
Set-ADGroup                         Modifies an Active Directory
                                    group.
Set-ADObject                        Modifies an Active Directory
                             object.
Set-ADOrganizationalUnit     Modifies an Active Directory OU.
Set-ADServiceAccount         Modifies an Active Directory
                             service account.
Set-ADUser                   Modifies an Active Directory user.
Uninstall-ADServiceAccount   Uninstalls an Active Directory
                             service account from a computer.
Unlock-ADAccount             Unlocks an Active Directory
                             account.
Exchange 2010 Administration
Vi begynner med å koble til Exchange Managment Shell fra remote gjennom Powershell, går her ut
ifra at WinRM og Enable-PSRemoting allerede er kjørt på Exchange Tjeneren.

PS>$user = Get-Credential
PS>$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri
http://14e-exchange.14e-ad.local/powershell/ -Credential $user –Authentication Kerberos
PS> Import-PSSession $Session

Vil gi oss tilgang på alle Exchange kommandoene i det lokale skallet. Det er en relativt gigantisk liste
og kan finnes på Tech-Net, med deler av den gjengitt her
Get/Remove/New-Mailbox er hoved kommandoen som vi gjerne starter med, Get-Mailbox, kjørt
uten attributter gir oss en oversikt over alle Mailboksene som er på Exchange tjeneren vi kjører den
på, det er mulig å korte dette ned til for eksempel en spesifik bruker, Get-mailbox –Identity
TestBruker, eller fra en OU, Get-Mailbox –OrganizationalUnit Users


Opprette en ny bruker og mailboks
Når vi kjører New-Mailbox vil det også opprettes en tilsvarende AD Bruker for bruker-navnet som blir
oppgitt, noe som også er sant for Remove-Mailbox, da vil tilhørende AD Bruker bli slettet fra AD
databasen. Attributter som det er viktig å ta med er –UserPrincipalName, -Alias, -Name, -Database, -
OrganizationalUnit og –ResetPasswordOnNextLogon. Når vi oppretter en ny postboks kan vi også
sette opp en arkiv postboks som ligger under den samme postboksen, dette er også mulig å legge til
senere med Set-Mailbox kommandoen eller bruke Connect-Mailbox for å sette en annen postboks
som allerede eksisterer som arkiv boksen.

Mailbox

Connect       Kobler en bruker til en allerede eksisterende mailboks

Disable       Slår av en mailboks

Enable        Brukes for å lage en mailboks for en bruker som allerede eksisterer i AD.

Get           Anskaffer en liste over mailbokser

New           Oppretter en ny mailboks med tilhørende AD bruker

Remove        Fjerner en mailboks og AD bruker

Restore       Brukes for å hente ut gjennopprettings data fra backup databasen

Set           Modifiserer innstillingene til en mailbox. For å gjøre dette for flere brukere
              samtidig kan vi pipe for eksempel Get-Mailbox inn i den, for eksempel:




DistributionGroup     Er en gruppe som mail kan sendes til som sender den mailen til alle
                      medlemmer av gruppen
Get                   Brukes for liste ut Distribution Group

Set                   Forandering innstillinger til en Distribution Group

Remove                Fjerne en Distribution Group

New                   Lage en ny Distribution Group

Enable                Sette opp en tilhørighet til en eksisterende Universal gruppe.



Opprette en backup Mailboks Database

New-MailboxDatabase [-Name <String>] -Recovery <SwitchParameter> -Server
<ServerIdParameter> [-Confirm [<SwitchParameter>]] [-DomainController
<Fqdn>] [-EdbFilePath <EdbFilePath>] [-LogFolderPath
<NonRootLocalLongFullPath>] [-WhatIf [<SwitchParameter>]]

Vi bruker New-MailBoxDatabase med opsjonen -Recovery for å opprette en ny Database som brukes
til backup. Når vi da vil kjøre en gjennoppretting bruker vi Restore-Mailbox for å hente ut dataen fra
backup databasen.


Opprette en ny Adresse liste
For å opprette en ny adresse liste å aktivere den bruker vi New-AddressList cmdlet’en

New-AddressList -Name <String> [-Confirm [<SwitchParameter>]] [-Container
<AddressListIdParameter>] [-DisplayName <String>] [-DomainController
<Fqdn>] [-Organization <OrganizationIdParameter>] [-RecipientContainer
<OrganizationalUnitIdParameter>] [-RecipientFilter <String>] [-WhatIf
[<SwitchParameter>]]

New-AddressList –Name UtviklingAdresseListe -ConditionalDepartment
Utvikling –IncludeRecipients Mailboxusers

Her lager vi en ny adresseliste som inneholder alle som har mailbokser som tilhører Utviklings
avdelingen. Dette kan være hendig når vi for eksempel skal automatisere opprettingen av adresse
lister, og automatisk oppdateringer av eksisterende adresse lister når en ny person blir ansatt i en
avdeling, til det bruker vi “Update-AddressList” cmdlet’et.

Søke i en mailboks
For å søke i en mailboks og for eksempel kopiere resultatet til en annen mailboks bruker vi Search-
Mailbox cmdlet’et.

Search-Mailbox -Identity <MailboxIdParameter> [-Confirm
[<SwitchParameter>]] [-DomainController <Fqdn>] [-DoNotIncludeArchive
<SwitchParameter>] [-IncludeUnsearchableItems <SwitchParameter>] [-LogLevel
<Suppress | Basic | Full>] [-SearchDumpster <SwitchParameter>] [-
SearchQuery <String>] [-WhatIf [<SwitchParameter>]]
Search-Mailbox –Identity ‚Clark Kent‛ –SearchQuery ‚Subject:Lois Lane‛ –
TargetMailbox ‚Fortress_of_Solitude‛ -TargetFolder ‚LexLuthor‛

Her henter vi alle e-poster som inneholder Lois Lane i tittel linjen og kopierer dem fra post-boksen
““Fortress_of_Solitude” til postboksen som tilhører LexLuthor

Regler for sortering av epost.
Med InboxRule kan vi sortere og gjøre andre administrative oppgaver med e-post gitt regler som blir
aktivert ut ifra at e-posten samsvarerer med en eller flere av de.

New-InboxRule -FromMessageId <MailboxStoreObjectIdParameter> -ValidateOnly
<SwitchParameter> [-Confirm [<SwitchParameter>]] [-DomainController <Fqdn>]
[-ExceptIfFromSubscription <AggregationSubscriptionIdentity[]>] [-Force
<SwitchParameter>] [-FromSubscription <AggregationSubscriptionIdentity[]>]
[-Mailbox <MailboxIdParameter>] [-WhatIf [<SwitchParameter>]]
New-InboxRule ‚CheckActionRequired‛ –MyNameInToBox $true –FlaggedForAction
Any –MarkImportanceHigh

Hvis navnet til eieren av postboksen finnes i –Til feltet så blir e-posten
markert for høy prioritet.


Forandre attributter til postboks databasen
For å forandre attributter til postboks databasen bruker vi Set-MailBoxDatabase cmdlet’et, hvor vi
for eksempel kan sette om det er mulig å gjennopprette en epost etter at den er slettet eller hvor
langt tilbake hendelses loggen skal føres.

Set-MailboxDatabase -Identity <DatabaseIdParameter> [-AllowFileRestore
<$true | $false>] [-BackgroundDatabaseMaintenance <$true | $false>] [-
CircularLoggingEnabled <$true | $false>] [-Confirm [<SwitchParameter>]] [-
DataMoveReplicationConstraint <None | SecondCopy | SecondDatacenter |
AllDatacenters | AllCopies>] [-DeletedItemRetention <EnhancedTimeSpan>] [-
DomainController <Fqdn>] [-EventHistoryRetentionPeriod <EnhancedTimeSpan>]
[-IndexEnabled <$true | $false>] [-IsExcludedFromProvisioning <$true |
$false>] [-IssueWarningQuota <Unlimited>] [-IsSuspendedFromProvisioning
<$true | $false>] [-JournalRecipient <RecipientIdParameter>] [-
MailboxRetention <EnhancedTimeSpan>] [-MaintenanceSchedule <Schedule>] [-
MountAtStartup <$true | $false>] [-Name <String>] [-OfflineAddressBook
<OfflineAddressBookIdParameter>] [-ProhibitSendQuota <Unlimited>] [-
ProhibitSendReceiveQuota <Unlimited>] [-PublicFolderDatabase
<DatabaseIdParameter>] [-QuotaNotificationSchedule <Schedule>] [-
RecoverableItemsQuota <Unlimited>] [-RecoverableItemsWarningQuota
<Unlimited>] [-RetainDeletedItemsUntilBackup <$true | $false>] [-
RpcClientAccessServer <ClientAccessServerOrArrayIdParameter>] [-WhatIf
[<SwitchParameter>]]


Set-MailboxDatabase ‚Exchange Mailbox Database‛ –DeletedItemRetention
7.00:00:00

Med denne kommandoen setter vi at objekter som er slettet fra databasen blir holdt i 7 dager før de
blir faktisk slettet fra databasen.
Liste ut postboks tjenere
For å liste ut en postboks server og dens attributter bruker vi Get-MailBoxServer. Hvis vi ikke
spesifiserer en server vil den liste ut alle postboks tjenerne på Exchange tjeneren.

Get-MailboxServer [-Identity <MailboxServerIdParameter>] [-DomainController
<Fqdn>] [-Status <SwitchParameter>]


Distribution Group
For å opprette en ny Distribusjons gruppe, altså en samling epost adresser som operer som en
adresse når vi sender mail til den. Hendig når for eksempel vi ønsker at det skal være en
“Administrator” gruppe, med alle administratorene som medlemmer i denne gruppen, vil det tilsi at
når noen sender en mail til Administrator@14e-ad.local vil den bli sendt til alle administratorene.

New-DistributionGroup -Name <String> [-Alias <String>] [-ArbitrationMailbox
<MailboxIdParameter>] [-BypassNestedModerationEnabled <$true | $false>] [-
Confirm [<SwitchParameter>]] [-CopyOwnerToMember <SwitchParameter>] [-
DisplayName <String>] [-DomainController <Fqdn>] [-ExternalManaged
<SwitchParameter>] [-ManagedBy <RecipientIdParameter[]>] [-
MemberDepartRestriction <Closed | Open | ApprovalRequired>] [-
MemberJoinRestriction <Closed | Open | ApprovalRequired>] [-Members
<RecipientIdParameter[]>] [-ModeratedBy <MultiValuedProperty>] [-
ModerationEnabled <$true | $false>] [-Notes <String>] [-Organization
<OrganizationIdParameter>] [-OrganizationalUnit
<OrganizationalUnitIdParameter>] [-PartnerObjectId <Guid>] [-
PrimarySmtpAddress <SmtpAddress>] [-RoomList <SwitchParameter>] [-
SamAccountName <String>] [-SendModerationNotifications <Never | Internal |
Always>] [-Type <Distribution | Security>] [-WhatIf [<SwitchParameter>]]


New-DistributionGroup –Name “Administrator” –OrganizationalUnit “14e-ad.local/Admins” –
SamAccountName “Administrators” –Type “Security”

Import-Mailbox
Brukes for å importere data fra .pst filer til en postboks.

import-Mailbox [-Identity <MailboxIdParameter>] -PSTFolderPath <LongPath>
[-AllContentKeywords <String[]>] [-AllowDuplicates <SwitchParameter>] [-
AttachmentFilenames <String[]>] [-BadItemLimit <Int32>] [-Confirm
[<SwitchParameter>]] [-ContentKeywords <String[]>] [-EndDate <DateTime>] [-
ExcludeFolders <MapiFolderPath[]>] [-GlobalCatalog <Fqdn>] [-
IncludeAssociatedMessages <SwitchParameter>] [-IncludeFolders
<MapiFolderPath[]>] [-Locale <CultureInfo>] [-MaxThreads <Int32>] [-
RecipientKeywords <String[]>] [-SenderKeywords <String[]>] [-StartDate
<DateTime>] [-SubjectKeywords <String[]>] [-ValidateOnly <SwitchParameter>]
[-WhatIf [<SwitchParameter>]]


Export-Mailbox
Brukes for å flytte inneholdet i en postboks til en annen.
export-Mailbox -Identity <MailboxIdParameter> [-AllContentKeywords
<String[]>] [-AttachmentFilenames <String[]>] [-BadItemLimit <Int32>] [-
Confirm [<SwitchParameter>]] [-ContentKeywords <String[]>] [-
DeleteAssociatedMessages <SwitchParameter>] [-DeleteContent
<SwitchParameter>] [-EndDate <DateTime>] [-ExcludeFolders
<MapiFolderPath[]>] [-GlobalCatalog <Fqdn>] [-IncludeFolders
<MapiFolderPath[]>] [-Locale <CultureInfo>] [-MaxThreads <Int32>] [-
RecipientKeywords <String[]>] [-SenderKeywords <String[]>] [-StartDate
<DateTime>] [-SubjectKeywords <String[]>] [-ValidateOnly <SwitchParameter>]
[-WhatIf [<SwitchParameter>]]


Get-MailboxFolder
Viser alle mappene som tilhører brukeren som kjører denne kommandoen, hvis ikke en annen bruker
er spesifisert og brukeren har rettigheter til å se denne informasjonen.

Get-MailboxFolder [-Identity <MailboxFolderIdParameter>] [-DomainController
<Fqdn>]


Liste ut alle mulige mottakere
Med Get-Recipient kommandoen får vi ut alle mulige mottakere, vi har også mulighet for å fokusere
inn søket etter bestemte attributter.

Get-Recipient [-Identity <RecipientIdParameter>] [-BookmarkDisplayName
<String>] [-Credential <PSCredential>] [-DomainController <Fqdn>] [-Filter
<String>] [-IgnoreDefaultScope <SwitchParameter>] [-IncludeBookmarkObject
<$true | $false>] [-Organization <OrganizationIdParameter>] [-
OrganizationalUnit <OrganizationalUnitIdParameter>] [-PropertySet <All |
ControlPanel | ConsoleSmallSet | ConsoleLargeSet | Minimum>] [-
ReadFromDomainController <SwitchParameter>] [-RecipientType
<RecipientType[]>] [-RecipientTypeDetails <RecipientTypeDetails[]>] [-
ResultSize <Unlimited>] [-SortBy <String>]

PS Scripts:\> Get-Recipient

Name                                                                            RecipientType
----                                                                            -------------
14e-Exchange                                                                    UserMailbox
Administrator                                                                   UserMailbox
Administrators
MailUniversalDistributionGroup
ChrisAshton                                                                     UserMailbox
DiscoverySearchMailbox {D919BA05-46A6-415f-80AD-7E09334B...                     UserMailbox
ExchangeUser01 EXU01.                                                           UserMailbox
Test Distribution Group
MailUniversalDistributionGroup


Her ser vi Get-Recipient kjørt på Exchange serveren vår, her har også alle Distribution gruppene som
er opprettet blitt listet ut.
Hente logon informasjon om brukere
Med Get-Logonstatistics kan vi hente ut data som brukernavn, hvor lenge den har vært innlogget og
når den sist ble sett aktiv.

Get-LogonStatistics -Identity <LogonableObjectIdParameter> [-
DomainController <Fqdn>]

PS Scripts:\> Get-LogonStatistics -Server 14e-exchange

UserName                  ServerName
LogonTime            LastAccessTime
PS Scripts:\> Get-LogonStatistics -Server 14e-exchange

PS Scripts:\> Get-LogonStatistics -Server 14e-exchange
UserName              ServerName          LogonTime        LastAccess
--------        ---------- ---------   ----------
Mailbox Database 05114... 14E-EXCHANGE            29.04.2010 03:17:09   29.04.2010
Mailbox Database 05114... 14E-EXCHANGE            29.04.2010 03:17:09   29.04.2010
SystemMailbox{c141b3ac... 14E-EXCHANGE            29.04.2010 03:17:14   29.04.2010
SystemMailbox{c141b3ac... 14E-EXCHANGE            29.04.2010 03:17:20   29.04.2010
GR14E-EXCHANGE               14E-EXCHANGE         29.04.2010 03:17:09   29.04.2010
GR14E-EXCHANGE               14E-EXCHANGE         29.04.2010 03:17:09   29.04.2010
SystemMailbox{22fb2ae0... 14E-EXCHANGE            29.04.2010 03:17:19   29.04.2010
SystemMailbox{22fb2ae0... 14E-EXCHANGE            29.04.2010 03:17:22   29.04.2010

Her er Get-LogonStatistics kjørt på Exchange serveren vår, og ikke overraskende er det rimelig lenge
siden noen som helst var aktive på den.

Liste ut detaljert Postboks Informasjon
Get-MailboxStatistics -Identity <GeneralMailboxIdParameter> [-Archive
<SwitchParameter>] [-DomainController <Fqdn>] [-IncludeMoveHistory
<SwitchParameter>] [-IncludeMoveReport <SwitchParameter>]


PS Scripts:\> Get-MailboxStatistics -Identity Administrator

DisplayName           ItemCount StorageLimitStatus                                   LastLogonTime
-----------     --------- ------------------                       -------------
Administrator         1              BelowLimit

ThrottlingPolicy
Forandre Throttling policy’en.

Set-ThrottlingPolicy -Identity <ThrottlingPolicyIdParameter> [-Confirm
[<SwitchParameter>]] [-CPUStartPercent <Nullable>] [-DomainController
<Fqdn>] [-EASMaxConcurrency <Nullable>] [-EASPercentTimeInAD <Nullable>] [-
EASPercentTimeInCAS <Nullable>] [-EASPercentTimeInMailboxRPC <Nullable>] [-
EWSFastSearchTimeoutInSeconds <Nullable>] [-EWSFindCountLimit <Nullable>]
[-EWSMaxConcurrency <Nullable>] [-EWSMaxSubscriptions <Nullable>] [-
EWSPercentTimeInAD <Nullable>] [-EWSPercentTimeInCAS <Nullable>] [-
EWSPercentTimeInMailboxRPC <Nullable>] [-ExchangeMaxCmdlets <Nullable>] [-
ForwardeeLimit <Nullable>] [-IMAPMaxConcurrency <Nullable>] [-
IMAPPercentTimeInAD <Nullable>] [-IMAPPercentTimeInCAS <Nullable>] [-
IMAPPercentTimeInMailboxRPC <Nullable>] [-MessageRateLimit <Nullable>] [-
Name <String>] [-OWAMaxConcurrency <Nullable>] [-OWAPercentTimeInAD
<Nullable>] [-OWAPercentTimeInCAS <Nullable>] [-OWAPercentTimeInMailboxRPC
<Nullable>] [-POPMaxConcurrency <Nullable>] [-POPPercentTimeInAD
<Nullable>] [-POPPercentTimeInCAS <Nullable>] [-POPPercentTimeInMailboxRPC
<Nullable>] [-PowerShellMaxCmdletQueueDepth <Nullable>] [-
PowerShellMaxCmdlets <Nullable>] [-PowerShellMaxCmdletsTimePeriod
<Nullable>] [-PowerShellMaxConcurrency <Nullable>] [-RCAMaxConcurrency
<Nullable>] [-RCAPercentTimeInAD <Nullable>] [-RCAPercentTimeInCAS
<Nullable>] [-RCAPercentTimeInMailboxRPC <Nullable>] [-RecipientRateLimit
<Nullable>] [-WhatIf [<SwitchParameter>]]


Set-ThrottlingPolicy –EWSMaxConcurrency 4

Her tillater vi brukerne å maksimum ha 4 kjørende forespørsler til Exchange Web Services samtidig.



Test-ServiceHealth
Sjekker om det er noen servicene som Exchange trenger for å kjøre som ikke har startet.

Test-ServiceHealth [-Server <ServerIdParameter>] [-ActiveDirectoryTimeout
<Int32>] [-Confirm [<SwitchParameter>]] [-DomainController <Fqdn>] [-
MonitoringContext <$true | $false>] [-WhatIf [<SwitchParameter>]]


Get-ExchangeServer
Henter ut attributtene til mål serveren, hvis ikke et mål er oppgitt vil den liste ut den lokale exchange
serverens attributter.

Get-ExchangeServer [-Identity <ServerIdParameter>] [-DomainController
<Fqdn>] [-Status <SwitchParameter>]

PS Scripts:\> Get-ExchangeServer

Name         Site          ServerRole Edition AdminDisplayVersion
----     ----         ---------- ------- -------------------
14E-EXCHANGE      14e-ad.local/Conf... Mailbox,... Standard Version 14.0 (Bu...


(Kjørte Get-ExchangeServer | format-list for letter tilgang til informasjonen)

Her har Get-ExchangeServer blitt kjørt på den lokale Exchange serveren, og vi har fått ut informasjon
som hvilken rolle den har, hvilket domene den tilhører og når den ble opprettet
Adress List

Get-AddressList      Use the Get-AddressList cmdlet to view all attributes of an
                     address list.

                     Get-AddressList [-Identity
                     <AddressListIdParameter>] [-DomainController
                     <Fqdn>] [-Organization <OrganizationIdParameter>]

Move-AddressList     Use the Move-AddressList cmdlet to move an existing
                     address list to a new container under the root address list.

                     Move-AddressList -Identity
                     <AddressListIdParameter> -Target
                     <AddressListIdParameter> [-Confirm
                     [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                     WhatIf [<SwitchParameter>]]
New-AddressList      Use the New-AddressList cmdlet to create a new address list
                     and apply it to recipients.

                     New-AddressList -Name <String> [-Confirm
                     [<SwitchParameter>]] [-Container
                     <AddressListIdParameter>] [-DisplayName <String>]
                     [-DomainController <Fqdn>] [-Organization
                     <OrganizationIdParameter>] [-RecipientContainer
                     <OrganizationalUnitIdParameter>] [-RecipientFilter
                     <String>] [-WhatIf [<SwitchParameter>]]
Remove-AddressList   Use the Remove-AddressList cmdlet to remove an existing
                     address list.

                     Remove-AddressList -Identity
                     <AddressListIdParameter> [-Confirm
                     [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                     Recursive <SwitchParameter>] [-WhatIf
                     [<SwitchParameter>]]
Set-AddressList      Use the Set-AddressList cmdlet to modify an existing
                     address list.

                     Set-AddressList -Identity <AddressListIdParameter>
                     [-ConditionalCompany <MultiValuedProperty>] [-
                     ConditionalCustomAttribute1 <MultiValuedProperty>]
                     [-ConditionalCustomAttribute10
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute11
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute12
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute13
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute14
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute15
                     <MultiValuedProperty>] [-
                     ConditionalCustomAttribute2 <MultiValuedProperty>]
                     [-ConditionalCustomAttribute3
                     <MultiValuedProperty>] [-
                            ConditionalCustomAttribute4 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute5
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute6 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute7
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute8 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute9
                            <MultiValuedProperty>] [-ConditionalDepartment
                            <MultiValuedProperty>] [-
                            ConditionalStateOrProvince <MultiValuedProperty>]
                            [-Confirm [<SwitchParameter>]] [-DisplayName
                            <String>] [-DomainController <Fqdn>] [-
                            ForceUpgrade <SwitchParameter>] [-
                            IncludedRecipients <Nullable>] [-Name <String>] [-
                            RecipientContainer
                            <OrganizationalUnitIdParameter>] [-RecipientFilter
                            <String>] [-WhatIf [<SwitchParameter>]]
Update-AddressList          Use the Update-AddressList cmdlet to update the recipients
                            included in the address list that you specify.

                            update-AddressList -Identity
                            <AddressListIdParameter> [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                            WhatIf [<SwitchParameter>]]
Disable-AddressListPaging   Use the Disable-AddressListPaging cmdlet to disable
                            Active Directory virtual list view for address lists. Virtual list
                            view displays address lists in your organization as pages
                            instead of loading and viewing the entire directory.

                            disable-AddressListPaging [-Identity
                            <OrganizationIdParameter>] [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                            WhatIf [<SwitchParameter>]]
Enable-AddressListPaging    Use the Enable-AddressListPaging cmdlet to enable
                            Active Directory virtual list view for address lists. Virtual list
                            view allows you to display the address lists in your
                            organization as pages instead of loading and viewing the
                            entire directory.

                            enable-AddressListPaging [-Identity
                            <OrganizationIdParameter>] [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                            DoNotUpdateRecipients <SwitchParameter>] [-
                            ForceUpdateOfRecipients <SwitchParameter>] [-
                            WhatIf [<SwitchParameter>]]
Get-DetailsTemplate         Use the Get-DetailsTemplate cmdlet to retrieve the attributes
                            for details templates.

                            Get-DetailsTemplate [-Identity
                            <DetailsTemplateIdParameter>] [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                            WhatIf [<SwitchParameter>]]
Set-DetailsTemplate         Use the Set-DetailsTemplate cmdlet to modify the attributes
                            of a details template. To make changes to the details template
                            format and layout, you need to use the Details Templates
                           Editor in the Exchange Toolbox.

                           Set-DetailsTemplate -Identity
                           <DetailsTemplateIdParameter> [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                           Pages <MultiValuedProperty>] [-WhatIf
                           [<SwitchParameter>]]
Restore-DetailsTemplate    Use the Restore-DetailsTemplate cmdlet to restore the
                           specified template to its default state.

                           Restore-DetailsTemplate -Identity
                           <DetailsTemplateIdParameter> [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                           WhatIf [<SwitchParameter>]]
New-GlobalAddressList      Use the New-GlobalAddressList cmdlet to create a new
                           global address list (GAL).

                           New-GlobalAddressList -Name <String> [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                           Organization <OrganizationIdParameter>] [-
                           RecipientContainer
                           <OrganizationalUnitIdParameter>] [-RecipientFilter
                           <String>] [-WhatIf [<SwitchParameter>]]
Get-GlobalAddressList      Use the Get-GlobalAddressList cmdlet to return all the
                           attributes of a global address list (GAL) or a set of GALs.

                           Get-GlobalAddressList [-Identity
                           <GlobalAddressListIdParameter>] [-DomainController
                           <Fqdn>] [-Organization <OrganizationIdParameter>]
Remove-GlobalAddressList   Use the Remove-GlobalAddressList cmdlet to remove an
                           existing global address list (GAL).

                           Remove-GlobalAddressList -Identity
                           <GlobalAddressListIdParameter> [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                           WhatIf [<SwitchParameter>]]
Set-GlobalAddressList      Use the Set-GlobalAddressList cmdlet to modify the
                           attributes in Active Directory for a global address list (GAL).

                           Set-GlobalAddressList -Identity
                           <GlobalAddressListIdParameter> [-
                           ConditionalCompany <MultiValuedProperty>] [-
                           ConditionalCustomAttribute1 <MultiValuedProperty>]
                           [-ConditionalCustomAttribute10
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute11
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute12
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute13
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute14
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute15
                           <MultiValuedProperty>] [-
                           ConditionalCustomAttribute2 <MultiValuedProperty>]
                           [-ConditionalCustomAttribute3
                                  <MultiValuedProperty>] [-
                                  ConditionalCustomAttribute4 <MultiValuedProperty>]
                                  [-ConditionalCustomAttribute5
                                  <MultiValuedProperty>] [-
                                  ConditionalCustomAttribute6 <MultiValuedProperty>]
                                  [-ConditionalCustomAttribute7
                                  <MultiValuedProperty>] [-
                                  ConditionalCustomAttribute8 <MultiValuedProperty>]
                                  [-ConditionalCustomAttribute9
                                  <MultiValuedProperty>] [-ConditionalDepartment
                                  <MultiValuedProperty>] [-
                                  ConditionalStateOrProvince <MultiValuedProperty>]
                                  [-Confirm [<SwitchParameter>]] [-DomainController
                                  <Fqdn>] [-ForceUpgrade <SwitchParameter>] [-
                                  IncludedRecipients <Nullable>] [-Name <String>] [-
                                  RecipientContainer
                                  <OrganizationalUnitIdParameter>] [-RecipientFilter
                                  <String>] [-WhatIf [<SwitchParameter>]]
Update-GlobalAddressList          Use the Update-GlobalAddressList cmdlet to update a
                                  global address list (GAL).

                                  update-GlobalAddressList -Identity
                                  <GlobalAddressListIdParameter> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                                  WhatIf [<SwitchParameter>]]
E-Mail Address Policies Cmdlets

Get-EmailAddressPolicy            Use the Get-EmailAddressPolicy cmdlet to return all of the
                                  attributes on a policy or set of policies.

                                  Get-EmailAddressPolicy [-Identity
                                  <EmailAddressPolicyIdParameter>] [-
                                  DomainController <Fqdn>] [-
                                  IncludeMailboxSettingOnlyPolicy <SwitchParameter>]
                                  [-Organization <OrganizationIdParameter>]

New-EmailAddressPolicy            Use the New-EmailAddressPolicy cmdlet to create an e-mail
                                  address policy.

                                  New-EmailAddressPolicy -Name <String> -
                                  EnabledPrimarySMTPAddressTemplate <String> -
                                  RecipientFilter <String> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                                  Organization <OrganizationIdParameter>] [-Priority
                                  <EmailAddressPolicyPriority>] [-RecipientContainer
                                  <OrganizationalUnitIdParameter>] [-WhatIf
                                  [<SwitchParameter>]]
Remove-EmailAddressPolicy         Use the Remove-EmailAddressPolicy cmdlet to remove an
                                  existing e-mail address policy.

                                  Remove-EmailAddressPolicy -Identity
                                  <EmailAddressPolicyIdParameter> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                                  WhatIf [<SwitchParameter>]]
Set-EmailAddressPolicy            Use the Set-EmailAddressPolicy cmdlet to set
                                  Active Directory attributes for an e-mail address policy.
                            Set-EmailAddressPolicy -Identity
                            <EmailAddressPolicyIdParameter> [-
                            ConditionalCompany <MultiValuedProperty>] [-
                            ConditionalCustomAttribute1 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute10
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute11
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute12
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute13
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute14
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute15
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute2 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute3
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute4 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute5
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute6 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute7
                            <MultiValuedProperty>] [-
                            ConditionalCustomAttribute8 <MultiValuedProperty>]
                            [-ConditionalCustomAttribute9
                            <MultiValuedProperty>] [-ConditionalDepartment
                            <MultiValuedProperty>] [-
                            ConditionalStateOrProvince <MultiValuedProperty>]
                            [-Confirm [<SwitchParameter>]] [-
                            DisabledEmailAddressTemplates
                            <ProxyAddressTemplateCollection>] [-
                            DomainController <Fqdn>] [-
                            EnabledEmailAddressTemplates
                            <ProxyAddressTemplateCollection>] [-
                            EnabledPrimarySMTPAddressTemplate <String>] [-
                            ForceUpgrade <SwitchParameter>] [-
                            IncludedRecipients <Nullable>] [-Name <String>] [-
                            Priority <EmailAddressPolicyPriority>] [-
                            RecipientContainer
                            <OrganizationalUnitIdParameter>] [-RecipientFilter
                            <String>] [-WhatIf [<SwitchParameter>]]
Update-EmailAddressPolicy   Use the Update-EmailAddressPolicy cmdlet to apply an e-
                            mail address policy to all recipients.

                            update-EmailAddressPolicy -Identity
                            <EmailAddressPolicyIdParameter> [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                            FixMissingAlias <SwitchParameter>] [-WhatIf
                            [<SwitchParameter>]]
Exchange Search Cmdlets

Test-ExchangeSearch         Use the Test-ExchangeSearch cmdlet to test that Exchange
                            Search is currently enabled and is indexing new e-mail
                            messages in a timely manner.

                            Test-ExchangeSearch [-Identity
                            <MailboxIdParameter>] [-Confirm
                      [<SwitchParameter>]] [-DomainController <Fqdn>] [-
                      IndexingTimeout <Int32>] [-MonitoringContext
                      <$true | $false>] [-WhatIf [<SwitchParameter>]]
Search-Mailbox        Use the Search-Mailbox cmdlet to search a mailbox and copy
                      the results to a specified target mailbox.

                      Search-Mailbox -Identity <MailboxIdParameter> [-
                      Confirm [<SwitchParameter>]] [-DomainController
                      <Fqdn>] [-DoNotIncludeArchive <SwitchParameter>]
                      [-IncludeUnsearchableItems <SwitchParameter>] [-
                      LogLevel <Suppress | Basic | Full>] [-
                      SearchDumpster <SwitchParameter>] [-SearchQuery
                      <String>] [-WhatIf [<SwitchParameter>]]
Inbox Rules Cmdlets

Disable-InboxRule     Use the Disable-InboxRule cmdlet to disable an Inbox rule.

                      Disable-InboxRule -Identity <InboxRuleIdParameter>
                      [-Confirm [<SwitchParameter>]] [-DomainController
                      <Fqdn>] [-Force <SwitchParameter>] [-Mailbox
                      <MailboxIdParameter>] [-WhatIf
                      [<SwitchParameter>]]
Enable-InboxRule      Use the Enable-InboxRule cmdlet to enable an Inbox rule.
                      Inbox rules are used to process messages in the Inbox based
                      on conditions specified and take actions such as moving a
                      message to a specified folder or deleting a message.

                      Enable-InboxRule -Identity <InboxRuleIdParameter>
                      [-Confirm [<SwitchParameter>]] [-DomainController
                      <Fqdn>] [-Force <SwitchParameter>] [-Mailbox
                      <MailboxIdParameter>] [-WhatIf
                      [<SwitchParameter>]]
Get-InboxRule         Use the Get-InboxRule cmdlet to view Inbox rule properties.
                      Inbox rules are used to process messages in the Inbox based
                      on conditions specified and take actions such as moving a
                      message to a specified folder or deleting a message.

                      Get-InboxRule [-Identity <InboxRuleIdParameter>]
                      [-DescriptionTimeFormat <String>] [-
                      DescriptionTimeZone <ExTimeZoneValue>] [-
                      DomainController <Fqdn>] [-Mailbox
                      <MailboxIdParameter>]
Remove-InboxRule      The Remove-InboxRule cmdlet is used to remove an Inbox
                      rule.

                      Remove-InboxRule -Identity <InboxRuleIdParameter>
                      [-Confirm [<SwitchParameter>]] [-DomainController
                      <Fqdn>] [-Force <SwitchParameter>] [-Mailbox
                      <MailboxIdParameter>] [-WhatIf
                      [<SwitchParameter>]]
New-InboxRule           Use the New-InboxRule cmdlet to create an Inbox rule for
                        a mailbox. Inbox rules are used to process messages in the
                        Inbox based on conditions specified and take actions such
                        as moving a message to a specified folder or deleting a
                message.


                New-InboxRule -FromMessageId
                <MailboxStoreObjectIdParameter> -ValidateOnly
                <SwitchParameter> [-Confirm
                [<SwitchParameter>]] [-DomainController <Fqdn>]
                [-ExceptIfFromSubscription
                <AggregationSubscriptionIdentity[]>] [-Force
                <SwitchParameter>] [-FromSubscription
                <AggregationSubscriptionIdentity[]>] [-Mailbox
                <MailboxIdParameter>] [-WhatIf
                [<SwitchParameter>]]
Set-InboxRule   Use the Set-InboxRule cmdlet to modify an existing Inbox
                rule. Inbox rules are used to process messages in the Inbox
                based on conditions specified and take actions such as
                moving a message to a specified folder or deleting a
                message.

                set-InboxRule -Identity <InboxRuleIdParameter>
                [-ApplyCategory <MultiValuedProperty>] [-
                BodyContainsWords <MultiValuedProperty>] [-
                Confirm [<SwitchParameter>]] [-CopyToFolder
                <MailboxFolderIdParameter>] [-DeleteMessage
                <$true | $false>] [-DomainController <Fqdn>] [-
                ExceptIfBodyContainsWords
                <MultiValuedProperty>] [-
                ExceptIfFlaggedForAction <Nullable>] [-
                ExceptIfFrom <RecipientIdParameter[]>] [-
                ExceptIfFromAddressContainsWords
                <MultiValuedProperty>] [-
                ExceptIfFromSubscription
                <AggregationSubscriptionIdentity[]>] [-
                ExceptIfHasAttachment <$true | $false>] [-
                ExceptIfHasClassification
                <MessageClassificationIdParameter[]>] [-
                ExceptIfHeaderContainsWords
                <MultiValuedProperty>] [-
                ExceptIfMessageTypeMatches <Nullable>] [-
                ExceptIfMyNameInCcBox <$true | $false>] [-
                ExceptIfMyNameInToBox <$true | $false>] [-
                ExceptIfMyNameInToOrCcBox <$true | $false>] [-
                ExceptIfMyNameNotInToBox <$true | $false>] [-
                ExceptIfReceivedAfterDate <Nullable>] [-
                ExceptIfReceivedBeforeDate <Nullable>] [-
                ExceptIfRecipientAddressContainsWords
                <MultiValuedProperty>] [-ExceptIfSentOnlyToMe
                <$true | $false>] [-ExceptIfSentTo
                <RecipientIdParameter[]>] [-
                ExceptIfSubjectContainsWords
                <MultiValuedProperty>] [-
                ExceptIfSubjectOrBodyContainsWords
                <MultiValuedProperty>] [-ExceptIfWithImportance
                <Nullable>] [-ExceptIfWithinSizeRangeMaximum
                <Nullable>] [-ExceptIfWithinSizeRangeMinimum
                <Nullable>] [-ExceptIfWithSensitivity
                <Nullable>] [-FlaggedForAction <Nullable>] [-
                Force <SwitchParameter>] [-
                ForwardAsAttachmentTo <RecipientIdParameter[]>]
                           [-ForwardTo <RecipientIdParameter[]>] [-From
                           <RecipientIdParameter[]>] [-
                           FromAddressContainsWords <MultiValuedProperty>]
                           [-FromSubscription
                           <AggregationSubscriptionIdentity[]>] [-
                           HasAttachment <$true | $false>] [-
                           HasClassification
                           <MessageClassificationIdParameter[]>] [-
                           HeaderContainsWords <MultiValuedProperty>] [-
                           Mailbox <MailboxIdParameter>] [-MarkAsRead
                           <$true | $false>] [-MarkImportance <Nullable>]
                           [-MessageTypeMatches <Nullable>] [-MoveToFolder
                           <MailboxFolderIdParameter>] [-MyNameInCcBox
                           <$true | $false>] [-MyNameInToBox <$true |
                           $false>] [-MyNameInToOrCcBox <$true | $false>]
                           [-MyNameNotInToBox <$true | $false>] [-Name
                           <String>] [-Priority <Int32>] [-
                           ReceivedAfterDate <Nullable>] [-
                           ReceivedBeforeDate <Nullable>] [-
                           RecipientAddressContainsWords
                           <MultiValuedProperty>] [-RedirectTo
                           <RecipientIdParameter[]>] [-
                           SendTextMessageNotificationTo
                           <MultiValuedProperty>] [-SentOnlyToMe <$true |
                           $false>] [-SentTo <RecipientIdParameter[]>] [-
                           StopProcessingRules <$true | $false>] [-
                           SubjectContainsWords <MultiValuedProperty>] [-
                           SubjectOrBodyContainsWords
                           <MultiValuedProperty>] [-WhatIf
                           [<SwitchParameter>]] [-WithImportance
                           <Nullable>] [-WithinSizeRangeMaximum
                           <Nullable>] [-WithinSizeRangeMinimum
                           <Nullable>] [-WithSensitivity <Nullable>]
Mailbox Database Cmdlets

Dismount-Database          Use the Dismount-Database cmdlet to dismount a
                           database on a computer running Microsoft
                           Exchange Server 2010 that has the Mailbox server role
                           installed. You can run this command only if the
                           Microsoft Exchange Information Store service is running.

                           dismount-Database -Identity
                           <DatabaseIdParameter> [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>]
                           [-WhatIf [<SwitchParameter>]]
Mount-Database             Use the Mount-Database cmdlet to mount a database on a
                           server running Microsoft Exchange Server 2010 with the
                           Mailbox server role installed. The cmdlet mounts the
                           database only if the Microsoft Exchange Information Store
                           service is running.

                           mount-Database -Identity <DatabaseIdParameter>
                           [-AcceptDataLoss <SwitchParameter>] [-Confirm
                           [<SwitchParameter>]] [-DomainController <Fqdn>]
                           [-Force <SwitchParameter>] [-WhatIf
                           [<SwitchParameter>]]
Move-DatabasePath          Use the Move-DatabasePath cmdlet to set a new path to
                           the location of a database on the specified Mailbox server
                         and to move the related files to that location.

                         Move-DatabasePath -Identity
                         <DatabaseIdParameter> [-ConfigurationOnly
                         <SwitchParameter>] [-Confirm
                         [<SwitchParameter>]] [-DomainController <Fqdn>]
                         [-EdbFilePath <EdbFilePath>] [-Force
                         <SwitchParameter>] [-LogFolderPath
                         <NonRootLocalLongFullPath>] [-WhatIf
                         [<SwitchParameter>]]
Clean-MailboxDatabase    Use the Clean-MailboxDatabase cmdlet to scan
                         Active Directory for disconnected mailboxes that aren't yet
                         marked as disconnected in the
                         Microsoft Exchange store and update the status of those
                         mailboxes in the Exchange store. This cmdlet isn't able to
                         update the Exchange store unless the Microsoft Exchange
                         Information Store service is running and the database is
                         mounted.

                         clean-MailboxDatabase -Identity
                         <DatabaseIdParameter> [-Confirm
                         [<SwitchParameter>]] [-DomainController <Fqdn>]
                         [-WhatIf [<SwitchParameter>]]

Get-MailboxDatabase      Use the Get-MailboxDatabase cmdlet to retrieve one or
                         more mailbox database objects from a server or
                         organization.

                         Get-MailboxDatabase [-Identity
                         <DatabaseIdParameter>] [-DomainController
                         <Fqdn>] [-DumpsterStatistics <SwitchParameter>]
                         [-IncludePreExchange2010 <SwitchParameter>] [-
                         Status <SwitchParameter>]

Remove-MailboxDatabase   Use the Remove-MailboxDatabase cmdlet to delete a
                         mailbox database object.

                         Remove-MailboxDatabase -Identity
                         <DatabaseIdParameter> [-Confirm
                         [<SwitchParameter>]] [-DomainController <Fqdn>]
                         [-WhatIf [<SwitchParameter>]]

Set-MailboxDatabase      Use the Set-MailboxDatabase cmdlet to set the attributes
                         of a mailbox database.

                         Set-MailboxDatabase -Identity
                         <DatabaseIdParameter> [-AllowFileRestore <$true
                         | $false>] [-BackgroundDatabaseMaintenance
                         <$true | $false>] [-CircularLoggingEnabled
                         <$true | $false>] [-Confirm
                         [<SwitchParameter>]] [-
                                  DataMoveReplicationConstraint <None |
                                  SecondCopy | SecondDatacenter | AllDatacenters
                                  | AllCopies>] [-DeletedItemRetention
                                  <EnhancedTimeSpan>] [-DomainController <Fqdn>]
                                  [-EventHistoryRetentionPeriod
                                  <EnhancedTimeSpan>] [-IndexEnabled <$true |
                                  $false>] [-IsExcludedFromProvisioning <$true |
                                  $false>] [-IssueWarningQuota <Unlimited>] [-
                                  IsSuspendedFromProvisioning <$true | $false>]
                                  [-JournalRecipient <RecipientIdParameter>] [-
                                  MailboxRetention <EnhancedTimeSpan>] [-
                                  MaintenanceSchedule <Schedule>] [-
                                  MountAtStartup <$true | $false>] [-Name
                                  <String>] [-OfflineAddressBook
                                  <OfflineAddressBookIdParameter>] [-
                                  ProhibitSendQuota <Unlimited>] [-
                                  ProhibitSendReceiveQuota <Unlimited>] [-
                                  PublicFolderDatabase <DatabaseIdParameter>] [-
                                  QuotaNotificationSchedule <Schedule>] [-
                                  RecoverableItemsQuota <Unlimited>] [-
                                  RecoverableItemsWarningQuota <Unlimited>] [-
                                  RetainDeletedItemsUntilBackup <$true | $false>]
                                  [-RpcClientAccessServer
                                  <ClientAccessServerOrArrayIdParameter>] [-
                                  WhatIf [<SwitchParameter>]]

Get-FailedContentIndexDocuments   Use the Get-FailedContentIndexDocuments cmdlet to
                                  retrieve a list of documents for a mailbox, mailbox
                                  database, or Mailbox server which couldn't be indexed by
                                  Exchange Search.

                                  Get-FailedContentIndexDocuments -Identity
                                  <MailboxIdParameter> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>]
                                  [-WhatIf [<SwitchParameter>]]

Get-StoreUsageStatistics          Use the Get-StoreUsageStatistics cmdlet to aid in
                                  diagnosing performance issues with your servers or
                                  databases. The Microsoft Exchange Information Store
                                  collects per user information on latency, I/O, page counts,
                                  processor usage, and TimeInServer. The TimeInServer
                                  metric represents the total time that sync and async
                                  requests spend in the Microsoft Exchange Information
                                  Store for a user's mailbox. You can retrieve this resource
                                  information in the Microsoft Exchange Information Store
                                  for the 25 highest usage accounts on a specified database.
                                  Usage of a mailbox is defined as the amount of server time
                                  spent in performing operations for that mailbox. The
                                  cmdlet reports the top 25 users for every one-minute period
                                  for the last 10 minutes (250 objects per ten-minute
                         interval). The resource usage is an indicator of the load that
                         different users are placing on the server.

                         Get-StoreUsageStatistics -Identity
                         <GeneralMailboxIdParameter> [-DomainController
                         <Fqdn>]

Mailbox Server Cmdlets

Get-MailboxServer        Use the Get-MailboxServer cmdlet to return a Mailbox
                         server object and all its attributes. If no parameter is
                         specified, a complete list of the Mailbox servers in the
                         entire Exchange organization is returned.

                         Get-MailboxServer [-Identity
                         <MailboxServerIdParameter>] [-DomainController
                         <Fqdn>] [-Status <SwitchParameter>]

Set-MailboxServer        Use the Set-MailboxServer cmdlet to modify attributes on
                         a computer running Microsoft Exchange with the Mailbox
                         server role installed.

                         Set-MailboxServer -Identity
                         <MailboxServerIdParameter> [-
                         AutoDatabaseMountDial <Lossless |
                         GoodAvailability | BestAvailability>] [-
                         CalendarRepairIntervalEndWindow <Int32>] [-
                         CalendarRepairLogDirectorySizeLimit
                         <Unlimited>] [-CalendarRepairLogEnabled <$true
                         | $false>] [-CalendarRepairLogFileAgeLimit
                         <EnhancedTimeSpan>] [-CalendarRepairLogPath
                         <LocalLongFullPath>] [-
                         CalendarRepairLogSubjectLoggingEnabled <$true |
                         $false>] [-CalendarRepairMissingItemFixDisabled
                         <$true | $false>] [-CalendarRepairSchedule
                         <ScheduleInterval[]>] [-Confirm
                         [<SwitchParameter>]] [-
                         DatabaseCopyAutoActivationPolicy <Unrestricted
                         | IntrasiteOnly | Blocked>] [-DomainController
                         <Fqdn>] [-FolderLogForManagedFoldersEnabled
                         <$true | $false>] [-
                         GroupMetricsGenerationEnabled <$true | $false>]
                         [-GroupMetricsGenerationTime <String>] [-
                         IsExcludedFromProvisioning <$true | $false>] [-
                         JournalingLogForManagedFoldersEnabled <$true |
                         $false>] [-Locale <MultiValuedProperty>] [-
                         LogDirectorySizeLimitForManagedFolders
                         <Unlimited>] [-LogFileAgeLimitForManagedFolders
                         <EnhancedTimeSpan>] [-
                         LogFileSizeLimitForManagedFolders <Unlimited>]
                         [-LogPathForManagedFolders <LocalLongFullPath>]
                        [-ManagedFolderAssistantSchedule
                        <ScheduleInterval[]>] [-MAPIEncryptionRequired
                        <$true | $false>] [-MaximumActiveDatabases
                        <Nullable>] [-MaxTransportSyncDispatchers
                        <Int32>] [-MessageTrackingLogEnabled <$true |
                        $false>] [-MessageTrackingLogMaxAge
                        <EnhancedTimeSpan>] [-
                        MessageTrackingLogMaxDirectorySize <Unlimited>]
                        [-MessageTrackingLogMaxFileSize
                        <ByteQuantifiedSize>] [-MessageTrackingLogPath
                        <LocalLongFullPath>] [-
                        MessageTrackingLogSubjectLoggingEnabled <$true
                        | $false>] [-
                        RetentionLogForManagedFoldersEnabled <$true |
                        $false>] [-SharingPolicySchedule
                        <ScheduleInterval[]>] [-
                        SubjectLogForManagedFoldersEnabled <$true |
                        $false>] [-SubmissionServerOverrideList
                        <MultiValuedProperty>] [-
                        TransportSyncDispatchEnabled <$true | $false>]
                        [-TransportSyncLogEnabled <$true | $false>] [-
                        TransportSyncLogFilePath <LocalLongFullPath>]
                        [-TransportSyncLogLoggingLevel <None | Error |
                        Information | Verbose | RawData | Debugging>]
                        [-TransportSyncLogMaxAge <EnhancedTimeSpan>] [-
                        TransportSyncLogMaxDirectorySize
                        <ByteQuantifiedSize>] [-
                        TransportSyncLogMaxFileSize
                        <ByteQuantifiedSize>] [-
                        TransportSyncMailboxHealthLogEnabled <$true |
                        $false>] [-
                        TransportSyncMailboxHealthLogFilePath
                        <LocalLongFullPath>] [-
                        TransportSyncMailboxHealthLogMaxAge
                        <EnhancedTimeSpan>] [-
                        TransportSyncMailboxHealthLogMaxDirectorySize
                        <ByteQuantifiedSize>] [-
                        TransportSyncMailboxHealthLogMaxFileSize
                        <ByteQuantifiedSize>] [-WhatIf
                        [<SwitchParameter>]]

Test-MapiConnectivity   Use the Test-MapiConnectivity cmdlet to verify server
                        functionality by logging on to the mailbox that you specify.
                        If you don't specify a mailbox, the cmdlet logs on to the
                        SystemMailbox on the database that you specify.

                        Test-MAPIConnectivity [-ActiveDirectoryTimeout
                        <Int32>] [-AllConnectionsTimeout <Int32>] [-
                        Confirm [<SwitchParameter>]] [-DomainController
                        <Fqdn>] [-MonitoringContext <$true | $false>]
                        [-PerConnectionTimeout <Int32>] [-Server
                        <ServerIdParameter>] [-WhatIf
                                 [<SwitchParameter>]]

Test-MRSHealth                   Use the Test-MRSHealth cmdlet to test the health of an
                                 instance of the Microsoft Exchange Mailbox Replication
                                 service.

                                 Test-MRSHealth [-Identity <ServerIdParameter>]
                                 [-Confirm [<SwitchParameter>]] [-
                                 DomainController <Fqdn>] [-
                                 MaxQueueScanAgeSeconds <Int32>] [-
                                 MonitoringContext <$true | $false>] [-WhatIf
                                 [<SwitchParameter>]]

Update-FileDistributionService   Use the Update-FileDistributionService cmdlet to access
                                 the Microsoft Exchange File Distribution service to poll for
                                 offline address book (OAB), Group Metrics, and Unified
                                 Messaging (UM) configuration and data.

                                 Update-FileDistributionService -Identity
                                 <ServerIdParameter> [-Confirm
                                 [<SwitchParameter>]] [-DomainController <Fqdn>]
                                 [-Type <String>] [-WhatIf [<SwitchParameter>]]

Offline Address Book Cmdlets

Get-OfflineAddressBook           Use the Get-OfflineAddressBook cmdlet to obtain the
                                 settings of one or more offline address books (OABs).

                                 Get-OfflineAddressBook [-Identity
                                 <OfflineAddressBookIdParameter>] [-
                                 DomainController <Fqdn>] [-Organization
                                 <OrganizationIdParameter>]

New-OfflineAddressBook           Use the New-OfflineAddressBook cmdlet to create an
                                 offline address book (OAB).

                                 New-OfflineAddressBook -Name <String> -
                                 AddressLists <AddressBookBaseIdParameter[]> [-
                                 Confirm [<SwitchParameter>]] [-
                                 DiffRetentionPeriod <Nullable>] [-
                                 DomainController <Fqdn>] [-
                                 GlobalWebDistributionEnabled <$true | $false>]
                                 [-IsDefault <$true | $false>] [-Organization
                                 <OrganizationIdParameter>] [-
                                 PublicFolderDatabase <DatabaseIdParameter>] [-
                                 PublicFolderDistributionEnabled <$true |
                                 $false>] [-Schedule <Schedule>] [-Server
                                 <ServerIdParameter>] [-
                                 SkipPublicFolderInitialization
                                 <SwitchParameter>] [-Versions
                                 <MultiValuedProperty>] [-VirtualDirectories
                            <VirtualDirectoryIdParameter[]>] [-WhatIf
                            [<SwitchParameter>]]




Move-OfflineAddressBook     Use the Move-OfflineAddressBook cmdlet to designate a
                            new server responsible for generating the offline address
                            book (OAB).

                            Move-OfflineAddressBook -Identity
                            <OfflineAddressBookIdParameter> [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>]
                            [-Server <ServerIdParameter>] [-WhatIf
                            [<SwitchParameter>]]

Remove-OfflineAddressBook   Use the Remove-OfflineAddressBook cmdlet to remove
                            (delete) offline address books (OABs).

                            Remove-OfflineAddressBook -Identity
                            <OfflineAddressBookIdParameter> [-Confirm
                            [<SwitchParameter>]] [-DomainController <Fqdn>]
                            [-Force <SwitchParameter>] [-WhatIf
                            [<SwitchParameter>]]

Set-OfflineAddressBook      Use the Set-OfflineAddressBook cmdlet to modify offline
                            address book (OAB) settings.

                            Set-OfflineAddressBook -Identity
                            <OfflineAddressBookIdParameter> [-AddressLists
                            <AddressBookBaseIdParameter[]>] [-
                            ApplyMandatoryProperties <SwitchParameter>] [-
                            ConfiguredAttributes <MultiValuedProperty>] [-
                            Confirm [<SwitchParameter>]] [-
                            DiffRetentionPeriod <Nullable>] [-
                            DomainController <Fqdn>] [-
                            GlobalWebDistributionEnabled <$true | $false>]
                            [-IsDefault <$true | $false>] [-
                            MaxBinaryPropertySize <Int32>] [-
                            MaxMultivaluedBinaryPropertySize <Int32>] [-
                            MaxMultivaluedStringPropertySize <Int32>] [-
                            MaxStringPropertySize <Int32>] [-Name <String>]
                            [-PublicFolderDistributionEnabled <$true |
                            $false>] [-Schedule <Schedule>] [-
                            UseDefaultAttributes <SwitchParameter>] [-
                            Versions <MultiValuedProperty>] [-
                            VirtualDirectories
                            <VirtualDirectoryIdParameter[]>] [-WhatIf
                            [<SwitchParameter>]]

Update-OfflineAddressBook   Use the Update-OfflineAddressBook cmdlet to update the
                            offline address books (OABs) used by Microsoft Outlook
                             clients.

                             Update-OfflineAddressBook -Identity
                             <OfflineAddressBookIdParameter> [-Confirm
                             [<SwitchParameter>]] [-DomainController <Fqdn>]
                             [-WhatIf [<SwitchParameter>]]

Get-OABVirtualDirectory      Use the Get-OABVirtualDirectory cmdlet to return
                             configuration information about offline address book
                             (OAB) distribution points.

                             Get-OabVirtualDirectory [-Identity
                             <VirtualDirectoryIdParameter>] [-
                             DomainController <Fqdn>]

New-OABVirtualDirectory      Use the New-OABVirtualDirectory cmdlet to configure a
                             server as a Web distribution point for an offline address
                             book (OAB).

                             New-OabVirtualDirectory [-Confirm
                             [<SwitchParameter>]] [-DomainController <Fqdn>]
                             [-ExternalUrl <Uri>] [-InternalUrl <Uri>] [-
                             Path <String>] [-PollInterval <Int32>] [-
                             Recovery <SwitchParameter>] [-RequireSSL <$true
                             | $false>] [-Server <ServerIdParameter>] [-
                             WebSiteName <String>] [-WhatIf
                             [<SwitchParameter>]]

Remove-OABVirtualDirectory   Use the Remove-OABVirtualDirectory cmdlet to remove
                             a server from the offline address book (OAB) distribution
                             points list.

                             Remove-OabVirtualDirectory -Identity
                             <VirtualDirectoryIdParameter> [-Confirm
                             [<SwitchParameter>]] [-DomainController <Fqdn>]
                             [-Force <SwitchParameter>] [-WhatIf
                             [<SwitchParameter>]]

Set-OABVirtualDirectory      Use the Set-OABVirtualDirectory cmdlet to change
                             configuration settings for an offline address book (OAB)
                             virtual directory.

                             Set-OabVirtualDirectory -Identity
                             <VirtualDirectoryIdParameter> [-
                             BasicAuthentication <$true | $false>] [-Confirm
                             [<SwitchParameter>]] [-DomainController <Fqdn>]
                             [-ExternalUrl <Uri>] [-InternalUrl <Uri>] [-
                             PollInterval <Int32>] [-RequireSSL <$true |
                             $false>] [-WhatIf [<SwitchParameter>]] [-
                             WindowsAuthentication <$true | $false>]
Public Folders and Public Folder
Databases Cmdlets

Get-PublicFolder                   Use the Get-PublicFolder cmdlet to retrieve the attributes
                                   of a public folder or a set of public folders.

                                   Get-PublicFolder [-Identity
                                   <PublicFolderIdParameter>] [-DomainController
                                   <Fqdn>] [-Server <ServerIdParameter>]




New-PublicFolder                   Use the New-PublicFolder cmdlet to create a public folder
                                   with the specified name.

                                   New-PublicFolder -Name <String> [-Confirm
                                   [<SwitchParameter>]] [-DomainController <Fqdn>]
                                   [-Path <PublicFolderIdParameter>] [-Server
                                   <ServerIdParameter>] [-WhatIf
                                   [<SwitchParameter>]]

Remove-PublicFolder                Use the Remove-PublicFolder cmdlet to remove an
                                   existing public folder.

                                   Remove-PublicFolder -Identity
                                   <PublicFolderIdParameter> [-Confirm
                                   [<SwitchParameter>]] [-DomainController <Fqdn>]
                                   [-Recurse <SwitchParameter>] [-Server
                                   <ServerIdParameter>] [-WhatIf
                                   [<SwitchParameter>]]

Set-PublicFolder                   Use the Set-PublicFolder cmdlet to set the attributes of public
                                   folders.



                                   Set-PublicFolder -Identity
                                   <PublicFolderIdParameter> [-AgeLimit
                                   <Nullable>] [-Confirm [<SwitchParameter>]] [-
                                   DomainController <Fqdn>] [-
                                   HiddenFromAddressListsEnabled <$true | $false>]
                                   [-IssueWarningQuota <Unlimited>] [-MaxItemSize
                                   <Unlimited>] [-Name <String>] [-
                                   PerUserReadStateEnabled <$true | $false>] [-
                                   ProhibitPostQuota <Unlimited>] [-Replicas
                                   <DatabaseIdParameter[]>] [-ReplicationSchedule
                                   <Schedule>] [-RetainDeletedItemsFor <Nullable>]
                                   [-Server <ServerIdParameter>] [-
                                   UseDatabaseAgeDefaults <$true | $false>] [-
                                   UseDatabaseQuotaDefaults <$true | $false>] [-
                                   UseDatabaseReplicationSchedule <$true |
                                   $false>] [-UseDatabaseRetentionDefaults <$true
                                       | $false>] [-WhatIf [<SwitchParameter>]]

Update-PublicFolder                    Use the Update-PublicFolder cmdlet to start content
                                       synchronization of a public folder.

                                       Update-PublicFolder -Identity
                                       <PublicFolderIdParameter> -Server
                                       <ServerIdParameter> [-Confirm
                                       [<SwitchParameter>]] [-DomainController <Fqdn>]
                                       [-WhatIf [<SwitchParameter>]]

Add-                                   Use the Add-PublicFolderAdministrativePermission
PublicFolderAdministrativePermission   cmdlet to add administrative permissions to a public folder
                                       or a public folder hierarchy.

                                       Add-PublicFolderAdministrativePermission -
                                       Identity <PublicFolderIdParameter> -
                                       AccessRights <MultiValuedProperty> -User
                                       <SecurityPrincipalIdParameter> [-Confirm
                                       [<SwitchParameter>]] [-Deny <SwitchParameter>]
                                       [-DomainController <Fqdn>] [-InheritanceType
                                       <None | All | Descendents | SelfAndChildren |
                                       Children>] [-Server <ServerIdParameter>] [-
                                       WhatIf [<SwitchParameter>]]

Get-                                   Use the Get-PublicFolderAdministrativePermission
PublicFolderAdministrativePermission   cmdlet to get the administrative permissions for a public
                                       folder or a public folder hierarchy.

                                       Get-PublicFolderAdministrativePermission -
                                       Identity <PublicFolderIdParameter> [-
                                       DomainController <Fqdn>] [-Server
                                       <ServerIdParameter>] [-User
                                       <SecurityPrincipalIdParameter>]




Remove-                                Use the Remove-PublicFolderAdministrativePermission
PublicFolderAdministrativePermission   cmdlet to remove administrative permissions for a public
                                       folder or a public folder hierarchy.

                                       Remove-PublicFolderAdministrativePermission -
                                       Identity <PublicFolderIdParameter> -
                                       AccessRights <MultiValuedProperty> -User
                                       <SecurityPrincipalIdParameter> [-Confirm
                                       [<SwitchParameter>]] [-Deny <SwitchParameter>]
                                       [-DomainController <Fqdn>] [-InheritanceType
                                       <None | All | Descendents | SelfAndChildren |
                                       Children>] [-Server <ServerIdParameter>] [-
                                       WhatIf [<SwitchParameter>]]
Add-PublicFolderClientPermission      Use the Add-PublicFolderClientPermission cmdlet to
                                      add permissions to public folders.

                                      Add-PublicFolderClientPermission -Identity
                                      <PublicFolderIdParameter> -AccessRights
                                      <MultiValuedProperty> -User
                                      <PublicFolderUserIdParameter> [-Confirm
                                      [<SwitchParameter>]] [-DomainController <Fqdn>]
                                      [-Server <ServerIdParameter>] [-WhatIf
                                      [<SwitchParameter>]]

Get-PublicFolderClientPermission      Use the Get-PublicFolderClientPermission cmdlet to
                                      retrieve the user permissions for a public folder.

                                      Get-PublicFolderClientPermission -Identity
                                      <PublicFolderIdParameter> [-DomainController
                                      <Fqdn>] [-Server <ServerIdParameter>] [-User
                                      <PublicFolderUserIdParameter>]

Remove-PublicFolderClientPermission   Use the Remove-PublicFolderClientPermission cmdlet
                                      to remove permissions from public folders.

                                      Remove-PublicFolderClientPermission -Identity
                                      <PublicFolderIdParameter> -AccessRights
                                      <MultiValuedProperty> -User
                                      <PublicFolderUserIdParameter> [-Confirm
                                      [<SwitchParameter>]] [-DomainController <Fqdn>]
                                      [-Server <ServerIdParameter>] [-WhatIf
                                      [<SwitchParameter>]]

Get-PublicFolderDatabase              Use the Get-PublicFolderDatabase cmdlet to view public
                                      folder database settings.

                                      Get-PublicFolderDatabase [-Identity
                                      <DatabaseIdParameter>] [-DomainController
                                      <Fqdn>] [-IncludePreExchange2010
                                      <SwitchParameter>] [-Status <SwitchParameter>]

New-PublicFolderDatabase              Use the New-PublicFolderDatabase cmdlet to create a
                                      public folder database.

                                      New-PublicFolderDatabase -Name <String> -Server
                                      <ServerIdParameter> [-Confirm
                                      [<SwitchParameter>]] [-DomainController <Fqdn>]
                                      [-EdbFilePath <EdbFilePath>] [-LogFolderPath
                                      <NonRootLocalLongFullPath>] [-WhatIf
                                      [<SwitchParameter>]]

Remove-PublicFolderDatabase           Use the Remove-PublicFolderDatabase cmdlet to delete
                                      public folder databases.
                                 Remove-PublicFolderDatabase -Identity
                                 <DatabaseIdParameter> [-Confirm
                                 [<SwitchParameter>]] [-DomainController <Fqdn>]
                                 [-RemoveLastAllowed <SwitchParameter>] [-WhatIf
                                 [<SwitchParameter>]]

Set-PublicFolderDatabase         Use the Set-PublicFolderDatabase cmdlet to set attributes
                                 of public folder databases.

                                 Set-PublicFolderDatabase -Identity
                                 <DatabaseIdParameter> [-AllowFileRestore <$true
                                 | $false>] [-BackgroundDatabaseMaintenance
                                 <$true | $false>] [-CircularLoggingEnabled
                                 <$true | $false>] [-Confirm
                                 [<SwitchParameter>]] [-CustomReferralServerList
                                 <MultiValuedProperty>] [-DeletedItemRetention
                                 <EnhancedTimeSpan>] [-DomainController <Fqdn>]
                                 [-EventHistoryRetentionPeriod
                                 <EnhancedTimeSpan>] [-IssueWarningQuota
                                 <Unlimited>] [-ItemRetentionPeriod <Unlimited>]
                                 [-MaintenanceSchedule <Schedule>] [-MaxItemSize
                                 <Unlimited>] [-MountAtStartup <$true | $false>]
                                 [-Name <String>] [-ProhibitPostQuota
                                 <Unlimited>] [-QuotaNotificationSchedule
                                 <Schedule>] [-ReplicationMessageSize
                                 <ByteQuantifiedSize>] [-ReplicationPeriod
                                 <UInt32>] [-ReplicationSchedule <Schedule>] [-
                                 RetainDeletedItemsUntilBackup <$true | $false>]
                                 [-UseCustomReferralServerList <$true | $false>]
                                 [-WhatIf [<SwitchParameter>]]

Update-PublicFolderHierarchy     Use the Update-PublicFolderHierarchy cmdlet to start
                                 content synchronization of the public folder hierarchy.

                                 Update-PublicFolderHierarchy -Server
                                 <ServerIdParameter> [-Confirm
                                 [<SwitchParameter>]] [-DomainController <Fqdn>]
                                 [-WhatIf [<SwitchParameter>]]

Get-PublicFolderItemStatistics   Use the Get-PublicFolderItemStatistics cmdlet to view
                                 information about items within a specified public folder.
                                 Information returned includes subject, last modification
                                 time, last access time, creation time, attachments, message
                                 size, and the type of item. You can use this raw
                                 information to better understand the distribution of items
                                 and item characteristics across public folders.

                                 Get-PublicFolderItemStatistics -Identity
                                 <PublicFolderIdParameter> [-DomainController
                                 <Fqdn>] [-Server <ServerIdParameter>]
Resume-PublicFolderReplication      Use the Resume-PublicFolderReplication cmdlet to
                                    resume public folder content replication when it's been
                                    stopped.

                                    Resume-PublicFolderReplication [-Confirm
                                    [<SwitchParameter>]] [-DomainController <Fqdn>]
                                    [-WhatIf [<SwitchParameter>]]

Suspend-PublicFolderReplication     Use the Suspend-PublicFolderReplication cmdlet to stop
                                    public folder replication for the organization.

                                    Suspend-PublicFolderReplication [-Confirm
                                    [<SwitchParameter>]] [-DomainController <Fqdn>]
                                    [-WhatIf [<SwitchParameter>]]

Get-PublicFolderStatistics          Use the Get-PublicFolderStatistics cmdlet to retrieve
                                    statistical information about public folders, such as folder
                                    size and last logon time.

                                    Get-PublicFolderStatistics [-Identity
                                    <PublicFolderIdParameter>] [-DomainController
                                    <Fqdn>] [-Server <ServerIdParameter>]

Sharing Policies and Organization
Relationships Cmdlets

Get-OrganizationRelationship        Use the Get-OrganizationRelationship cmdlet to retrieve
                                    settings for a relationship that has been created for
                                    free/busy information access or secure e-mail delivery
                                    using federated delivery.

                                    Get-OrganizationRelationship [-Identity
                                    <OrganizationRelationshipIdParameter>] [-
                                    DomainController <Fqdn>] [-Organization
                                    <OrganizationIdParameter>]

New-OrganizationRelationship        Use the New-OrganizationRelationship cmdlet to create a
                                    relationship with an external Microsoft
                                    Exchange Server 2010 organization for the purpose of
                                    accessing free/busy information access, securing e-mail
                                    using federated delivery, or moving mailboxes between on-
                                    premises Exchange servers and Outlook Live.

                                    New-OrganizationRelationship -Name <String> -
                                    DomainNames <MultiValuedProperty> [-Confirm
                                    [<SwitchParameter>]] [-DomainController <Fqdn>]
                                    [-Enabled <$true | $false>] [-
                                    FederatedDeliveryEnabled <$true | $false>] [-
                                    FreeBusyAccessEnabled <$true | $false>] [-
                                  FreeBusyAccessLevel <None | AvailabilityOnly |
                                  LimitedDetails>] [-FreeBusyAccessScope
                                  <GroupIdParameter>] [-MailboxMoveEnabled <$true
                                  | $false>] [-Organization
                                  <OrganizationIdParameter>] [-
                                  OrganizationContact <SmtpAddress>] [-
                                  RemoteFederatedDeliveryTargetAddress
                                  <SmtpAddress>] [-TargetApplicationUri <Uri>] [-
                                  TargetAutodiscoverEpr <Uri>] [-TargetSharingEpr
                                  <Uri>] [-WhatIf [<SwitchParameter>]]

Remove-OrganizationRelationship   Use the Remove-OrganizationRelationship cmdlet to
                                  remove the organization relationship with an external
                                  organization.

                                  Remove-OrganizationRelationship -Identity
                                  <OrganizationRelationshipIdParameter> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>]
                                  [-WhatIf [<SwitchParameter>]]

Set-OrganizationRelationship      Use the Set-OrganizationRelationship cmdlet to modify a
                                  relationship with an external Microsoft
                                  Exchange Server 2010 organization for the purposes of
                                  accessing free/busy information, securing e-mail using
                                  federated delivery, or moving mailboxes between on-
                                  premises Exchange servers and Outlook Live.

                                  Set-OrganizationRelationship -Identity
                                  <OrganizationRelationshipIdParameter> [-Confirm
                                  [<SwitchParameter>]] [-DomainController <Fqdn>]
                                  [-DomainNames <MultiValuedProperty>] [-Enabled
                                  <$true | $false>] [-FederatedDeliveryEnabled
                                  <$true | $false>] [-Force <SwitchParameter>] [-
                                  FreeBusyAccessEnabled <$true | $false>] [-
                                  FreeBusyAccessLevel <None | AvailabilityOnly |
                                  LimitedDetails>] [-FreeBusyAccessScope
                                  <GroupIdParameter>] [-MailboxMoveEnabled <$true
                                  | $false>] [-Name <String>] [-
                                  OrganizationContact <SmtpAddress>] [-
                                  RemoteFederatedDeliveryTargetAddress
                                  <SmtpAddress>] [-TargetApplicationUri <Uri>] [-
                                  TargetAutodiscoverEpr <Uri>] [-TargetSharingEpr
                                  <Uri>] [-WhatIf [<SwitchParameter>]]

Get-SharingPolicy                 Use the Get-SharingPolicy cmdlet to view the settings of
                                  sharing policies.

                                  Get-SharingPolicy [-Identity
                                  <SharingPolicyIdParameter>] [-DomainController
                                  <Fqdn>] [-Organization
                       <OrganizationIdParameter>]

New-SharingPolicy      Use the New-SharingPolicy cmdlet to create a sharing
                       policy to regulate how users inside your organization can
                       share calendar and contact information with users outside
                       the organization. Users can only share this information
                       after federation has been configured in Microsoft
                       Exchange Server 2010. After federation is configured,
                       users can send sharing invitations that comply with a
                       sharing policy to external recipients in other
                       Exchange 2010 organizations that have federation enabled.
                       A sharing policy needs to get assigned to a mailbox to be
                       effective. If a mailbox doesn't have a specific sharing
                       policy assigned, a default policy enforces the level of
                       sharing permitted for this mailbox.

                       New-SharingPolicy -Name <String> -Domains
                       <MultiValuedProperty> [-Confirm
                       [<SwitchParameter>]] [-Default
                       <SwitchParameter>] [-DomainController <Fqdn>]
                       [-Enabled <$true | $false>] [-Organization
                       <OrganizationIdParameter>] [-WhatIf
                       [<SwitchParameter>]]

Remove-SharingPolicy   Use the Remove-SharingPolicy cmdlet to remove a
                       sharing policy. Before you can remove a sharing policy,
                       you must ensure that no mailbox users are provisioned to
                       use that policy.

                       Remove-SharingPolicy -Identity
                       <SharingPolicyIdParameter> [-Confirm
                       [<SwitchParameter>]] [-DomainController <Fqdn>]
                       [-WhatIf [<SwitchParameter>]]

Set-SharingPolicy      Use the Set-SharingPolicy cmdlet to modify an existing
                       sharing policy to regulate how users inside your
                       organization can share free/busy and contact information
                       with users outside the organization. Users can only share
                       this information after federation has been configured in
                       Microsoft Exchange. After federation is configured, users
                       can send sharing invitations that comply with a sharing
                       policy to external recipients in other Exchange Server 2010
                       organizations that have federation enabled. A sharing
                       policy needs to be assigned to a mailbox to be effective. If
                       a mailbox doesn't have a specific sharing policy assigned, a
                       default policy enforces the level of sharing permitted for
this mailbox.

Set-SharingPolicy -Identity
<SharingPolicyIdParameter> [-Confirm
[<SwitchParameter>]] [-Default
<SwitchParameter>] [-DomainController <Fqdn>]
[-Domains <MultiValuedProperty>] [-Enabled
<$true | $false>] [-Name <String>] [-WhatIf
[<SwitchParameter>]]
Managing sharepoint with powershell
Når du installerer sharepoint og får ein feilmelding kan du sjekke log filen. For å finne log fila, åpne
kommando vinduet, og skriv inn følgande kommando. Logg fila vil visse på slutten av directory lista.
cd %temp%
dir /od *.log

For og visse alle cmdlets som er i windows powershell i sharepoint kan du bruke kommandoen
Den første kommandoen er den kjente get-command og ved og bruke get-sp* hentar vi alle filer som
startar med det.
Den andre kommandoen er igjen ein get-command, men siden vi setter inn –noun sp* so vil den leite
fram alle kommandoar som har eit noun(substantiv) som startar med sp* og på grunn av jokertegnet
* vil den leite fram alle kommandoane som starta med sp, og berre dei.
Den tredje kommandoen get-command –verb sp* er veldig lik kommando nr 2 berre at her plukker
den ut verb som startar med sp istaden. Igjen speller jokertegnet * ein viktig rolle.
Get-command get-sp*
Get-command –noun sp*
Get-command –verb sp*
Ein viktig ting når det gjelder sharepoint cmdlets er at alle startar med SP dette gjer at det er enkelt
og halde orden på alle cmdlets som er i sharpoint.

Før vi går vidare skal vi raskt sjå på bruk av jokertegnet * kominbert med søking med å bruke get-
command og –noun/-verb la oss sei at vi vil ha ut alle sp kommandoar som har ordet template i seg,vi
skriver då følgande kommando:
Get-command –noun sp*template*
Som du ser kan du bruke jokertegn der du ønsker


Sharepoint er eit bevis på at Windows har omfamna Powershell, dei har gjort det slik at nesten
uansett kva brukaren vil gjere i powershell so kan han gjere det med kanskje 1-4 kommandoar, dette
gjer at scripting i stor grad ikkje er so veldig nødvendig i Sharepoint. Vi skal no først visse noken
vanlige og praktiske kommandoer og forklare litt kva dei gjer, vi ser deretter på ein del av dei andre
sharepoint cmdlets som er tilgjengelige. Men og forklare alle vil ta veldig lang tid, der er over 500
cmdlets

Vi ser først på kommandoen Get-SPSite den vil hente inn alle sidene som ligger i sharepoint denne
listen kan bli veldig stor visst sharepoint har monge sider koblet opp til seg. Get-SPSite | select url,
owner gir deg ein formatert liste, der du får ut kunn url og eigaren.
Neste kommando i lista er Get-SPServiceApplication | select id, name vil som get-spsite hente ut
informasjon men denne gongen om SPServiceApplication(serviceApplication) du får id’en og namnet
til alle ServiceApplicationane som er i sharepoint.

Get-SPSite
Get-SPSite | select url, owner
Get-SPServiceApplication | select id,name

Vi går nå videre til litt meir avanserte cmdlets, vi skal sjå på New-SPSite, denne cmdleten lager ein ny
side(site) vi skriver nå inn heile delen so forklarer eg etterpå kva kvar del gjer.
New-spsite –url http://14e-sharepoint/sites/demo1 –owneralias 14e-sharepoin\administrator –name
”powershell Demo” –template STS#0
New-spsite vil lage sida men vi vill he litt meir. Vi ser på den første attributten –url http://14e-
sharepoint /sites/demo1 denne er to delt, du ber den opprette ein url, vi gir so den ein gyldig
adresse der den skal ligge som då blir http://14e-sharepoint /sites/demo1. Vi har no gitt sida vår ein
url. Vi går vidare til den andre attributten –owneralias 14e-sharepoint\administrator, vi setter no
kven som er eigaren til denne sida, vi går no inn i 14e-sharepoint\ og velger administrator. Den tredje
attributten –name ”powershell Demo” gir eit namn til sida, som du ser velger vi og gi den namnet
”powershell Demo”. Den siste attributten er –template STS#0 her setter vi templaten som skal
brukast dette er ein veldig sterk del og kan bli veldig viktig for ein som skal lage ei ny side. Vi setter
kva template som skal brukast, vi har valgt STS#0 til akkurat denne sida, men der er mange template
som eksisterar som du kan bruke. Den neste cmdleten vi skal sjå på handlar om akkurat templates. Vi
har no laget ein ny side og gitt den ein god del informasjon på relativt kort tid. Prosessen for å lage
ein side kan ta litt tid. Men du fe beskjed når den er ferdig oppretta
Der er andre måtter og opprette ei side på. Vi ser på ein forenklar versjon under der vi kunn oppgir
urlen og eigaren, som du ser trenger du ikkje –url delen.
New-spsite http://14e-sharepoint/sites/demo2 -ownerAlias 14e-sharepoint\adminsitartor

Som vi nemnte skal vi no sjå på ein cmdlet for templates, den er veldig enkel Get-SPWebTemplate
denne cmdleten gir deg ei liste over alle tilgjengelige templates som er installert på maskina samt litt
informasjon om templata, i lista kan vi finne template som BLOG#0 og WIKI#0.
Get-SPWebTemplate

Vi skal no opprette eit nytt web dette er veldig enkelt som visst i dømet under, dei fleste
kommandoane er enkle.
new-spweb http://14e-sharepoint/demo3 -template ”STS#0”

Vi ser so på backup av sider det er ein enkel kommando; backup-spsite. Vi må ha med urlen
(http://14e-sharepoint/sites/demo1) på siden som skal bli tatt backup av då må den berre ha ein sti
og legge backupen i det gjer ved og skrive –path c:\backups\demo1_backup.bak men det er veldig
viktig at mappa eksisterer, siden kommandoen ikkje vil opprette pathen(stien), visst pathen er
ugyldig vil ikkje sida bli tatt backup av
backup-spsite http://14e-sharepoint/sites/demo1 -path c:\backups\demo1_backup.bak

Vi skal no sjå på korleis du kan sette max størrelse og advarsels størrelse på ein side det gjer vi med
ein veldig enkel kommando:
set-spsite –identity ”sitenamn” –maxsize 400000 –warningsize 200000
-identity ”sitenamn” er den viktige attributen her, ved og bruke –identity velger du side sitename kan
være http://14e-sharepoint/sites/demo1 , eller ein anna side, men det må være ein eksisterande
side. Vi har ikkje brukt so store verdiar her.

Vi skal no sjå på korleis du finner ut max lagrings nivå til dei forkskjellige sidene dine, dette gjerast
ved og bruke følgande kommando, under forklare vi den i steg:
Get-SPSiteAdministration | select –property
url,ownerloginname,@,Name=”Storage”;Expression=,$_.Quota.StorageMaximumLevel--
Get-spsiteadministration vil hent inforamsjonen du trenger om sidene. Vi piper so kommandoen
vidare til select der vi velger ut eiganskapane med –property, egenskapane er url, ownerloginname
og @,Name=”Storage”;Expression=,$_.Quota.StorageMaximumLevel-- der den sister er den som
henter ut dei forskjellige maks nivåa, visst du ikkje har satt eit max nivå på ein site vil det stå 0 der.

Vi skal no sjå litt meir på ein anna kommando: vi startar med kommandoen
Get-SPWebApplication http://14e-sharepoint | get-SPSiteAdministration –limit all | Foreach-Object
{$sum=0}{s$um+=$_.DiskUsed}{$sum}
Denne kommandoen returnerar sumen av disk plass brukt av denne sida i den spesifikke web
applikasjonen. Enkelt og greit.


Vi ser no på ein Kommando som skaffer oss URL til alle sidene i Webapplikasjonen
Get-SPWebApplication http://14e-sharepoint/sites/døme1 | Get-SPSiteAdministration -limit ALL |
select URL



Vi ser no på litt om korleis du kan få til remoting.
Ordforklaring (Credentialls=attestar)

Screenshot er tatt frå http://blogs.msdn.com/opal/archive/2010/03/07/sharepoint-2010-with-
windows-powershell-remoting-step-by-step.aspx

Sharepoint 2010 med Windows PowerShell Remoting Steg for Steg
Med alle forbedringane i Sharepoint 2010 for IT folk, er det klart at windows powershell support
kjeme høgt oppe. Vi skal no sjå på korleis du kan remote frå ein windows sharepoint 2010 server.
Gjere remoting support tilgjengelig på ein sharepoint server
Eit par steg er nødvendig for å kunne sette opp windows powershell remoting for sharepoint
Gjere Windows Powershell remoting tilgjengelig
Windows Powershell Remoting trenger å bli gjort tilgjenngelig ved å først kalle på følgande cmdlet i
Windows Powershell:
Enable-PSRemoting




Denne kommandoen vil gjere ein rask konfigurering av windows remote Managment (WinRM). Ein
http listener vil bli laga av WinRM og eit brannmur untak vil bli laga automatisk. Visst du får ein
Kerberos error, er det mulig at SPN for http/dittservernamn er ikkje der og du trenger å bruke setspn
for å legge det til. Men dette problemet dukker sjeldent opp.
Du kan teste om remotinga fungerer ved og skrive inn Enter-PSSession –ComputerName localhost
på same server box

Men der er to ekstra krav for Sharepoint Remoting. Det første er og auke minne og sette opp
CredSSP support.

Øking av tilgjengelig minne for remote shell

Noken av Sharepoint cmdlets kan kjøre nokso lenge og krever store mengder minne. Som standard,
vill eit remote shell allokere 150 MB av minne, dette kan føre til at enkelte kommandoar feiler, til
dømes site collection creation. Du kan bruke den følgande kommandoen for å auke denne grensa frå
150 MB til 1000 MB. Dette er kunn nødvendig visst du skal kjøre dei store kommandoane på
serveren.

Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1000


Sette opp CredSSP support

Credential Security Service Provider(CredSSP) autentiser skal bli brukt visst du trenger å ”double hop”
med dinne attestar. Det betyr ikkje at visst du brukar andre autentiserings metodar at du ikkje kan
kjøre cmdlets, det kjeme ann på dei forskjellige sikkerheits permission scenarioa, kan dei virke eller
ikkje virke. CredSSP er den beste måtten og handtere situasjonen på. I enkelte situasjonar, sjølv utan
CredSSP vil cmdlets fremdeles fungere. For å aktivere CredSSP på serveren, brukar du følgande
kommando:

Enble-WSManCredSSP –Role Server




Du kan bruke Get-WSManCredSSP for å sjekke om den er aktivert.
Sette opp klient maskina for remoting

Aktivere CredSSP support.

For å bruke CredSSP, trenger du å kjøre følgande kommando i Windows PowerShell, der * kan
erstatte med servernamnet du vil koble til:

Enable-WSManCredSSP -Role client -DelegateComputer *




Bruk Get-WSManCredSSP for å sjekke om det er gjort rett

Lagge og gå inn i ein remote session av Windows PowerShell

Visst din noværande bruker på klient maskina har tilgang til sharepoint farm og windows powershell
på remote boksa, kan du bruke Enter-PSSession for å lage og gå inn i remote sessionen.

Til dømes, koble opp mot 14e-sharepoint.14e-ad.local …

Enter-PSSession –ComputerName 14e-sharepoint.14e-ad.local

Visst det fungerar, kommando promten vil endre til [14e-sharepoint.14e-ad.local]: PS
C:\Users\Administrator\>.

Sessjonen vil avslutte når du skrive exit eller Exit-PSSession. Du kan ogso bruke New-PSSession for å
lage ein sessjon til å bruke med Invoke-Command.

For å koble ein maskin med CredSSP og ein anna forskjellige kredential, kan du bruke

Enter-PSSession –ComputerName 14e-sharepoint.14e-ad.local –Authentication CredSSP –Credential
domain\username

Dette vil slenge opp ein dialog boks, der du skriver in passordet. Visst du vil at denne processen skal
være heilt automatisert, kan du lagre attestane først inn i ei fil.
Lagre og bruke kredentialla for scripting.

Ein attest(credential) i Windows Powershell er eit objekt som innehelder brukarnamn (som klar tekst)
og passord (som sikker streng)

Du begynder med og bruke følgande kommando for å kovertere passord frå tastatur innputt til ein
sikker string i ein tekst fil.

Read-Host -AsSecureString | ConvertFrom-SecureString | out-file
C:\crd-sharepoint.txt




Når du trengere å lagge ein ny attest objekt, leser dette passordet(den sikkra strenga) frå fila og lager
attesten med den følgande kommandoen:

$pwd = Get-Content C:\crd-sharepoint.txt | ConvertTo-SecureString
Vi lager so attesten (bytter ut myusername med domain\brukernamn):

$crd = New-Object –TypeName
System.Management.Automation.PSCredential –ArgumentList
‛myusername‛,$pwd




Du vil då kunne lage attestar i kommando linja, utan noken dialog.

Enter-PSSession -ComputerName sharepoint.contoso.com -Authentication
CredSSP -Credential $crd


Laste inn SharePoint Windows PowerShell Snap-in

I motsettning til SharePoint Management Shell, trenger du og laste denne snap-in’en manuelt for å
bruke SharePoint sine cmdlets.

Add-PSSnapin Microsoft.SharePoint.Powershell

Vist det er gjort rett vil alt fungere no.
liste med powershell kommandoa

Det er viktig og få fram at dette er ikkje ei komplett liste over cmdlets og at den kan endrast sidan
sharepoint 2010 er fremdeles i beta

Now that the NDA on SharePoint 2010 is finally lifted at Microsoft SharePoint Conference in
Las Vegas I cannot help publishing this quick reference of all the 492(!) cmdlets available in
the current beta release. I am including quick help information for the cmdlets which already
have help.

[UPDATE: Oct 20: updated the reference to include 25 cmdlets I missed yesterday.]

These are listed by the names of objects they manage and sorted alphabetically – so scroll
down for SPFarm, SPSite, SPUser, and so on.

SPAccessServiceApplication

       Get-SPAccessServiceApplication – Gets an {Access Service} application object.
       New-SPAccessServiceApplication
       Set-SPAccessServiceApplication – Sets a global property for an {Access Services}
        application.

SPAdminJob

       Start-SPAdminJob – Immediately starts any waiting administrative job on the local
        computer.

SPAlternateURL

       Get-SPAlternateURL – Return all alternate URLs that match a given criteria.
       New-SPAlternateUrl – Creates a new public or internal URL for the specified Web
        application zone or resource.
       Remove-SPAlternateUrl – Completely deletes the specified alternate URL.
       Set-SPAlternateUrl – Configures the specified alternate URL.

SPApplicationContent

       Install-SPApplicationContent

SPAssignment

       Start-SPAssignment – Initiates a new assignment store.
       Stop-SPAssignment – Disposes of objects in the provided Assignment Collection.

SPBackupHistory

       Get-SPBackupHistory

SPBlobStorageLocation
      Move-SPBlobStorageLocation

SPBrowserCustomerExperienceImprovementProgram

      Get-SPBrowserCustomerExperienceImprovementProgram
      Set-SPBrowserCustomerExperienceImprovementProgram

SPBusinessDataCatalogAclToChildren

      Copy-SPBusinessDataCatalogAclToChildren

SPBusinessDataCatalogEntity

      Disable-SPBusinessDataCatalogEntity
      Enable-SPBusinessDataCatalogEntity

SPBusinessDataCatalogMetadataObject

      Get-SPBusinessDataCatalogMetadataObject
      Grant-SPBusinessDataCatalogMetadataObject
      Revoke-SPBusinessDataCatalogMetadataObject
      Set-SPBusinessDataCatalogMetadataObject

SPBusinessDataCatalogModel

      Export-SPBusinessDataCatalogModel
      Import-SPBusinessDataCatalogModel
      Remove-SPBusinessDataCatalogModel

SPBusinessDataCatalogPartition

      Remove-SPBusinessDataCatalogPartition

SPBusinessDataCatalogPartitionData

      Clear-SPBusinessDataCatalogPartitionData
      Export-SPBusinessDataCatalogPartitionData
      Import-SPBusinessDataCatalogPartitionData

SPBusinessDataCatalogServiceApplication

      New-SPBusinessDataCatalogServiceApplication
      Set-SPBusinessDataCatalogServiceApplication

SPBusinessDataCatalogServiceApplicationProxy

      New-SPBusinessDataCatalogServiceApplicationProxy

SPBusinessDataCatalogThrottleConfig
      Get-SPBusinessDataCatalogThrottleConfig
      Remove-SPBusinessDataCatalogThrottleConfig
      Set-SPBusinessDataCatalogThrottleConfig

SPCentralAdministration

      New-SPCentralAdministration – Creates a new Central Administration Web
       application.
      Set-SPCentralAdministration

SPCertificate

      Get-SPCertificate
      New-SPCertificate
      Remove-SPCertificate

SPCertificateStore

      Get-SPCertificateStore

SPClaimMapping

      Add-SPClaimMapping
      New-SPClaimMapping
      Remove-SPClaimMapping

SPClaimProviderManager

      Get-SPClaimProviderManager

SPClaimsObject

      New-SPClaimsObject

SPClaimsPrincipal

      New-SPClaimsPrincipal

SPConfigurationDatabase

      Backup-SPConfigurationDatabase – Performs a configuration only backup.
      Connect-SPConfigurationDatabase – Connects the computer to an existing
       configuration database.
      Disconnect-SPConfigurationDatabase
      New-SPConfigurationDatabase – Creates a new configuration database.
      Remove-SPConfigurationDatabase – Permanently removes the specified configuration
       database.

SPContentDatabase
      Check-SPContentDatabase
      Dismount-SPContentDatabase
      Get-SPContentDatabase
      Initialize-SPContentDatabase
      Mount-SPContentDatabase
      New-SPContentDatabase
      Remove-SPContentDatabase
      Set-SPContentDatabase
      Upgrade-SPContentDatabase

SPContentDeploymentJob

      Get-SPContentDeploymentJob
      New-SPContentDeploymentJob
      Remove-SPContentDeploymentJob
      Set-SPContentDeploymentJob
      Start-SPContentDeploymentJob

SPContentDeploymentPath

      Get-SPContentDeploymentPath
      New-SPContentDeploymentPath
      Remove-SPContentDeploymentPath
      Set-SPContentDeploymentPath

SPCustomLayoutsPage

      Get-SPCustomLayoutsPage
      Set-SPCustomLayoutsPage

SPDatabase

      Get-SPDatabase – Retrieves all properties of a database.

SPDataConnectionFile

      Get-SPDataConnectionFile – Returns a data connection file or a collection of data
       connection files.
      Install-SPDataConnectionFile – Installs the provided data connection file.
      Set-SPDataConnectionFile – Sets properties of a data connection file.
      Uninstall-SPDataConnectionFile – Removes a data connection file.

SPDataConnectionFileDependent

      Get-SPDataConnectionFileDependent – Returns administrator deployed form
       templates on the server dependent on a Universal Data Connection (UDC).

SPDesignerSettings

      Get-SPDesignerSettings
      Set-SPDesignerSettings

SPDiagnosticConfig

      Get-SPDiagnosticConfig
      Set-SPDiagnosticConfig

SPDiagnosticsProvider

      Get-SPDiagnosticsProvider
      Set-SPDiagnosticsProvider

SPediscoveryHub

      Set-SPediscoveryHub

SPEdiscoveryHubSearchScope

      Get-SPEdiscoveryHubSearchScope

SPediscoveryHubSite

      Get-SPediscoveryHubSite

SPEnterpriseSearchAdministrationComponent

      Get-SPEnterpriseSearchAdministrationComponent – Returns the administration
       component for a shared search application.
      Set-SPEnterpriseSearchAdministrationComponent – Sets properties of an
       administration component for a shared search application.

SPEnterpriseSearchCrawlComponent

      Get-SPEnterpriseSearchCrawlComponent – Returns a crawl component for a shared
       search application.
      New-SPEnterpriseSearchCrawlComponent – Creates a crawl component for a shared
       search application.
      Remove-SPEnterpriseSearchCrawlComponent – Deletes a crawl component from a
       shared search application.

SPEnterpriseSearchCrawlContentSource

      Get-SPEnterpriseSearchCrawlContentSource – Returns a crawl content source.
      New-SPEnterpriseSearchCrawlContentSource – Creates a new crawl content source
       for a shared search application.
      Remove-SPEnterpriseSearchCrawlContentSource – Deletes a specified crawl content
       source from a search application.
      Set-SPEnterpriseSearchCrawlContentSource – Sets the properties of a crawl content
       source for a shared search application.
SPEnterpriseSearchCrawlCustomConnector

      Get-SPEnterpriseSearchCrawlCustomConnector
      New-SPEnterpriseSearchCrawlCustomConnector
      Remove-SPEnterpriseSearchCrawlCustomConnector

SPEnterpriseSearchCrawlDatabase

      Get-SPEnterpriseSearchCrawlDatabase – Returns a crawl store.
      New-SPEnterpriseSearchCrawlDatabase – Adds a crawl store to a shared search
       application.
      Remove-SPEnterpriseSearchCrawlDatabase – Deletes a content crawl store.
      Set-SPEnterpriseSearchCrawlDatabase

SPEnterpriseSearchCrawlExtension

      Get-SPEnterpriseSearchCrawlExtension – Returns the extension rule for the extension
       collection.
      New-SPEnterpriseSearchCrawlExtension – Adds an extension rule to a shared search
       application.
      Remove-SPEnterpriseSearchCrawlExtension – Removes a file name extension from
       the list of files that can be crawled.

SPEnterpriseSearchCrawlMapping

      Get-SPEnterpriseSearchCrawlMapping – Returns a crawl mapping for the search
       application.
      New-SPEnterpriseSearchCrawlMapping – Creates a crawl mapping rule for a shared
       search application.
      Remove-SPEnterpriseSearchCrawlMapping – Deletes a crawl mapping.

SPEnterpriseSearchCrawlRule

      Get-SPEnterpriseSearchCrawlRule – Output an CrawlRule Object.
      New-SPEnterpriseSearchCrawlRule – Output an CrawlRule Object.
      Remove-SPEnterpriseSearchCrawlRule – Output an CrawlRule Object.
      Set-SPEnterpriseSearchCrawlRule – Output an CrawlRule Object.

SPEnterpriseSearchCrawlTopology

      Get-SPEnterpriseSearchCrawlTopology – Returns a crawl topology.
      New-SPEnterpriseSearchCrawlTopology – Adds a crawl topology to a shared search
       application.
      Remove-SPEnterpriseSearchCrawlTopology – Deletes a crawl topology.
      Set-SPEnterpriseSearchCrawlTopology – Sets the properties of a crawl topology on a
       shared search application.

SPEnterpriseSearchExtendedClickThroughExtractorJobDefinition

      Get-SPEnterpriseSearchExtendedClickThroughExtractorJobDefinition
SPEnterpriseSearchExtendedConnectorProperty

      Get-SPEnterpriseSearchExtendedConnectorProperty
      Set-SPEnterpriseSearchExtendedConnectorProperty

SPEnterpriseSearchExtendedQueryProperty

      Get-SPEnterpriseSearchExtendedQueryProperty
      Set-SPEnterpriseSearchExtendedQueryProperty

SPEnterpriseSearchIndexPartition

      Get-SPEnterpriseSearchIndexPartition – Returns an index partition for a query
       topology.
      Set-SPEnterpriseSearchIndexPartition – Sets properties of an index partition for a
       query topology.

SPEnterpriseSearchLanguageResourcePhrase

      Get-SPEnterpriseSearchLanguageResourcePhrase – Returns a language resource
       phrase.
      New-SPEnterpriseSearchLanguageResourcePhrase – Adds a language resource
       phrase to a shared search application.
      Remove-SPEnterpriseSearchLanguageResourcePhrase – Deletes a language resource
       phrase from a shared search application.

SPEnterpriseSearchManagerService

      Get-SPEnterpriseSearchManagerService – Returns the search manager service.

SPEnterpriseSearchManagerServiceInstance

      Get-SPEnterpriseSearchManagerServiceInstance – Returns the service manager
       service instance.
      Start-SPEnterpriseSearchManagerServiceInstance – Starts an instance of a search
       manager service.
      Stop-SPEnterpriseSearchManagerServiceInstance – Stops an instance of a search
       manager service.

SPEnterpriseSearchManagerServiceProxy

      Get-SPEnterpriseSearchManagerServiceProxy – Returns the search manager service
       proxy.

SPEnterpriseSearchMetadataCategory

      Get-SPEnterpriseSearchMetadataCategory – Returns a crawled property category.
      New-SPEnterpriseSearchMetadataCategory – Adds a crawled property category to a
       shared search application.
      Remove-SPEnterpriseSearchMetadataCategory – Deletes a crawled property
       category.
      Set-SPEnterpriseSearchMetadataCategory – Sets properties of a crawled property
       category for a shared search application.

SPEnterpriseSearchMetadataCrawledProperty

      Get-SPEnterpriseSearchMetadataCrawledProperty – Returns a crawled property.
      New-SPEnterpriseSearchMetadataCrawledProperty – Adds a crawled property
       category to a shared search application.
      Set-SPEnterpriseSearchMetadataCrawledProperty – Sets the properties of a metadata
       crawled property for a shared search application.

SPEnterpriseSearchMetadataManagedProperty

      Get-SPEnterpriseSearchMetadataManagedProperty – Returns a managed property.
      New-SPEnterpriseSearchMetadataManagedProperty – Adds a managed property to a
       shared search application.
      Remove-SPEnterpriseSearchMetadataManagedProperty – Deletes a metadata
       managed property.
      Set-SPEnterpriseSearchMetadataManagedProperty – Sets the properties of a
       metadata managed property.

SPEnterpriseSearchMetadataMapping

      Get-SPEnterpriseSearchMetadataMapping – Returns the current state of a managed
       property mapping.
      New-SPEnterpriseSearchMetadataMapping – Adds a managed property mapping to a
       shared search application.
      Remove-SPEnterpriseSearchMetadataMapping – Deletes a metadata mapping from a
       managed property.
      Set-SPEnterpriseSearchMetadataMapping – Sets the properties of a managed property
       mapping for a shared search application.

SPEnterpriseSearchPropertyDatabase

      Get-SPEnterpriseSearchPropertyDatabase – Returns a property store.
      New-SPEnterpriseSearchPropertyDatabase – Adds a new property store to a shared
       search application.
      Remove-SPEnterpriseSearchPropertyDatabase – Deletes a property store.
      Set-SPEnterpriseSearchPropertyDatabase

SPEnterpriseSearchQueryAuthority

      Get-SPEnterpriseSearchQueryAuthority – Returns an authoritative page.
      New-SPEnterpriseSearchQueryAuthority – Adds an authoritative page to a shared
       search application.
      Remove-SPEnterpriseSearchQueryAuthority – Deletes an authoritative page.
      Set-SPEnterpriseSearchQueryAuthority – Sets the properties of an authoritative page
       for a shared search application.
SPEnterpriseSearchQueryComponent

      Get-SPEnterpriseSearchQueryComponent – Returns a query component.
      New-SPEnterpriseSearchQueryComponent – Adds a query component to a query
       topology.
      Remove-SPEnterpriseSearchQueryComponent – Deletes a query component.
      Restart-SPEnterpriseSearchQueryComponent
      Set-SPEnterpriseSearchQueryComponent

SPEnterpriseSearchQueryDemoted

      Get-SPEnterpriseSearchQueryDemoted – Returns a demoted site rule.
      New-SPEnterpriseSearchQueryDemoted – Adds a demoted site rule to a shared search
       application.
      Remove-SPEnterpriseSearchQueryDemoted – Deletes a demoted site rule.

SPEnterpriseSearchQueryKeyword

      Get-SPEnterpriseSearchQueryKeyword – Returns a keyword term.
      New-SPEnterpriseSearchQueryKeyword – Adds a keyword term to a shared search
       application.
      Remove-SPEnterpriseSearchQueryKeyword – Deletes a query keyword.
      Set-SPEnterpriseSearchQueryKeyword – Sets the properties of a keyword term for a
       shared search application.

SPEnterpriseSearchQueryScope

      Get-SPEnterpriseSearchQueryScope – Returns a query results scope.
      New-SPEnterpriseSearchQueryScope – Adds a query results scope to a shared search
       application.
      Remove-SPEnterpriseSearchQueryScope – Deletes a query scope.
      Set-SPEnterpriseSearchQueryScope – Sets the properties of a query results scope for a
       shared search application.

SPEnterpriseSearchQueryScopeRule

      Get-SPEnterpriseSearchQueryScopeRule – Returns a shared scope rule.
      New-SPEnterpriseSearchQueryScopeRule – Adds a shared scope rule to a query
       scope.
      Remove-SPEnterpriseSearchQueryScopeRule – Deletes query results scope rules.
      Set-SPEnterpriseSearchQueryScopeRule – Sets the properties of a shared scope rule
       for a query scope.

SPEnterpriseSearchQuerySuggestionCandidates

      Get-SPEnterpriseSearchQuerySuggestionCandidates

SPEnterpriseSearchQueryTopology

      Get-SPEnterpriseSearchQueryTopology – Returns a query topology.
      New-SPEnterpriseSearchQueryTopology – Adds a query topology to a shared search
       application.
      Remove-SPEnterpriseSearchQueryTopology – Deletes a query topology.
      Set-SPEnterpriseSearchQueryTopology – Sets the properties of a query topology for a
       shared search application.

SPEnterpriseSearchRankingModel

      Get-SPEnterpriseSearchRankingModel – Returns a ranking model.
      New-SPEnterpriseSearchRankingModel – Adds a ranking model to a shared search
       application.
      Remove-SPEnterpriseSearchRankingModel – Deletes a ranking model.
      Set-SPEnterpriseSearchRankingModel – Sets the properties of a ranking model for a
       shared search application.

SPEnterpriseSearchSecurityTrimmer

      Get-SPEnterpriseSearchSecurityTrimmer – Returns a custom security trimmer.
      New-SPEnterpriseSearchSecurityTrimmer – Adds a custom security trimmer to a
       shared search application.
      Remove-SPEnterpriseSearchSecurityTrimmer – Deletes a custom security trimmer.

SPEnterpriseSearchService

      Get-SPEnterpriseSearchService – Returns the search service for the farm.
      Set-SPEnterpriseSearchService – Sets the properties of a search service for a farm.

SPEnterpriseSearchServiceApplication

      Get-SPEnterpriseSearchServiceApplication – Returns the search service application
       for a farm.
      New-SPEnterpriseSearchServiceApplication – Adds a search service application to a
       farm.
      Remove-SPEnterpriseSearchServiceApplication – Deletes a search service application.
      Restore-SPEnterpriseSearchServiceApplication
      Set-SPEnterpriseSearchServiceApplication – Sets the properties of a search service
       application for a farm.
      Upgrade-SPEnterpriseSearchServiceApplication

SPEnterpriseSearchServiceApplicationProxy

      Get-SPEnterpriseSearchServiceApplicationProxy – Returns the search service
       application proxy.
      New-SPEnterpriseSearchServiceApplicationProxy – Adds a site hit rule for a search
       application.
      Remove-SPEnterpriseSearchServiceApplicationProxy – Deletes a search service
       application proxy.
      Set-SPEnterpriseSearchServiceApplicationProxy – Sets properties of a search service
       application proxy.
SPEnterpriseSearchServiceInstance

      Get-SPEnterpriseSearchServiceInstance – Returns the search service instance for a
       farm.
      Set-SPEnterpriseSearchServiceInstance – Sets the properties of a search service
       instance.
      Start-SPEnterpriseSearchServiceInstance – Starts an instance of a search service.
      Stop-SPEnterpriseSearchServiceInstance – Stops an instance of a search service.

SPEnterpriseSearchSiteHitRule

      Get-SPEnterpriseSearchSiteHitRule – Returns shared site hit rule.
      New-SPEnterpriseSearchSiteHitRule – Output an SiteHitRule Object.
      Remove-SPEnterpriseSearchSiteHitRule – Output an SiteHitRule Object.

SPEnterpriseSearchTopology

      Export-SPEnterpriseSearchTopology – Saves an existing search topology.
      Import-SPEnterpriseSearchTopology – Imports and activates a topology from an
       XML file.

SPExcelBlockedFileType

      Get-SPExcelBlockedFileType
      New-SPExcelBlockedFileType
      Remove-SPExcelBlockedFileType

SPExcelDataConnectionLibrary

      Get-SPExcelDataConnectionLibrary
      New-SPExcelDataConnectionLibrary
      Remove-SPExcelDataConnectionLibrary
      Set-SPExcelDataConnectionLibrary

SPExcelDataProvider

      Get-SPExcelDataProvider
      New-SPExcelDataProvider
      Remove-SPExcelDataProvider
      Set-SPExcelDataProvider

SPExcelFileLocation

      Get-SPExcelFileLocation
      New-SPExcelFileLocation
      Remove-SPExcelFileLocation
      Set-SPExcelFileLocation

SPExcelServiceApplication
      Get-SPExcelServiceApplication – Gets an {Excel Service} application object.
      New-SPExcelServiceApplication -
      Set-SPExcelServiceApplication – Sets a global property for an {Excel Services}
       application.

SPExcelUserDefinedFunction

      Get-SPExcelUserDefinedFunction
      New-SPExcelUserDefinedFunction
      Remove-SPExcelUserDefinedFunction
      Set-SPExcelUserDefinedFunction

SPFarm

      Backup-SPFarm – Creates a backup of an individual database, Web application, or the
       entire farm.
      Get-SPFarm – Returns the local SharePoint farm.
      Restore-SPFarm

SPFarmConfig

      Get-SPFarmConfig
      Set-SPFarmConfig

SPFarmEncryptionKey

      Update-SPFarmEncryptionKey – Changes the farm encryption key to a new value and
       re-encrypts all data currently encrypted with the current farm encryption key with the
       new one.

SPFeature

      Disable-SPFeature – Disables an installed feature at a given scope.
      Enable-SPFeature – Enables an installed feature at the given scope.
      Get-SPFeature – Returns the features based on a give scope.
      Install-SPFeature – Install a feature using the Feature.xml file.
      Uninstall-SPFeature – Uninstalls an installed feature definition.

SPFeatureSet

      Get-SPFeatureSet
      New-SPFeatureSet
      Remove-SPFeatureSet

SPFeatureSetMember

      Add-SPFeatureSetMember
      Remove-SPFeatureSetMember

SPHelpCollection
      Get-SPHelpCollection
      Install-SPHelpCollection – Install the provided help collection files.
      Uninstall-SPHelpCollection

SPIdentityProvider

      Get-SPIdentityProvider
      New-SPIdentityProvider
      Remove-SPIdentityProvider
      Set-SPIdentityProvider

SPIisWebServiceApplicationPool

      Get-SPIisWebServiceApplicationPool – Returns the specified Internet Information
       Services (IIS) Application pool.
      New-SPIisWebServiceApplicationPool – Creates a new Web service application pool.
      Remove-SPIisWebServiceApplicationPool – Completely deletes the specified Web
       service application pool.
      Set-SPIisWebServiceApplicationPool – Changes the account used for the Identity of
       the specified application pool.

SPIisWebServiceSettings

      Get-SPIisWebServiceSettings – Returns the common Web Service settings.
      Set-SPIisWebServiceSettings – Configures one or more common settings for all Web
       services.

SPInfoPathAdministrationFiles

      Export-SPInfoPathAdministrationFiles – Saves form templates on the SharePoint
       Central Administration Web site and UDCX files to a CAB file.
      Import-SPInfoPathAdministrationFiles – Imports form templates and UDCX files
       located on the SharePoint Central Administration Web site.

SPInfoPathFormsService

      Get-SPInfoPathFormsService – Returns the forms service settings in the farm.
      Set-SPInfoPathFormsService – Sets paramaters for the InfoPath Forms Services.

SPInfoPathFormTemplate

      Disable-SPInfoPathFormTemplate – Deactivate a form template from the specified
       site collection.
      Enable-SPInfoPathFormTemplate – Activates a form template in the specified site
       collection.
      Get-SPInfoPathFormTemplate – Returns an InfoPath form template.
      Install-SPInfoPathFormTemplate – Installs an InfoPath form template on a farm.
      Set-SPInfoPathFormTemplate – Sets properties of an InfoPath form template.
      Start-SPInfoPathFormTemplate – Unquieces an InfoPath form template on a farm
       after an upgrade.
      Stop-SPInfoPathFormTemplate – Disables an InfoPath form template on a farm before
       an upgrade.
      Test-SPInfoPathFormTemplate – Validates that a form template can be browser-
       enabled.
      Uninstall-SPInfoPathFormTemplate – Removes a form template from a farm.
      Update-SPInfoPathFormTemplate – Upgrades all forms templates on the farm.

SPInfoPathUrl

      Update-SPInfoPathUrl – Executes InfoPath XSN/UDC fix-up on SharePoint Services.

SPInfoPathUserAgent

      Add-SPInfoPathUserAgent – Adds a user agent to a farm.
      Get-SPInfoPathUserAgent – Returns a user agent or all the currently defined user
       agents for the farm.
      Remove-SPInfoPathUserAgent – Removes a user agent.

SPInfoPathWebServiceProxy

      Get-SPInfoPathWebServiceProxy – Returns the Web proxy settings for the Web
       application.
      Set-SPInfoPathWebServiceProxy – Sets parameters for an existing SharePoint Web
       service application.

SPLogEvent

      Get-SPLogEvent

SPLogFile

      Merge-SPLogFile
      New-SPLogFile

SPLogLevel

      Clear-SPLogLevel
      Get-SPLogLevel
      Set-SPLogLevel

SPManagedAccount

      Get-SPManagedAccount – Retrieves accounts registered in configuration database.
      New-SPManagedAccount – Registers a new managed account.
      Remove-SPManagedAccount – Removes a managed account from the farm.
      Set-SPManagedAccount – Configures the managed account.

SPManagedPath

      Get-SPManagedPath – Returns all managed paths that match the given criteria.
      New-SPManagedPath – Creates a new managed path for the given Web application
       for all host header site collections.
      Remove-SPManagedPath – Deletes the specified managed path from the specified
       host header or Web application.

SPMetadataServiceApplication

      Get-SPMetadataServiceApplication – Get a MetadataWebServiceApplication instance
      New-SPMetadataServiceApplication – Create a Metadata Shared Service Application
      Set-SPMetadataServiceApplication – Set properties on a Metadata Shared Service
       Application

SPMetadataServiceApplicationProxy

      Get-SPMetadataServiceApplicationProxy – Get a
       MetadataWebServiceApplicationProxy instance
      New-SPMetadataServiceApplicationProxy – Create proxy for remote or local
       Metadata shared service application
      Set-SPMetadataServiceApplicationProxy – Update metadata proxy settings

SPMetadataWebServicePartitionData

      Clear-SPMetadataWebServicePartitionData
      Export-SPMetadataWebServicePartitionData
      Import-SPMetadataWebServicePartitionData

SPMobileMessagingAccount

      Get-SPMobileMessagingAccount – Retrieves mobile messaging accounts for the
       specified Web application.
      Set-SPMobileMessagingAccount – Configures the specified mobile messaging
       account.

SPObaSolutionPackage

      New-SPObaSolutionPackage

SPObjectSecurity

      Get-SPObjectSecurity – Returns the security information for the specified service
       application.

SPParentFarmTrust

      Get-SPParentFarmTrust
      New-SPParentFarmTrust
      Remove-SPParentFarmTrust
      Set-SPParentFarmTrust

SPPassPhrase
      Set-SPPassPhrase – Sets the Passphrase to a new value.

SPProcessAccount

      Get-SPProcessAccount

SPProduct

      Get-SPProduct – Returns a list of the SharePoint related products installed in the farm
       and the versions of all updates installed for each of them.

SPProfileServiceApplication

      New-SPProfileServiceApplication
      Set-SPProfileServiceApplication

SPProfileServiceApplicationProxy

      New-SPProfileServiceApplicationProxy
      Set-SPProfileServiceApplicationProxy

SPProfileServiceApplicationTenant

      Add-SPProfileServiceApplicationTenant
      Export-SPProfileServiceApplicationTenant
      Import-SPProfileServiceApplicationTenant
      Remove-SPProfileServiceApplicationTenant
      Set-SPProfileServiceApplicationTenant

SPResourceSecurity

      Initialize-SPResourceSecurity

SPSearchService

      Get-SPSearchService – Returns a search service.
      Set-SPSearchService – Sets properties of a search service.

SPSearchServiceInstance

      Get-SPSearchServiceInstance – Returns an instance of a search service.
      Set-SPSearchServiceInstance – Sets properties of a search service instance.

SPSecureStoreApplication

      Get-SPSecureStoreApplication
      New-SPSecureStoreApplication
      Remove-SPSecureStoreApplication
      Set-SPSecureStoreApplication
SPSecureStoreApplicationField

      New-SPSecureStoreApplicationField

SPSecureStoreApplicationServerKey

      Update-SPSecureStoreApplicationServerKey

SPSecureStoreCredentialMapping

      Clear-SPSecureStoreCredentialMapping
      Update-SPSecureStoreCredentialMapping

SPSecureStoreGroupCredentialMapping

      Update-SPSecureStoreGroupCredentialMapping

SPSecureStoreMasterKey

      Update-SPSecureStoreMasterKey

SPSecureStoreServiceApplication

      New-SPSecureStoreServiceApplication
      Set-SPSecureStoreServiceApplication

SPSecureStoreServiceApplicationProxy

      New-SPSecureStoreServiceApplicationProxy

SPSecureStoreTargetApplication

      New-SPSecureStoreTargetApplication

SPSecurityTokenService

      Get-SPSecurityTokenService

SPServer

      Get-SPServer – Returns the server(s) in the farm that match the given identity.
      Rename-SPServer – Renames a server that is currently connected to the farm.

SPServiceApplication

      Get-SPServiceApplication – Return the specified service application.
      Grant-SPServiceApplication – Grants a user account access to the Service
       Application.
      Publish-SPServiceApplication – Share the specified local Service Application outside
       the farm.
      Remove-SPServiceApplication – Deletes the specified service application on the local
       server.
      Revoke-SPServiceApplication – Revokes a user’s access to a service application.
      Set-SPServiceApplication
      Unpublish-SPServiceApplication – Stop sharing the specified service application
       outside the farm.

SPServiceApplicationProxy

      Get-SPServiceApplicationProxy – Returns an instance of the specified Service
       Application Proxy.
      Remove-SPServiceApplicationProxy – Delete the specified service application proxy.

SPServiceApplicationProxyGroup

      Get-SPServiceApplicationProxyGroup – Returns the proxy group for the specified
       service application.
      New-SPServiceApplicationProxyGroup – Creates a new service application proxy
       group.
      Remove-SPServiceApplicationProxyGroup – Completely deletes the specified service
       application proxy group.

SPServiceApplicationProxyGroupMember

      Add-SPServiceApplicationProxyGroupMember – Adds a member to the service
       application proxy group.
      Remove-SPServiceApplicationProxyGroupMember – Removes one or more proxies
       from the specified service application proxy group.

SPServiceContext

      Get-SPServiceContext

SPServiceEndpoint

      Get-SPServiceEndpoint
      Set-SPServiceEndpoint

SPServiceInstance

      Get-SPServiceInstance – Returns the services instance for a specific server or the
       farm.
      Start-SPServiceInstance – Starts the Service Instance for a Service on a specific server
       or the farm.
      Stop-SPServiceInstance – Stops the Service Instance for a Service.

SPSessionStateService

      Disable-SPSessionStateService
      Enable-SPSessionStateService
        Get-SPSessionStateService
        Set-SPSessionStateService

SPSharedServiceApplicationInfo

        Receive-SPSharedServiceApplicationInfo

SPSingleSignOn

        Disable-SPSingleSignOn – Disables the SharePoint Single Sign On service

SPSingleSignOnDatabase

        Upgrade-SPSingleSignOnDatabase – Upgrades the SSO 12 data to a Secure Store
         database

SPSite

        Backup-SPSite – Performs a backup of a site collection.
        Get-SPSite – Returns all site collections that match the given criteria.
        New-SPSite – Creates a new site collection at the specified URL.
        Remove-SPSite – Completely deletes an existing site collection and all sub-sites.
        Restore-SPSite – Restores a site collection.
        Set-SPSite – Configures the specified sites.

SPSiteAdministration

        Get-SPSiteAdministration – Returns a site administration object which allows a farm
         administrator to view certain information about site collections they may not have
         access to.
        Set-SPSiteAdministration – Allows farm administrators to configure any site
         collection.

SPSiteSubscription

        Get-SPSiteSubscription – Returns the site subscription for the given URL or all site
         subscriptions in the local farm.
        New-SPSiteSubscription – Creates a new site subscription.
        Remove-SPSiteSubscription – Removes a site subscription along with all contained
         site collections and settings.

SPSiteSubscriptionConfig

        Get-SPSiteSubscriptionConfig
        Set-SPSiteSubscriptionConfig

SPSiteSubscriptionMetadataConfig

        Get-SPSiteSubscriptionMetadataConfig
        Remove-SPSiteSubscriptionMetadataConfig
      Set-SPSiteSubscriptionMetadataConfig

SPSiteSubscriptionSettings

      Export-SPSiteSubscriptionSettings
      Import-SPSiteSubscriptionSettings
      Remove-SPSiteSubscriptionSettings

SPSolution

      Add-SPSolution
      Get-SPSolution
      Install-SPSolution
      Remove-SPSolution
      Uninstall-SPSolution
      Update-SPSolution

SPSolutionDeploymentLock

      Remove-SPSolutionDeploymentLock

SPStateServiceApplication

      Get-SPStateServiceApplication
      New-SPStateServiceApplication
      Set-SPStateServiceApplication

SPStateServiceApplicationProxy

      Get-SPStateServiceApplicationProxy
      New-SPStateServiceApplicationProxy
      Set-SPStateServiceApplicationProxy

SPStateServiceDatabase

      Dismount-SPStateServiceDatabase
      Get-SPStateServiceDatabase
      Initialize-SPStateServiceDatabase
      Mount-SPStateServiceDatabase
      New-SPStateServiceDatabase
      Remove-SPStateServiceDatabase
      Resume-SPStateServiceDatabase
      Set-SPStateServiceDatabase
      Suspend-SPStateServiceDatabase

SPSubscriptionSettingsServiceApplication

      New-SPSubscriptionSettingsServiceApplication
      Set-SPSubscriptionSettingsServiceApplication
SPSubscriptionSettingsServiceApplicationProxy

      New-SPSubscriptionSettingsServiceApplicationProxy

SPTaxonomySession

      Get-SPTaxonomySession – Get a TaxonomySession instance

SPTimerJob

      Disable-SPTimerJob
      Enable-SPTimerJob
      Get-SPTimerJob
      Set-SPTimerJob
      Start-SPTimerJob

SPTopologyWebServiceApplication

      Get-SPTopologyWebServiceApplication
      Set-SPTopologyWebServiceApplication

SPTopologyWebServiceProxy

      Get-SPTopologyWebServiceProxy
      Set-SPTopologyWebServiceProxy

SPUsageApplication

      Get-SPUsageApplication
      New-SPUsageApplication
      Remove-SPUsageApplication
      Set-SPUsageApplication

SPUsageDefinition

      Get-SPUsageDefinition
      Set-SPUsageDefinition

SPUsageLogFile

      New-SPUsageLogFile

SPUsageService

      Get-SPUsageService
      Set-SPUsageService

SPUser

      Get-SPUser – Returns the user(s) that match a given search criteria.
      Move-SPUser – Migrates a user account in .
      New-SPUser – Adds an existing user to a site with the designated permissions.
      Remove-SPUser – Removes a user from a web site.
      Set-SPUser – Configures properties on an existing user.

SPUserProfilePhotoStore

      Update-SPUserProfilePhotoStore

SPUserSolution

      Add-SPUserSolution
      Get-SPUserSolution
      Install-SPUserSolution
      Remove-SPUserSolution
      Uninstall-SPUserSolution
      Update-SPUserSolution

SPVisioExternalData

      Get-SPVisioExternalData – Returns the settings for external data connections for a
       Visio Service application.
      Set-SPVisioExternalData

SPVisioPerformance

      Get-SPVisioPerformance – Returns the Visio Graphics Services settings for the
       performance of a Visio Service application.
      Set-SPVisioPerformance – Sets performance properties for a Visio Services
       application.

SPVisioSafeDataProvider

      Get-SPVisioSafeDataProvider – Returns the settings of a safe data provider for a
       Visio Services application.
      New-SPVisioSafeDataProvider – Adds a new data provider to a Visio Services
       application.
      Remove-SPVisioSafeDataProvider – Removes a data provider from a Visio Services
       application.
      Set-SPVisioSafeDataProvider – Specifies a description of a safe data provider for a
       Visio Services application.

SPVisioServiceApplication

      Get-SPVisioServiceApplication – Returns properties of a Visio Services application or
       a collection of Visio Services applications.
      New-SPVisioServiceApplication – Adds a new Visio Services application to a farm.
      Remove-SPVisioServiceApplication – Removes a Visio Services application from a
       farm.
      Set-SPVisioServiceApplication – Sets the ServiceApplicationPool property of a Visio
       Services application.

SPVisioServiceApplicationProxy

      Get-SPVisioServiceApplicationProxy – Returns properties of a Visio Services
       application proxy or a collection of Visio Services application proxies.
      New-SPVisioServiceApplicationProxy – Adds a new Visio Services application proxy
       to a farm.
      Remove-SPVisioServiceApplicationProxy – Removes a Visio Services application
       proxy from a farm.

SPWeb

      Export-SPWeb – Exports a site collection, Web application, list, or library.
      Get-SPWeb – Returns all sub-sites that match the given criteria.
      Import-SPWeb – Imports a site collection, Web application, list, or library.
      New-SPWeb – Creates a new sub-site under any existing site collection.
      Remove-SPWeb – Completely deletes the specified Web.
      Set-SPWeb – Configures the specified sub-site.

SPWebAnalyticsServiceApplication

      Get-SPWebAnalyticsServiceApplication – Returns the settings for a Web Analytics
       Service application.
      New-SPWebAnalyticsServiceApplication – Adds a new Web Analytics Service
       application to the farm.
      Set-SPWebAnalyticsServiceApplication – Sets properties of a Web Analytics Service
       application.

SPWebAnalyticsServiceApplicationProxy

      New-SPWebAnalyticsServiceApplicationProxy – Adds a new Web Analytics Service
       application proxy to the farm.

SPWebApplication

      Get-SPWebApplication – Returns all Web applications that match the given criteria.
      New-SPWebApplication – Creates a new Web application within the local farm.
      Remove-SPWebApplication – Deletes the specified Web application.
      Set-SPWebApplication – Configure the specified Web application.

SPWebApplicationExtension

      New-SPWebApplicationExtension – Creates a new zone instance for the Web
       application.

SPWebApplicationHttpThrottling

      Disable-SPWebApplicationHttpThrottling
      Enable-SPWebApplicationHttpThrottling

SPWebApplicationHttpThrottlingMonitor

      Set-SPWebApplicationHttpThrottlingMonitor

SPWebApplicationHttpThrottlingMonitors

      Get-SPWebApplicationHttpThrottlingMonitors

SPWebApplicationSiginRedirectUrl

      Set-SPWebApplicationSiginRedirectUrl

SPWebPartPack

      Get-SPWebPartPack – Return the Web part packages installed for the specified scope.
      Install-SPWebPartPack – Installs the specified Web part package to the specified
       location.
      Uninstall-SPWebPartPack – Uninstall the specified Web part package.

SPWebTemplate

      Get-SPWebTemplate – Displays all globally installed site templates that match the
       given identity.
      Install-SPWebTemplate – Installs the given site template.
      Set-SPWebTemplate – Changes the title and description of an installed site template.
      Uninstall-SPWebTemplate – Uninstall the given site template.

SPWordConversionServiceApplication

      New-SPWordConversionServiceApplication – Creates a new service application.
      Set-SPWordConversionServiceApplication – Sets parameters on a service application.

SPWordConversionServiceApplicationProxy

      New-SPWordConversionServiceApplicationProxy – Creates a new service application
       proxy.

SPWorkflowConfig

      Get-SPWorkflowConfig – Returns workflow settings for the specified Web
       application.
      Set-SPWorkflowConfig – Configures the workflow settings for the specified Web
       application.



Følgjande manual på oppseting av PowerShell ISE for SharePoint 2010 er hentet fra:
http://www.shillier.com/archive/2010/01/18/setting-up-powershell-ise-for-sharepoint-2010.aspx

Setting up PowerShell ISE for SharePoint 2010
Tags: PowerShell

PowerShell is a great companion for SharePoint 2010. As a developer, I find the best way to use it is
through the Integrated Scripting Environment (ISE). The only problem is, the SharePoint snap-in
doesn't load automatically when I start PowerShell ISE. So, here are the steps I follow to get ISE
installed and make sure the SharePoint snap-in alwyas loads.


1. Open Server Manager

2. Click the Features node

3. Click the Add Features link

4. Check the box for "Windows PowerShell Integrated Scripting Environment".

5. Click Next, then Install

6. Wait until installation is complete

7. Open Powershell ISE from Programs>Accessories>PowerShell folder

8. Run the following code from the immediate window in ISE to create a new profile for all users



if (!(test-path $profile.AllUsersAllHosts))
{new-item -type file -path $profile.AllUsersAllHosts-force}



9. Run the following code to edit the new profile



psEdit $profile.AllUsersAllHosts



10. When profile1.ps1 opens, add the following code to attach the SharePoint snap-
in every time PowerShell is run.



 If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction
SilentlyContinue) -eq $null )
{ Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }



11. Save profile.ps1 and close PowerShell ISE.
12. Start PowerShell ISE again and type the following command to verify that the
SharePoint snap-in loaded. You should see SharePoint-specific command listed.



Get-Command Get-SP*




Følgjande manual er hentet fra, all heder og ære går til undernevnte:

http://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=56

12/28/2009
SharePoint 2010 PowerShell Permissions Explained

SharePoint 2010 has increased flexibility for administrative privileges of command line operations.
The end result is that there is a bit more complexity in setting up your administrative privileges, so I
wanted to create a post to try and clear up administration permissions for SharePoint 2010.

Foremost, please keep in mind that I’m going to discuss the minimum required privileges for each
role—so there are lots of additional configurations; this is the just bare requirements.

First we need to talk about Central Administration, as the different permissions often lead to
confusion. To access Central Administration, you need to be a Farm Administration—aka, a member
of the “Farm Administrators Group”. This is really a UI only permission (I recommend you think of
“Farm Adminstration Privs” as “The ability to use Central Admin”. The reason for this is that Farm
Administrators have the ability to run operations via-the Central Administation Web Application;
keep in mind that no operation actually runs against the Configuration Database as the user but
rather as the App Pool account for the Web App.

With STSADM and PowerShell, all commands are run as the user who executes the command (not
through the Central Admin Web Application). The good part about this is that any command can be
run from any machine (no CA required), but this means that the user themselves needs the proper
permissions. With STSADM, the user required Box, Farm, and SQL permissions—way too much to
run a truly “Least Privs” environment. With 2010 there is the flexibility to only require PowerShell &
SQL permissions*.

          *Note: Box permissions are required for a small subset of commands that touch the Windows
filesystem or registry. Also, Box and SQL are required for all “setup” operations.

On that note, there are only two requirements for most commands. The user must be:

       A member of the WSS_ADMIN_WGP group (this is a Windows Group on the machine the
        user is executing commands on)
       A member of the “SharePoint_Shell_Access” role on the configuration database (this is a SQL
        Role)
To simplify the management of these roles we have created a set of PowerShell commands (noun is
“SPShellAdmin”) to add and remove Shell Administrators. You’ll notice that the commands allow you
to designate a specific database, this is because the “Shell Admin” role by default only gives the user
access to the Configuration Database; the shell admin must be given access to each individual service
and content database they are “allowed to manipulate” (i.e.: to delete a content database, the user
must be a shell admin on that database).

         *IMPORTANT: The Shell Admin commands in SharePoint 2010 Beta do not fully setup these roles; you
need to add the WSS_ADMIN_WGP role manually.

Please keep in mind that each command is just running object model, so additional permissions may
be required for specific commands. For example, you may need Service Application permissions to
run commands against a certain service application.

Hopefully I’ve made permissions a little easier to understand—but if you’ve still got questions, put
them in the comments section below.

Thanks,
Zach
Script

# Script for å sjekke BIOS versjoner
# 14e
# Anskaffe hoved BIOS status
$Bios = Get-WmiObject -Class Win32_BIOS -namespace "root\CIMV2" -
computername $Computer

#Get the list of servers from a Text file
$computers = Get-Content ‚e:\scripts\computers.txt‛
Foreach ($computer in $computers)
{
$RemoteBios = Get-WmiObject -Class Win32_BIOS -namespace "root\CIMV2" -
computername $Computer
if ($RemoteBios -notlike $Bios) {
Write-Warning "The machine $computer does not have the proper BIOS version
for this firmware rollout"
}
}

# 14e
# Get the info on the hotfix
$hotfix = Read-host ‚Hvilken hotfix skal det sjekkes for?‛
#Get the list of servers from a Text file
$computers = Get-Content ‚e:\scripts\computers.txt‛
Foreach ($computer in $computers)
{
$check = get-hotfix –ComputerName $computer | sort-object –prop Source –
desc | where {$_.hotfixID –match $hotfix}
if ($check -notlike $hotfix) {
Out-File –FilePath \\14e-dc\scripts\hotfix.txt -Append -String "The machine
$computer lacks the update $hotfix"
}
}

Henter informasjon om HotFix’er fra en større mengde maskiner og sjekker om
de har den HotFixen som er spesifisert, hvis ikke lesest det ut til en
tekst fil.


# 14e
# Script for Innlesing av AD Brukere
# Må være koblet opp mot Exchange Serveren, og PS Session'en må være
importert for lokal tilgang til Exchange kommandoer
# ActiveDirectory Modulen må være kjørt for å få tilgang til AD Kommandoene
som brukes

#Brukes for å gi brukeren et tilfeldig passord til slutt.

$genericpass = ""
# Hente ut navnet til domenet
Get-ADDomain | Select-Object -Property DNSRoot > c:\scripts\domain.txt
$domain = Get-Content c:\scripts\domain.txt
$domain = $domain[3]

#Skaffe listen over brukere som skal opprettes
$users = Get-Content c:\scripts\users.txt
#For hver bruker i brukere skal scriptet kjøres, opprette en bruker med
#passord og email koblet til brukeren, og skrive ut all denne informasjonen
#til ei tekst fil for enkel administrasjon.

foreach ($user in $users){
$genericpass = Get-Random –minimum 1001 -maximum 10000
New-Mailbox -Name $user -DisplayName $user -UserPrincipalName $user +"@"+
$domain -Alias $user -Password $genericpass -ResetPasswordOnNextLogon
$true -OrganizationalUnit Users -RemotePowershellEnabled $false
Out-File -FilePatch \\14e-dc\users\userlist.txt -Append -InputObject "name:
" + $user + " Password: " $genericpass
New-MailMessage -To $user +"@"+ $domain -From "admin@" + $domain -
stmpserver 14e-exchange.14e-ad.local
}

# 14e
# Issue warning if % free disk space is less
$percentWarning = 15
# Get server list
$servers = Get-Content "C:\scripts\computers.txt"
$datetime = Get-Date -Format "yyyyMMddHHmmss"

foreach($server in $servers)
{
      # Get fixed drive info
      $disks = Get-WmiObject -ComputerName $server -Class Win32_LogicalDisk
-Filter "DriveType = 3"

     foreach($disk in $disks)
     {
       if ($disk.Size -ge 1)
     {
            $deviceID = $disk.DeviceID
            [float]$size = $disk.Size
            [float]$freespace = $disk.FreeSpace

           $percentFree = [Math]::Round(($freespace / $size) * 100, 2)
           $sizeGB = [Math]::Round($size / 1GB, 2)
           $freeSpaceGB = [Math]::Round($freespace / 1GB, 2)

            $colour = "Green";
            if($percentFree -lt $percentWarning)
            {
Send-Maillmessage -To admin@14e-ad.local -from teknisk@14e-ad.local -
Subject "$DeviceID on $server is low on space" -body "$server $deviceID
percentage free space = $percentFree"
                }

        }
}
}

I dette scriptet blir det utlistet lagringsplassen til alle maskinene som det er


“$Date = Get-Date
$file = "e:\logs\" + $date.day + "." + $date.month + "." + $date.year + " " + $date.hour + "." +
$date.minute + ".txt"
Start-Transcript $file | out-null”

Bruker dette i bruker profilen, for å automatisk logge hva som blir gjort i denne sessionen, brukeren
ser ikke noe respons når han logger på, så han er ikke klar over hva som skjer. Potensielt så er det
mulig å gjemme hvor den lagres på et nettverks drev gjennom New-PSDrive som bare kan sees
gjennom Powershell.
Små enkle Scripts


Legge til brukar med powershell frå ein csv-fil.
Kva er ei csv-fil, ei csv-fil er eit fil format csv står for comma sepperated value, det vil sei at
informajsonen i fila er skilt med komma tegn.

Eksempel på ein csv-fil.
Users.csv:
CN, userPrincipalName,displayname
Truls,Truls@døme.no,Truls Døme
Kari, Kari@døme.no, Kari Døme

Og slik kan dei innehalde mengder av bruker informasjon, i den første rada står informasjon om dei
elementa du vil legge til, til dømes telefon nr, etternavn, adresse osv.
Dei følgande radene innehelder ein og ein brukar.
Kvar kollone, startar med attributten i første rad, og radene under har informasjonen til den
brukaren sin attribut.

For og bruke ein slik fil kan du bruke scripts for og lese av og legge informasjonen ein plass du vil ha
den. Vi bruker csv-fila til og legge til brukere i AD, dette gjerast med følgande script:


Script for å legge inn brukarar frå .CSV-fil
#Lokasjon av domain controler, som med oss er 14e-dc.local
#med linje 2 følger lokasjon av kvar vi vil ha lagt inn brukeren
#linje 3 er kvar csv fila ligger.
$dc = "dc=14e-dc,dc=local"
$userContainer = [adsi] "LDAP://localhost:389/ou=Brukere,$dc"
$csvSti = "C:\Script\brukere.csv"

#Sjekker forbindelsen til AD.
if(-not $userContainer.Name)
{
Write-Error "Greide ikke koble til: $container"
return
}

#Leser inn passordet du oppgir. Dette passordet gjelder for alle brukere
$password = Read-Host "Skriv inn passord"

#Laster CSV
$bruker = @(Import-Csv $csvSti)
if($bruker.Count -eq 0)
{
return
}

#Går igjennom brukerne i CSVen
foreach($user in $bruker)
{
#Henter navnet
$brukernavn = $user.CN
Write-host "$brukernavn"
$passord = $user.password
$newUser = $userContainer.Create("User", "CN=$brukernavn")
$newUser.SetInfo()
$newUser.Put("sAMAccountName", "$brukernavn")
$newUser.SetInfo()
$newUser.psbase.Invoke("SetPassword", "$password")
$newUser.psbase.InvokeSet('AccountDisabled', $false)
$newUser.SetInfo()

#Henter de andre verdiene
foreach($property in $user.PsObject.Properties)
{
if($property.Name -eq "CN")
{
continue
}
if(-not $property.Value)
{
continue
}
#Write-Host "$property.Name"
#Write-Host "$property.Value"
$newUser.Put($property.Name, $property.Value)
}

#laster inn brukerene til AD.
$newUser.SetInfo()
}
Script for og lage ein OU

#Dette er gjort for at det skal sjå rydig ut når du skal legge til OUen.
Clear

#Ber brukaren skrive inn namnet på OUen som skal opprettast
#Her hentar Read-Host kommandoen det som blir skreve inn av brukaren
$StrOUName = Read-Host "Skriv inn namnet på OUen du vil opprette"
Clear

#Koblar til domenet
$objDomain = [ADSI]"LDAP://localhost:389/dc=14e-dc,dc=local"

#Lager OUen
#Her bruker du lagger vi varriablene objOU, og sei at den skal sette
#navnent til OU= strOUName(dette er navnet som blei skreven inn tidligare)
$objOU = $objDomain.Create("OrganizationalUnit", "ou=" + $StrOUName)
$objOU.SetInfo()

#Skriver til skjerm kva OU som har blitt oppretta
Write-Host $StrOUName + " har blitt oppretta"

Nå når vi har lært og lage enkel OU nå skal vi sjå på eit script som kan lage OU frå ei fil



Lage OU fra fil
#Setter kvar tekstfila med namna på OU ligg

#Dette scripte er nyttig I tillfelle noke skjer med ad, men du har lagret #OU på ein fil slik at det er
bberre og opprette.

#Dette er igjen eit enkelt script som visser korleis ting fungerer og kan #oppgraderest

$TextFile = GC -Path "C:\Scripts\nyOU.Txt"



#Løkke som henter ut info frå tekstfila

ForEach ($objItem in $TextFile){

$StrOUName = $objItem



#Kobler til domenet

$objDomain = [ADSI]"LDAP://localhost:389/dc=14e-dc,dc=local"



#Lager OU's
$objOU = $objDomain.Create("OrganizationalUnit", "ou=" + $StrOUName)

$objOU.setInfo()}



#Bekreftelse til skjerm

Write-Host "OUane har blitt oppretta"
Script som lager mange OU i trestruktur
# Script som oppretter noen nye OUer under PowershellTest

#Her har vi lagget noken OUer og gir dei navn som vi har forhandsvelgt og #hardkoda, du kan bytte ut
hardkodinga med delar av scriptet som står over.



#Finner frem til path hvor de nye avdelingene skal legges til, og gjer den #til ein varriabel, det vil sei
at $pstest vil representere heile strengen #som følger etter seg

$pstest = [adsi] "LDAP://localhost:389/ou=Brukere,dc=14e-dc,dc=local"



#Oppretter avdeling 1 med litt informasjon

#igjen lager vi ein varriabel for og gjere det enkelt

#det er før dette du må be om input for og gi OU navn visst det er ønskelig

#dette må riktignok kodest inn, og er ikkje i denne versjonen av scriptet

#som du kan sjå dukker pstest varriabelen opp under $avd1 og $avd2



$avd1 = $pstest.Create("OrganizationalUnit", "OU=Avdeling1")

$avd1.Put("Description", "Dette er testavdeling nummer 1 under PowershellTest")

$avd1.SetInfo()



#Oppretter avdeling 2 med litt informasjon

$avd2 = $pstest.Create("OrganizationalUnit", "OU=Avdeling2")

$avd2.Put("Description", "Dette er testavdeling nummer 2 under PowershellTest")

$avd2.SetInfo()



#Oppretter av 3 og 4.

#her skal vi lage nye under OUer til OUen avdeling1, vi gjennbruker $pstest #siden den ikkje skal
brukast meir vi kan då bruke det samme oppsette som #ved avdeling 1 og 2

$pstest = [adsi] "LDAP://localhost:389/OU=Avdeling1,ou=Brukere,dc=14e-dc,dc=local"
#Oppretter avdeling 3 med litt informasjon

$avd2 = $pstest.Create("OrganizationalUnit", "OU=Avdeling3")

$avd2.Put("Description", "Dette er testavdeling nummer 3 som er en underavdeling til avdeling 1")

$avd2.SetInfo()



#Oppretter avdeling 4 med litt informasjon

$avd2 = $pstest.Create("OrganizationalUnit", "OU=Avdeling4")

$avd2.Put("Description", "Dette er testavdeling nummer 4 som er en underavdeling til avdeling 1")

$avd2.SetInfo()



#Oppretter av 5 og 6.

#Her gjenbruker vi $pstest igjen og lager under OU til OUen avdeling2

$pstest = [adsi] "LDAP://localhost:389/OU=Avdeling2,ou=Brukere,dc=14e-dc,dc=local"



#Oppretter avdeling 5 med litt informasjon

$avd2 = $pstest.Create("OrganizationalUnit", "OU=Avdeling5")

$avd2.Put("Description", "Dette er testavdeling nummer 5 som er en underavdeling til avdeling 2")

$avd2.SetInfo()



#Oppretter avdeling 6 med litt informasjon

$avd2 = $pstest.Create("OrganizationalUnit", "OU=Avdeling6")

$avd2.Put("Description", "Dette er testavdeling nummer 6 som er en underavdeling til avdeling 2")

$avd2.SetInfo()



####Sjekker at avdelingene ble opprettet og alt stemmer.

#Dette er ein viktig del av testen for her får vi opplyst om OUane blei #oppretta korrekt
Write-Host -foregroundColor cyan "Informasjon om PowershellTest: "

$OU = [adsi] "LDAP://localhost:389/ou=Brukere,dc=14e-dc,dc=local"

$OU | select-object ou,description,children,path | format-list

Write-Host -foregroundColor yellow "Informasjon om Avdeling 1: "

$Avd1 = [adsi] "LDAP://localhost:389/ou=Avdeling1,ou=Brukere,dc=14e-dc,dc=local"

$Avd1 | select-object ou,description,children,path | format-list

Write-Host -foregroundColor green "Informasjon om Avdeling 2: "

$Avd2 = [adsi] "LDAP://localhost:389/ou=Avdeling2,ou=Brukere,dc=14e-dc,dc=local"

$Avd2 | select-object ou,description,children,path | format-list




Script for å slette OU
#Kode for å slette OU.
#Dette scriptet er veldig enkelt og sjølv forklarande, her er riktignok
#ouen hardkoda inn, og du må gjere små endringar visst du skal velge kva ou
#som skal slettast.
$ou = [adsi] "LDAP://ou=testOU,dc=14e-dc,dc=local"
$ou.psbase.deleteTree()




Script for å slette mange OU i ein trestruktur
#Script for å slette mange OU i ein trestruktur
#Her har vi ein meir avansert versjon av og slette OUar det scriptet
#sletter fleire ouar men er framleis hardkoda

#Skriv inn kva OU det er som skal slettast.
$avdeling1 = [adsi] "LDAP://localhost:389/ou=Dermizax,ou=Bergans,dc=14e-
dc,dc=local"
$avdeling1.psbase.deleteTree()




Script som lister ut informasjon om ein OU
#Kobler opp mot AD og legger objektet vi ønsker å bruke i en variabel
#Her har vi nok eit script som er relativt enkelt men er veldig nyttig,
#siden det vil la deg skrive ut informasjon om ein OU. Dette er veldig
#nyttig for driftere, igjen er pathen hardkodet.
$OU = [adsi] "[Path]ou=Brukere,dc=14e-dc,dc=local"

#Henter ut informasjon.
$OU | select-object | format-list

#For å liste all informasjon om PowershellTest objektet.
$OU1 = [adsi] "LDAP://localhost:389/ou=Brukere,dc=14e-dc,dc=local"
$OU1 | select-object | format-list *
#Liste ut informasjon om Avdeling 1:
$OU2 = [adsi] "LDAP://localhost:389/ou=Avdeling1,ou=Brukere,dc=14e-
dc,dc=local"
$OU2 | select-object whenCreated,name,description | format-list

Script som lister ut medlemmar i ei gruppe som blir gitt av brukaren
#Script for å liste ut medlemmar av ei gruppe som brukaren skriv inn
#Dette scriptet er veldig sjølvforklarande Read-Host kommandoane lar
#brukeren skrive inn det ønska gruppe namnet.

#Ber brukaren skrive inn namnet på gruppa
$gruppenamn = Read-Host "Skriv inn namnet på gruppa"

#KOMMENTAR, dette er kommandoen som skriver ut medlemmane i gruppa her ser
#vi og igjen variabelen som blei oppretta for og spør etter namnet på
#gruppa.
$group = [ADSI] "LDAP://cn=$gruppenamn,ou=Brukere,dc=14e-dc,dc=local"

foreach ($member in $group.member)
{
$member
}




Script som lister ut kva grupper ein brukar er medlem i
#Script som lister ut kva grupper ein bruker er medlem i
#Her har vi igjen eit script som listar ut informasjon, dette scriptet
#lister ut kva grupper ein brukar er medlem i, dette er veldig nyttig for
#ein administrator, dei kan då lett sjekke brukerar.

#Ber brukaren skrive inn namnet på brukaren ein vil ha utlista
#gruppemedlemskap for
$brukarNamn = Read-Host "Skriv inn namnet på brukaren"

$root=([adsi]"dc=14e-dc,dc=local").distinguishedName
$ou=[adsi]("LDAP://ou=Brukere,"+$root)

# Søker opp brukaren og finner ut kva grupper han/ho er medlem av
$user=$ou.psbase.children.find("cn=" + $brukarNamn)
$groups = $user.memberof
foreach($group in $groups)
{
$strGroup = $group.split(',')[0]
$strGroup = $strGroup.split('=')[1]
$strGroup
}


#Enkel funksjon som legger sammen to tall.
#Lager funksjonen
#Vi har no beveget oss inn på funksjoner, det er eit av aspekta med
#scription i powershell, ein funksjon kan være veldig nyttig visst noken
#linjer med koder dukker opp seinare, dette scriptete visser ein funksjon
#som legger saman to tall.
function Legg-Sammen {
param ($tall1, $tall2)
$sum = $tall1 + $tall2
Write-Host "$tall1 + $tall2 = $sum"
}
#Tester funksjonen¨
#Her testere vi funksjone i med og bruke funksjons navnet og gir den to
#verdiar.
legg-sammen 2 2

#Funksjon som finner størrelsen på ståande folder og regnar ut kor mykje
som er brukt i KB, MB og GB.
#Her setter du at det er in funksjon, dette scriptet skal gjere som
#forklart i teksta over, dette er igjen eit nyttig script for admin
function global:dirsize
{
#Lister alle filer og foldere -recurse sørger for at alle underkataloger
#også blir tatt med.
$size = (Get-ChildItem -recurse | Measure-Object -Sum Length).Sum
#Brukes til å lage en oversiktlig output
$t0 = "=" * 50
#Viser hvor du kjører kommandoen fra
$loc = Get-Location
#Sørger for at de forskjellige verdiene kommer i rett format.
$kb = $size / 1024
$mb = $kb / 1024
$gb = $mb / 1024
#Skriver output
Write-Host ""
Write-Host $t0
Write-Host "Location:" $loc
Write-Host $t0
"Kilobyte: {0:#.#}" -f $kb
"Megabyte: {0:#.#}" -f $mb
"Gigabyte: {0:#.#}" -f $gb
Write-Host $t0
}


Scritpt for å endre description av ein OU
# Her er eit veldig enkelt script igjen det er for og kunne endre på
#beskrivelsen av eit OU, her er riktig nok sjølve teksta hardkoda, men det
#skal ikkje mykje ekstra kode, for at den som kjører scriptet vil kunne
#endre det til kva dei vil.
$OU1 = [adsi] "LDAP://localhost:389/ou=Avdeling1,ou=Brukere,dc=14e-
dc,dc=local"
$OU1.Put("Description","Denne teksten ble nettopp forandret12..")
$OU1.Setinfo()

#Sjekke om teksten ble forandret.
$Sjekk = [adsi] "LDAP://localhost:389/ou=Avdeling1,ou=Brukere,dc=14e-
dc,dc=local"
$Sjekk | select-object ou,whenchanged,description | format-list
Script for å legge inn brukar
#Script for å opprette ein brukar i ei bestemt Avdeling

#Ber brukaren skrive inn brukarnamnet til den nye brukaren
$brukarnamn = Read-Host "Skriv inn brukarnamnet til den nye brukaren"

#Ber brukaren skrive inn e-posten til den nye brukaren
$epost = Read-Host "Skriv inn e-posten til $brukarnamn "

#Ber brukaren skrive inn displayname til den nye brukaren
$displayname = Read-Host "Skriv inn displayname til $brukarnamn "

#Ber brukaren skrive inn namnet på OUen der brukaren skal opprettast
$gruppenamn = Read-Host "Skriv inn namnet på gruppa der $brukarnamn skal
ligge"

#Du ser alt her at det er ein god del meir arbeid for admin og legge til
#enkelt vis bruker til nettverket, enn og bruke csv-fil.

#Opprette en bruker i den valgte OU’en.
$avdeling1 = [adsi] "LDAP://localhost:389/ou=$gruppenamn,dc=14e-
dc,dc=local"

#Legger til brukerinformasjon
$user = $avdeling1.Create("User", "CN=" + $brukarnamn)
$user.Put("userPrincipalName",$epost)
$user.Put("displayName",$displayname)
$user.Setinfo()
$user.psbase.InvokeSet('AccountDisabled', $false)
$user.Setinfo()
Write-Host "Informasjon om brukeren.."
$testbruker = [adsi]
"LDAP://localhost:389/cn=$brukarnamn,ou=$gruppenamn,dc=14e-dc,dc=local"
$testbruker | select-object cn,whenCreated,displayName,Userprincipalname |
format-list

#Dette er eit veldig vanlig script, og visser blant anna forskjellen mellom
å legge inn ein og ein bruker eller og legge til fleire med og bruke csv-
file.
Script for å lage ei gruppe i AD
#deklarerer gruppetypene. Om det skal vere ei anna type gruppe så må ein
bytte ut desse. Desse står under scriptet.
$ADS_GROUP_TYPE_UNIVERSAL_GROUP      = 0x00000008
$ADS_GROUP_TYPE_SECURITY_ENABLED     = 0x80000000

#Ber brukaren skrive inn namnet på gruppa som skal opprettast
#Her er det navnet på gruppa det er viktig og ikkje forvirre dette med
#gruppetypene siden dei alt er oppretta
$gruppenamn = Read-Host "Skriv inn namnet på gruppa du vil opprette"

#domene og OU informasjon
$objOU = [ADSI]"LDAP://localhost:389/ou=Brukere,dc=14e-dc,dc=local"

#lager gruppa
$objGroup = $objOU.Create("group", "CN=" + $gruppenamn)

#om det skal vere ei distribution group så er det berre å ta vekk -bor
$ADS_GROUP_TYPE_SECURITY_ENABLED
$objGroup.Put("groupType", $ADS_GROUP_TYPE_UNIVERSAL_GROUP -bor
$ADS_GROUP_TYPE_SECURITY_ENABLED )
$objGroup.Put("sAMAccountName", $gruppenamn )

$objGroup.SetInfo()



Dette må stå øverst i kvart script, alt etter som kva gruppe scriptet skal lage:
# Her står alle dei forskjellige gruppe typane skal det være ein
#distibution group er det berre og ikkje ta med security enabled.
$ADS_GROUP_TYPE_GLOBAL_GROUP         = 0x00000002
$ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP   = 0x00000004
$ADS_GROUP_TYPE_LOCAL_GROUP          = 0x00000004
$ADS_GROUP_TYPE_UNIVERSAL_GROUP      = 0x00000008
$ADS_GROUP_TYPE_SECURITY_ENABLED     = 0x80000000




Script for å legge ein brukar til i ei gruppe
#Dette scriptet er for og legge til ein brukar til ei gruppe det er eit
veldig nyttig script,
#Ber brukaren skrive inn namnet på gruppa som personen skal inn i
$gruppenamn = Read-Host "Skriv inn namnet på gruppa"

#Ber brukaren skrive inn namnet på brukaren som skal inn i gruppa
$brukarnamn = Read-Host "Skriv inn namnet på brukaren"

#angir gruppenamn, OU og domene
$Connection = "LDAP://localhost:389/CN=$gruppenamn,OU=Brukere,DC=14e-
dc,dc=local"
$Group = [adsi] $Connection

#angir brukarnamn, OU og domene
$User = "LDAP://localhost:389/CN=$brukarnamn,OU=Brukere,DC=14e-dc,dc=local"

#Legger brukaren til i gruppa
$Group.Add($User)
Script for å fjerne brukar frå gruppe
#Eit like viktig script som og kunne legge brukere til ein gruppe er evnen
#til og kune fjerne dei. Men scripta er nesten identiske i form og tekst,
#med dei få endringa som gjer at du slettar istaden for og legge til (add
#blir til Remove).
#Ber brukaren skrive inn namnet på gruppa som personen skal fjernast frå
$gruppenamn = Read-Host "Skriv inn namnet på gruppa"

#Ber brukaren skrive inn namnet på brukaren som skal fjernast frå gruppa
$brukarnamn = Read-Host "Skriv inn namnet på brukaren"

#angir gruppenamn, OU og domene
$Connection = "LDAP://localhost:389/CN=$gruppenamn,OU=Brukere,DC=14e-
dc,dc=local"
$Group = [adsi] $Connection

#angir brukarnamn, OU og domene
$User = "LDAP://localhost:389/CN=$brukarnamn,OU=Brukere,dc=14e-dc,dc=local"

#Fjerner brukaren frå gruppa
$Group.Remove($User)
Kildeliste

http://technet.microsoft.com/en-us/default.aspx

http://techrepublic.com.com/2415-22_11-190647.html

http://msexchangeteam.com/default.aspx

http://blogs.msdn.com/powershell/

http://blogs.technet.com/heyscriptingguy/default.aspx

http://www.codeplex.com/wikipage?ProjectName=PsObject&title=PSH%20Community%20Guide

http://www.computerperformance.co.uk/index.htm

http://www.bing.com/visualsearch?mkt=en-us&g=powershell_cmdlets#s=1&r=236

http://www.shillier.com/archive/2010/01/18/setting-up-powershell-ise-for-sharepoint-2010.aspx

http://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=56



På Grunn av at det er så lite kilde informasjon annet enn de offisielle help dokumentene når det
gjelder Windows Server 2008 R2, Exchange 2010 og Sharepoint 2010 grunnet beta-statusen dems ble
Tech-net hyppig brukt som hoved kilde for informasjon og hjelp, siden det vi fant fra google var
hovedsaklig ment for Powershell 1.0 og Server 2008.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:122
posted:8/29/2011
language:Swedish
pages:230