TechEd NZ: Windows Server 2012 PowerShell Crash Course

I was fortunate enough to be asked to present at TechEd NZ this year. I had a standing-room only room (Yay!), and a really good response from the crowd.

All the sessions that were recorded at TechEd NZ 2012 are now available.

And here’s my session:

Windows Server 2012 PowerShell Crash Course

Enjoy!

DHCP Resiliency in Windows Server 2012

I take pleasures in the little things in life. Reading a good book, going to see a cool act that nobody else cares about (Eli “Paperboy” Reed anyone?), so while there is lots and lots of really cool new stuff in Windows Server 2012 (Fibre Channel in Hyper-V, Virtual Networks, PowerShell improvements . . .and the list goes on) I want to have a look at one of the little things. Nothing too fancy or really big and noticeable, but something I think many people will find useful, and easy to implement: DHCP Scope Failover.

In the past, if an organization wanted to reduce their dependency on a single DHCP server, they needed to implement a DHCP Split Scope design or building Failover Clusters. It works–but in my experience, even with the Split Scope Wizard, it was a bit of a pain to design and implement. And with a split scope, the reality is that you’re just splitting your overall pool between multiple servers. If a server goes down, the part of the pool that it was responsible is unavailable/unresponsive. If the server stays down a long time, that can cause you problems and may require you to build a new server with a restored copy of the DHCP database from the original server.

Windows Server 2012 provides us with a much simpler, more elegant solution: DHCP Failover. At its simplest you need two Windows Server 2012 servers, configured with the DHCP Server role, as indicated in Figure 1.

Once you have two servers, choose one of them and create and configure a scope, just as you normally would. Configure the options you require, the lease expiry etc. Feel free to use whatever management tools you prefer for this. One thing to note: if you are planning on configuring a scope for failover, you will want to make sure the options are scope-based, not server-based (unless both DHCP servers are going have identical server options, but I like to keep my scopes self-contained). In Figure 2 you can see a private network scope with fairly common scope options configured.

Now that I’ve got a scope configured on one of my DHCP servers (JFIN-SRV), I can configure it for failover. You can configure failover for either a balanced workload approach (an active-active relationship between the two servers) or a hot-failover (active-passive). Using the DHCP Manager, either of these options is fairly straightforward to configure. In DHCP Manager connected to the DHCP server currently hosting the scope, right-click on the scope and choose Configure Failover…. The first screen confirms which scope or scopes you are configuring failover for. Choose accordingly and click Next. The next screen asks you to choose or add the partner server. If you already have a scope set up for failover, then that server should be available in the drop-down. If not, you will need to click on Add Server and then enter in the name of the other DHCP server. Once you have the failover server identified, click Next.

The “Create a new failover relationship” page is the most important page in the wizard. It is here that you get to configure the parameters of the relationship between the two DHCP servers. Choose a Relationship Name that makes sense for your ongoing management.

Figure 3: DHCP Failover Hot Standby

Figure 4: DHCP Failover Load Balance

Those of you with a keen eye will likely have noticed that there are two versions of this page. Figure 3,”Hot standby” is the Active-Passive approach, and Figure 4 shows “Load balance” the Active-Active. We’ll discuss the Maximum Client Lead Time and State Switchover Interval settings a little later. First though we need to go over the differences between the two modes. If you choose “Hot standby” then you need to choose whether the server you currently have the DHCP Manager connected to will be the Active or the Standby server. Additionally, you need configure what percentage of the scope will be reserved for the Standby server. You’ll notice that it defaults to only 5%. While this has the practical effect of reducing the number of addresses that can be leased, it’s a pretty small number.

If you choose “Load Balance”, then the two servers will share the workload in the percentages you choose. Both servers know about the entire scope (a bit different from the Hot standby mode) and use an internal algorithm based on the MAC address of the requestor to determine which server will handle the request and with what address. You change the percentages it changes the algorithm. It’s pretty hands off. To secure the failover messages between the servers, set a Shared Secret.

That leaves two settings that need to be configured. These settings control the speed with which full failover occurs. A scope (or servers) configured for DHCP Failover have three main states of being: Normal, Communication Interrupted and Partner Down.

Obviously, “Normal” is the mode you want to see most of the time. If a server loses communication with it’s partner, then the mode switches to “Communication Interrupted”. During this state you can manually trigger a failover to the remaining server if you know that the failed server is not coming up soon, and the remaining server will take over responsibility for the entire scope. The remaining server will wait for the Maximum Client Lead Time before taking control of the entire scope. If you want a remaining server automatically switch from “Communication Interrupted” to “Partner Down” (thus triggering the Maximum Client Lead Time interval) you can set the State Switchover Interval value to determine how long it will stay in “Communication Interrupted” before switching over.

You will want to consider the impact these two properties may have on the load balance or standby reservation percentages. Especially in a Hot standby scenario, if you set a long Maximum Client Lead Time and State Switchover Interval, then you might think about increasing the percentage held on the Standby to better service requests until full failover occurs. Having said that, you will want to have some idea how many IP addresses are normally refreshed within whatever timeframes you configure, and make sure that whatever percentages you set will support that.

Once you have finished on that page of the wizard, click Next and then click Finish to complete the configuration. When you are done, you can use the DHCP Manager to see that the scope now has a Status of “Active” and is configured for a failover relationship, as shown in Figure 6. You can do the failover management by right-clicking on the scope and choosing the appropriate replication options to move all active leases from one member of the partnership to another (perhaps for maintenance of one server), as well as an option to deconfigure failover.

Pretty easy to configure, easy to manage. Pleasure in the little things.

Glenn’s Daughters Birthday and the Bikie Child of Darth Vader meets the Baggage Handler on Brad’s flight

Ever wonder what happens when IT guys have a bit too much free time on their hands, and have been doing support work for too many days in a row?

No?

Doesn’t matter. I’m going to tell you anyway.

Actual transcript of a running chat:

James   ( ) 9:50  p.m.
Ouch. He tempted the live demo gods. They were not appeased.

Brad   ( ) 9:51  p.m.
i don’t think i ever did a demo that wasn’t live

Richard   ( ) 9:51  p.m.
Not enough chickens were sacrificed by the soudns of it

Brad   ( ) 9:51  p.m.
that’s not bragging – just indicative of how under-prepared i was

James   ( ) 9:52  p.m.
He obviously forgot to sacrifice the virgin hard drive

Glenn   ( ) 9:53  p.m.
I do all my demo’s live and then DemoMate them for presentation

James   ( ) 9:53  p.m.
I use Camtasia.  But always a good plan.

Brad   ( ) 9:53  p.m.
every bit of code my students saw was typed in front of them

James   ( ) 9:54  p.m.
Not even copy/paste?

Brad   ( ) 9:54  p.m.
i made mistakes
never copy paste
i typed it all

Glenn   ( ) 9:54  p.m.
yeah, usually I do them live but I always try and have a DemoMate backup
kind of the “heres one I made earlier” that works scenario

James   ( ) 9:54  p.m.
Absolutely.

Brad   ( ) 9:55  p.m.
i often thought i _should_ have those
never got around to it
and it probably wouldn’t have helped
i did different code every time i taught the course
even the same course

Glenn   ( ) 9:55  p.m.
because I have coded myself into some serious corners

James   ( ) 9:55  p.m.
When teaching I demo live.  When presenting I record.

Brad   ( ) 9:55  p.m.
i got code wrong and had to work it out

James   ( ) 9:56  p.m.
That’s good when teaching. Everyone can benefit

Glenn   ( ) 9:56  p.m.
so much so that sometimes I could not even remember what the demo was supposed to be when I got into the mess

Brad   ( ) 9:56  p.m.
took advantage of that to demonstrate methodology for troubleshooting

Glenn   ( ) 9:56  p.m.
you know how you get sidetracked sometimes and think, I will just add a grid and show then data access knowing that it will likely break things

Brad   ( ) 9:57  p.m.
to be honest
my live-typed, off-the-cuff demos were the less risky part
the main course i taught was without-defined-spec .net course
there were no written labs
i’d yabber for a bit
demo as i go
then set the class an outcome
and let them get to it
so by the end of lab 1 everyone was in a completely different space

Glenn   ( ) 9:58  p.m.
I do that then the actual course files no longer work because of the random demos

Brad   ( ) 9:58  p.m.
see but you’re using actual course files
it’s your hybrid approach that burns you
everything was off-the-cuff with this course

Glenn   ( ) 9:59  p.m.
yeah, unfortnately the good people at MSFT mostly insist

Brad   ( ) 9:59  p.m.
heck the course didn’t even specify c# or vb.net
so i was talking and demoing in both or either
and the class was split on the labs
indeed they do
the course _did_ have courseware
we just didn’t use it
it was two of the large folders full of modules from about 8 different courses
that qualified it as an ms course

Glenn   ( ) 10:00  p.m.
I a running a program here on the coast to teach kids to program and it gets very off the cuff because most 12 year olds have the coolest coding imaginations

Brad   ( ) 10:00  p.m.
without all the rules applying in quite the regular way
would love to teach 12 year olds
actually i probably code like a 12 year old
that might explain it

Glenn   ( ) 10:02  p.m.
it’s awesome, at the moment iit is just a pilot while we try and get funding but it is running in 2 schools and these kids are the next app developers and that amazing brain they have is just waiting to jump out and send man to other moons

James   ( ) 10:03  p.m.
That’s why your code is creative, inventive and effective.

Glenn   ( ) 10:03  p.m.
they will give anything a go and they pick it all up so quickly … well we have had a few train wrecks but for the most part it’s great

Brad   ( ) 10:03  p.m.
if there were no train wrecks we’d never have better trains

Glenn   ( ) 10:05  p.m.
it is based on Lynn Langit’s Teaching Kids Programming : http://teachingkidsprogramming.org/

Brad   ( ) 10:05  p.m.
i suspected as much
had planned to contact her about all that
got myself distracted

Glenn   ( ) 10:05  p.m.
I choe to use Visual Studio though as opposed to the lite version

Brad   ( ) 10:05  p.m.
(12 year old)

Glenn   ( ) 10:06  p.m.
we plan to start with 10 year olds but are currently working on baselines
before we get some other principals involved and then our mayor

Brad   ( ) 10:07  p.m.
very cool
if i can ever be of assistance, give me a yell

Glenn   ( ) 10:09  p.m.
I will – well to be honest we are hoping that council will like it and fund it along with a major sponsor and then I would like to believe, much like Lynns model, we train teachers and they deliver so fingers crossed
I have a little who turns 6 tomorrow and I want IT/Development to be an option when she turns 10 or 11

Brad   ( ) 10:11  p.m.
i’m torn on whether i’d want my kids on that path
probably depends how my hynesite day has been faring

James   ( ) 10:12  p.m.
🙂

Glenn   ( ) 10:12  p.m.
I just want mine to have the option

Brad   ( ) 10:13  p.m.
aye fair enough
perhaps i shouldn’t teach 12 year olds
“i could end up like him? oh crap…”

Glenn   ( ) 10:14  p.m.
when you are 12 there is no end up .. that is what is so groovy about them
everything is currently achievable and avoidable

James   ( ) 10:14  p.m.
kids could do worse than to end up like any of us . . . except maybe Kyle . . .

Glenn   ( ) 10:15  p.m.
they are only a couple of years from having their spirit broken

James   ( ) 10:15  p.m.
But I only say that because he’s not here to defend himself.

Glenn   ( ) 10:15  p.m.
so at least give them some skills to food on the table

Brad   ( ) 10:16  p.m.
i think i could affect a 12 year old’s future in that way
i did a .net roadshow many years ago
6 capitals back to back

James   ( ) 10:17  p.m.
way to rack up the airpoints!

Brad   ( ) 10:17  p.m.
a screw up in the logistics meant the trucks couldn’t bring the gear from venue to venue
the it pro side of things was being done by a local presenter in each state

James   ( ) 10:18  p.m.
uh oh . . .

Brad   ( ) 10:18  p.m.
i was doing all the dev sessions
(3 x 3.5 hour sessions each day)

Glenn   ( ) 10:18  p.m.
when I first did the presentation to the 10 – 13 year olds I had some awesome demos to insure that I would be able to put a couple of classes together

Brad   ( ) 10:18  p.m.
soooo
i had to travel with all the gear
no courier company would guarantee delivery by midday the following day

Glenn   ( ) 10:18  p.m.
afterwards I was like a rockstar, they wanted autographs and all that … i forgot they were 11

Brad   ( ) 10:18  p.m.
and we only had the one day for each site for set up

Glenn   ( ) 10:19  p.m.
sounds like a load of fun Brad

Brad   ( ) 10:19  p.m.
this story does tie back in
in case you were doubting it
so i was rocking up at each airport with 12 items of baggage apart from my own

Glenn   ( ) 10:19  p.m.
doubt you, you have held together TechEds and other major events

Brad   ( ) 10:20  p.m.
there was 75 laptops
tubs of cables
network switches
and so on
big crates with padlocks and so on
i think it was something like 220 kgs of luggage
and i’m wheeling it through regular check in

Richard   ( ) 10:21  p.m.
ouch – excess bagafe

Brad   ( ) 10:21  p.m.
on two trolleys
which i found at when i got to the first airport can be coordinated if you lock up their rear inside wheels

Glenn   ( ) 10:21  p.m.
I am surprised the plane was able to climb to cruising altitude

Brad   ( ) 10:22  p.m.
but it makes for wide cornering
as an aside, the first time i got to the counter (the staff had seen me coming and were all clearly trying to avoid me)
i was amazed that all it cost was $10 per item
she was apologising to me for the extra cost
i wasn’t worried at any amount as i knew i’d be billing it back
i was a bit disappointed i couldn’t bill the sods a fortune
i did learn at that airport though about per bag weight limits
in a crowded airport, i had to unlock everything and resort stuff to spread the weight

Richard   ( ) 10:23  p.m.
30 kg?

Brad   ( ) 10:24  p.m.
nothing like advertising to the world that i was worth mugging on the other end of the red-eye
yes yes, i have $200k+ worth of computer gear and i’m travelling solo
anyways, i arrive back in sydney from perth
standing around waiting for luggage at the carousel
nearby there is a dad with two sons
perhaps 6 or 7 and maybe 4 or 5
the dad is busy talking to someone else
the kids aren’t paying any attention
my first crate comes out
i grab it
second, i stack it
third, i stack it
eldest boy is starting to pay attention now
fourth, fifth
at this point the eldest boy is pestering his dad
his dad isn’t listening
couple more
boy is yanking on dad’s arm
still ignored
one or two more crates and the young fella comes up to me with his younger brother in tow
“excuse me mister”
“yes mate”
“what work do you do?”
“i’m a programmer, i work with computers”
“ooohhhhhh”
nods sagely and wanders back to his dad
yanking on arm continues
insistent “dad! dad!”
eventually “yes mate, what is it?”
“daddy, when i grow up, i do NOT want to be a programmer”

Glenn   ( ) 10:28  p.m.
chuckle ..

Richard   ( ) 10:28  p.m.
nice

James   ( ) 10:28  p.m.
rofl

Glenn   ( ) 10:28  p.m.
instead he will drive trucks and wish he was a programmer

Brad   ( ) 10:29  p.m.
i always wondered whether ironically he’d end up as a baggage guy at the airport

Glenn   ( ) 10:29  p.m.
avoiding you luggage

Brad   ( ) 10:29  p.m.
that’s a lot longer story when i have to type

Glenn   ( ) 10:29  p.m.
but still a good one
you know how my girl turns six tomorrow

Brad   ( ) 10:30  p.m.
indeed

Glenn   ( ) 10:30  p.m.
well we have hired out one of those Jumping Castle places and because we get a room she can only invite 15 people

James   ( ) 10:31  p.m.
I’m guessing it will happen by her going to sleep tonight, and getting up tomorrow.  That’s how I think it will happen.

Glenn   ( ) 10:31  p.m.
so today I take her to school and all the kids come up to me to say thanks for the invite … now I am talking about 30 of them
so I ask one that I know is not invited for his invite

James   ( ) 10:32  p.m.
Sorry, they call Mr. Literal.

Glenn   ( ) 10:32  p.m.
and it turns out that because she can only invite 15 she has issued invites for next years party as well

Richard   ( ) 10:32  p.m.
love igt

James   ( ) 10:32  p.m.
She’s very considerate.

Glenn   ( ) 10:32  p.m.
she has dated them and everything so they know they cannot come this year but are a sure thing for next year

James   ( ) 10:33  p.m.
time to get a bigger bouncy castle.

Richard   ( ) 10:33  p.m.
I would be very afraid, Glenn.

Brad   ( ) 10:33  p.m.
i glanced away between a couple of those lines glenn

James   ( ) 10:33  p.m.
His daughter hasn’t scheduled his “afraid time” yet.
She’ll let him know when that is.

Brad   ( ) 10:33  p.m.
and i thought the justification for invited 30 rather than 15 was because “she has dated them”

Glenn   ( ) 10:33  p.m.
I am very concerned and may need the bikie guy who lives down the road on the door

Brad   ( ) 10:34  p.m.
bikie guys don’t scare little kids anywhere near enough

James   ( ) 10:35  p.m.
Little kids usually go “Cool. He looks funny.” or “Cool. Can I ride your shiny motorcycle?”

Glenn   ( ) 10:35  p.m.
yeah I know, it is a weird one because he is by his own confession an old fashioned bikie and although he looks scary is the nicest guy
and the kids love him
you know the balding, pony tail, thick mustache old fashioned tattooed monster that you want to laugh at but fear for your life

Brad   ( ) 10:37  p.m.
yeah i know the type
riss and cass drove up into the mountains a couple of years back
riss pulled in at some place (cafe she said but i am in doubt)
and found herself in a small place with a number of exactly these types
riss was petrified
the couple of non-biker types in there were looking equally nervous
reserved little cass at 3 yo, who didn’t really willingly talk to anyone but us, went over to go and flirt with one of them

Glenn   ( ) 10:39  p.m.
it’s freaky how kids love them
thats how we know our bikie, kids went to say Hello

Brad   ( ) 10:40  p.m.
instead of hiring clowns for kids parties you would honestly do better hiring a biker
entertainment
crowd control

Glenn   ( ) 10:42  p.m.
agreed, although they have a very bad wrap here on the coast so we are quite wary but our neighbour is a good one
that’s rap
I think I have a dyslexic finger

Brad   ( ) 10:43  p.m.
have to be wary of starting a biker war because one biker is encroaching on the kids’ party territory of the others

Glenn   ( ) 10:43  p.m.
since I broke my wrist I have a finger that types at a different pace to the others

Kyle   ( ) 10:44  p.m.
wow – that is the weirdest conversation to join in lync ever.

Brad   ( ) 10:44  p.m.
which is saying something for an event conversation

Glenn   ( ) 10:45  p.m.
kids versus bikies and the dyslexic finger … the sequel

Glenn   ( ) 10:47  p.m.
Anyone enjoy Bill Bailey … http://www.youtube.com/watch?v=0vVVPSowWNc

Richard   ( ) 10:48  p.m.
My favourite of his : http://www.youtube.com/watch?v=98xNx87hRbU

James   ( ) 10:50  p.m.
Welcome back Kyle. Updates all sorted?

Glenn   ( ) 10:53  p.m.
Gents, I am going into the SDM, even though I don’t know what it is … this is the adventurer in me
climb Everest or attend SDM Essentials … I am so torn

Kyle   ( ) 10:55  p.m.
James
yep
had one that kept failing
which then meant that Direct Access woudl not work
Brad   ( ) 10:55  p.m.
it’s a bit late at night to start an everest climb
Glenn   ( ) 10:55  p.m.
if you know what you are doing!
Kyle   ( ) 10:56  p.m.
have had a look and cant see where there is any issues internally with Lync – I know I saw it somewhere
Glenn   ( ) 10:56  p.m.
but in the case of someone without a clue this is the perfect time of day to do it
Kyle   ( ) 10:56  p.m.
but buggered if I can recall where..
Brad   ( ) 10:56  p.m.
if you know what you’re doing climbing everest then it isn’t such a big adventure anymore
Glenn   ( ) 10:56  p.m.
all the hard bits are hidden by the blackness
as is the top
I plan to follow the path of voices of failed climbers
James   ( ) 10:58  p.m.
Thanks for having a look Kyle.  It’s just that there’s weird, inconsistent stuff happening in the Lync labs that are doing integration with the beta Lync Online.
Brad   ( ) 10:58  p.m.
i’m faaaaaaaallllllllliiiiiiiiiinnnnnnnnngggggggg
not a good voice to follow

Glenn   ( ) 10:58  p.m.
James, Kyle .. are you guys really trying to have a real conversation about work

Kyle   ( ) 10:58  p.m.
nah
just making it look like it

Glenn   ( ) 10:59  p.m.
that’s the voice to avoid, so many vowels in a row   – avoid, it’s in the manual

James   ( ) 10:59  p.m.
not for much longer.  It’s 11pm here and I’m teaching tomorrow.  I need to get to sleep.  And I need to write a new blog entry for this week.  Any suggestions for topic?
nzmct.wordpress.com

Brad   ( ) 10:59  p.m.
IT Professions and Baggage Carousels

Glenn   ( ) 10:59  p.m.
Climbing Everest at night …  great topic

Kyle   ( ) 10:59  p.m.
Hey Brad – it will be over now due to DST but have a look at Two greedy italians on SBS next week on Thrusday night

Glenn   ( ) 10:59  p.m.
Kids and bikies

Richard   ( ) 11:00  p.m.
TypeScript and Coming JavaScript Onslaught?

Brad   ( ) 11:00  p.m.
i can’t believe you haven’t got enough material from this chat for a blog post
okay
remind me

James   ( ) 11:01  p.m.
Maybe I’ll just copy and paste the whole thing and let that stand . . .

Brad   ( ) 11:01  p.m.
i think that would be perfect

Glenn   ( ) 11:01  p.m.
well we had the Bad Lip reading this morning … surely there s  blog post there
and this evening will take care of all the posts for the rest of the year

Thoughts on Exchange 2013 Preview Install on Windows 2012 RC

I know, I know, I know–the RTM bits for WS2012 are available now.  But I already had a RC environment spun up and available to me. Disclaimer: This isn’t going to be a big technical blog outlining the steps to take when doing an install. There is a bit of technical detail and reference at the end, in the TechStuff section. Think of it more of a running diary of my experience getting this in. Having said that, lets go!

First thoughts:

Downloaded/extracted/mounted the install code into my VM. Found setup.exe and ran it.  Just wanted to see what would happen.  First few screens were the normal stuff: Licensing, Error reporting etc. One thing I noticed that made me go “Oh, that’s kind of nice” was when it prompted to look for Exchange updates before diving into the install.  Not an earth-shattering turn of events, but a nice touch.

The first important task (IMHO): PreRequisite Check.  Noticed that the only role options were for the CAS and Mailbox role. No Hub Transport, no UM. I hadn’t looked at any of the technical documentation yet, so this raised an eyebrow. It took me all of about 2 minutes to learn about the new architecture (http://technet.microsoft.com/en-us/library/jj150540(v=exchg.150).aspx#BKMK_Arch).

Since I hadn’t done any AD preparation, I got prompted for the Exchange Organization name, followed by a choice on turning Anti-Malware on/off. Setup said it needed internet access to update Anti-Malware, and since I don’t have that on these VMs, I chose no.  I’ll get some access and turn it on later.

Prompted for CAS external name settings.  I’ll configure those later.

Customer Experience Improvement Program. No.

Finally, actually did an actual prerequisite check. It had the option to let setup install any required Windows Features.  Finally. Not sure why this wasn’t included in Exchange 2010 setup. I said yes. If you’d rather have all these enabled prior to running setup, I’ve put the PowerShell cmdlets  to install all the features in the TechStuff section.

Still had some prereq problems, but it had to do with patches/updates that aren’t Windows Features, things like the Office 2010 Filter Pack SP1.  The download urls were provided, so it was pretty painless to deal with these and forge ahead.

One pain point here though. After downloading and installing everything that it had indicated, when I reran the PreReq Check, I got an error stating that Exchange Server 2013 Preview isn’t compatible with Microsoft Visual C++ 11 Beta Redistributable. I had to now uninstall it and rerun the PreReq check. Not hard, just annoying.

***UPDATE: The setup GUI did not install the “Windows Identity Foundation 3.5” Windows feature. This is required for the Exchange Control Panel (ECP) to work properly.  Even though it said it was going to install all required Windows Features, apparently it didn’t.  Watch out for this!

Once past that, it went to the actual install itself.  My only complaint is that the setup progress screen is bereft of much information. I’d like to see more information than “Step 4 of 15” and a percentage.  I’d like to know what each step was doing, at least in a big-picture kind of way.

Unfortunately, at step 8 out of 15, my laptop crashed, taking the VMs with it.  When I recovered and fired up the Exchange 2013 VM and reran setup it had detected that a previous instance of setup didn’t finish and prompted me to attempt to complete. I thought “let’s see how well this works”. In two words: It didn’t. I let it sit for about an hour, and it never made any progress one way or the other.  I cancelled out of the setup and tried to remove the installation manually.

First, I went to the Programs and Features control panel and uninstalled Exchange 2013 preview. That worked. So far so good.  I reran setup, but this time I got errors about Global Updates and permissions. A little digging made me realize that it wasn’t a clean uninstall.  I had to manually delete the “C:\Program Files\Microsoft\Exchange Server” directory and the “Microsoft System Objects” container in ADUC.

I took this opportunity to have a look at the command-line parameters for the Exchange 2013 setup.  A brief look at the inline help didn’t reveal anything overly exciting, so I had a check of the Prepare Topology help (setup.exe /help:PrepareTopology).

I ran the following:

Setup.exe /PrepareSchema /IAcceptExchangeServerLicensingTerms

Setup.exe /PrepareAD /OrganizationName: “NZMCT Org” /IAcceptExchangeServerLicensingTerms

Setup.exe /PrepareDomain /IAcceptExchangeServerLicensingTerms

Anyone else see the switch that I don’t like?  Especially since this isn’t a PowerShell cmdlet so there’s no AutoComplete. Arrrggghhhhhhh.

Once my topology was prepared I reran the setup GUI, and all went more or less according to plan.   I think had I not had a laptop crash, this would have been a straightforward install process.  Others have told me they had no problems.  I’ll take their word for it. 🙂

So What Now?

Now that I’ve got an environment I’m go to start having a play.  There’s the obvious differences in architecture and management (Say goodbye to the Exchange Management Console. PowerShell and ECP are your friends), but I’m sure there’s all kinds of good stuff in there, and I’m looking forward to figuring it all out.

TechStuff

import-module servermanager
 add-windowsfeature telnet-client,RSAT-ADDS,net-framework-45-core,windows-identity-foundation,Web-Static-Content,Web-Default-Doc,Web-Http-Errors,web-asp-net,web-asp-net45,Web-Net-Ext,Web-ISAPI-Ext,web-isapi-filter,Web-Http-Logging,Web-Log-Libraries,Web-Http-Tracing,Web-Windows-Auth,Web-Filtering,Web-Stat-Compression,Web-Dyn-Compression,Web-Mgmt-Console,Web-Scripting-Tools,Web-Client-Auth,server-media-foundation,MSMQ-Server,MSMQ-Directory