Timeline

Deep Diving into Lync, part 1.5?

So I’ve decided that instead of spending a lot of time in part 2 dealing with the process of transitioning from Standard to Enterprise, I’d spend just a little time discussing the process.

It was ironic that an opportunity arose (through a post in the Microsoft Technet forum) to help another IT professional with the deployment in their organization. They had a Standard edition pilot and were transitioning to an Enterprise pool, but were running into problems being able to transition the SQL store. I wont give out any names or too many details, but it ended up being that they were trying to build a new Enterprise edition topology and not adding an Enterprises pool into their existing topology with the Standard edition pool. So make sure when you transition, use your existing topology!

I was able to recommend a great blog post by Tom Pacyk that helps in migrating the central management store to a new SQL server that is servicing your Enterprise pool. The one thing it is missing is that, if you are using SQL instances, that you use the -SqlInstanceName switch. So a fully working Powershell command would look like this:

Install-CsDatabase -CentralManagementDatabase -UseDefault
SQLPaths -SQLServerFQDN “sql2.test.domain.com” -SQLInstanceName “irdb01″

Finally the only other catch was that the account using to provision the new CsDatabase did not have the proper SQL permission. They failed with a message like this:

PS C:\Users\admin.user> Install-CsDatabase -CentralManagementDatabase -UseDefaultSqlPaths -SqlServerFqdn sql2.test.domain.com -SqlInstanceName “irdb

Installed SQL Server 2005 Backward Compatibility version is 8.05.2312
Connecting to SQL Server on sql2.test.domain.com\irdb01
SqlMajorVersion : 10
SqlMinorVersion : 50
SqlBuildNo : 2500
SQL version is acceptable: 10.50.2500.0
Default database data file path is G:\Program Files\Microsoft SQL Server\MSSQL1
_50.IRDB01\MSSQL\Data
Default database data file path is G:\Program Files\Microsoft SQL Server\MSSQL1
_50.IRDB01\MSSQL\Data
Default database log file path is G:\Program Files\Microsoft SQL Server\MSSQL10
50.IRDB01\MSSQL\Data
Unable to access data drive as represented by \\sql2.test.domain.com\G$\P
ogram Files\Microsoft SQL Server\MSSQL10_50.IRDB01\MSSQL\Data
—————
Exit code: ERROR_NO_DB_DRIVE_ACCESS (-42)
—————

Once the SQL admin gave the necessary rights, the databases were installed successfully and they were able to use the Move-CsMoveManagementStore command.

Once the servers were recreated in the existing topology and published, they were able to begin installing the server roles, deploying certificates, and moving users between pools. This fun we’ll dive into more in Part 2!

Deep Diving into Lync, Part 1

Happy 2012 to fellow techs out there! 2011 was a very productive year, and while learning tons more about Exchange 2010 and getting my Enterprise Messaging Admin certification, 2012 is already shaping up to be another great year. I’m working a contract as a messaging admin for a large global company, who made the transition from Exchange 2003 to 2010 in the fall and I’ve been brought in to help put Exchange 2003 to bed, help improve on Exchange 2010, and roll out Lync during my engagement for presence and IM.

Last year with the release of Lync in the early part of 2011 I had the opportunity to go as far as deploying it in an Enterprise Voice scenario at my previous employer, and looking back was able to pinpoint some of the issues with the deployment. So my goal this first quarter of 2012 was to build my own, fully working Lync deployment as close to the books as possible. From there, I’m going to use the experience to take the test for the MCITP on Lync.

During my engagement with my previous employer I began to use my home network to build a Standard Edition deployment as proof of concept. Due to my lack of multiple static IP addresses with my ISP, lack of resources on my Hyper-V server for the number of VMs I needed, and lack of knowledge with TMG for proper access externally for my reverse proxy, the project was put on hold. With AD in place, a certificate server (which I used for my SCCM Native Mode deployment), a front end server and edge server, I at least had a working environment to “wet my whistle”. I wanted another Enterprise Voice setup that would be “business ready”. So I began to transition away from a Standard Edition deployment in my home to a full Enterprise Edition deployment hosted at my datacenter.

To wrap up Part 1 of the deep diving into Lync, I give you, my topology!


Now, to help make a little more sense of it, starting with my HOME site:

  • OMEGA – The FSMO-holding domain controller and Enterprise Root CA for my domain.
  • GAMMA – Another domain controller, SCCM server, and subordinate CA that my domain generates SSL certificates against.
  • TANGO – Exchange 2010 SP2 server with all roles, primarily for UM.

You can also see WHISKEY (my Lync Standard Edition server) and ECHO (my Lync Edge server) are greyed out. These were decommissioned from the Lync organization.

Now, moving on to the datacenter:

  • OSCAR – The Forefront TMG reverse proxy.
  • FOXTROT – The Lync Enterprise Edition Front End server.
  • BRAVO – The domain controller for the datacenter running SQL 2008 R2 (for the Lync Central Management Store) and Lync file store.
  • CHARLIE – The Lync Edge server.

With all of these pieces, I have my fully working test environment!

For Part 2 of deep diving into Lync, I’m going to drill into the nuances of migrating from Standard to Enterprise Edition, as well as my one-legged reverse proxy. Then in Part 3, we’ll look at the Enterprise Voice deployment and Exchange UM plus what to look for there.

Can’t create/mount a new Exchange 2010 database in a multi domain environment

This morning I went to create a new database on Exchange 2010 server in a client’s new server environment, and when I did it failed to mount due to the following error.

Error:
Couldn’t mount the database that you specified. Specified database: EMAIL5DBTEST; Error code: An Active Manager operation failed. Error: The database action failed. Error: Operation failed with message: MapiExceptionNotFound: Unable to mount database. (hr=0x8004010f, ec=-2147221233)
. [Database: EMAIL5DBTEST, Server: EMAIL5.ad.domain.local].

I did a little more digging and found my answer. In my case, the production domain is a child (ad.domain.local) of the empty root domain (domain.local). The AD structure is flat, meaning all of the domains are in a single AD site to allow for continuity and AD replication, so the list of the domain controllers that Exchange 2010 sees are across the parent and root domain.

The easiest way to set Exchange to recognize the domain controller in the child domain is to hard set it inside of Powershell, and Microsoft KB 977960 gives us the quick Powershell on how to do this:

Set-ADServerSettings –PreferredServer core1.ad.domain.local

Not sure why Exchange likes to see the DCs in the root parent domain first over the ones in their own domain. Microsoft need to look into this!

Wielding the power of USMT in SCCM 2007 R2 without Hardlinks!

I’m working with a client to fully automate their Windows XP to Windows 7 upgrades using SCCM, and while the OSD piece is in place and new install of Windows 7 from custom image is working, the next challenge is grabbing their user state via USMT.

We’re trying to avoid the whole “hardlinking” piece and take a KISS (keep it simple, stupid!) mentality. There are a lot of good resources online that would no doubt allow us to set this up but I’m always of the camp that Microsoft designed these features to work properly out of the box, so why make things more complicated! Continue reading “Wielding the power of USMT in SCCM 2007 R2 without Hardlinks!” »

Missing Option 60 from DHCP Server

I have a client who has a single server that houses all of their network roles (DHCP, DNS, etc) and is going to start using WDS/MDT for imaging and deploying inside of their network, and after doing the prerequiste work:

  • Install Windows Deployment Services
  • Install WAIK
  • Install MDT 2010 Toolkit

The next option was to configure DHCP to allow PXE boot from the same machine. To do this, you need to configure DHCP option 60, which is necessary when the DHCP and WDS roles necessary for PXE run on the the same server. After some digging I came across Mark Wilson’s blog post that breaks this down very easily:

netsh
dhcp server
add optiondef 60 PXEClient STRING 0 comment=”Option added for PXE support”
set optionvalue 60 STRING PXEClient
exit

Optionally while you are in the netsh dhcp server screen you can issue the show optionvalue all command to view the settings of all standard DHCP options.

Restoring a deleted Exchange 2010 mailbox from PowerShell

In our hosted Exchange 2010 SP1 environment we have to administer the environment via PowerShell, versus using the traditional Exchange Management Console (EMC) – one of the lovely limitations of using /hosting mode. Surprisingly, after almost a year of being in production this one had never come up until just yesterday: a user had been deleted (via Exchange Control Panel, which you can still thankfully use for end-user management) and their mailbox still sat on the server thanks to deleted mailbox retention. But how would I approach recovery

Continue reading “Restoring a deleted Exchange 2010 mailbox from PowerShell” »

Woohoo – its official!

With some of the new found time and freedom I’ve found in my new job I was able to spend a week studying the 70-662 and 70-663 exams, and took the first last Friday and the last this Tuesday. We’ll, I was happy to wake up this morning and find this email:

So I rushed over to the Microsoft Learning site to view my transcript, and it was there:

Now it’s official – I’m an Enterprise Messaging Administrator on Exchange 2010!

Real-World use of Remote Desktop Services (RDS) Powershell to Automate Deployment

In the voice of Professor Farnsworth “Good news everybody”! I’ve finally left my old IT consulting job to finally go full time as cloud services manager with a good friend of mine at his company (shameless plus, however he does help keep the lights on for this site) after working with him on a project basis over the last 6 years.

One of the first things on my to-do list was automating the deployment of terminal server, otherwise knows as Remote Desktop Services now in Windows Server 2008 R2. The easy part of the task was building the VM in our VMWare cluster, performing the SYSPREP, and creating the template.

The objective is 4 fold:

  • Installing the licensing service and RDS services (plus performing a reboot).
  • Activating the licensing services and installing licenses
  • Customizing the session settings
  • Adding an AD group to the local RD Users group

Continue reading “Real-World use of Remote Desktop Services (RDS) Powershell to Automate Deployment” »

Hold Times & Dropped Calls in Lync

In a recent issue I had with a client’s “ITSP” (internet telephony service provider) and their Lync enterprise voice setup whenever a user (whether it was the receptionist who is a member of the main number response group, or an inbound call to a DID) after 30 seconds of being on hold the call would end (some people would consider this as being dropped, but read on…)

After scouring Microsoft forums I came across this post that answered it all, and the issue stems back to the days of OCS. Depending on how the carrier is setup to respond to RTCP packets, even with a caller being on hold it still counts down against the session timer. There are some features in the trunk configuration that are enabled/disabled by default that by “flopping” then from True to False fixes the issue. Continue reading “Hold Times & Dropped Calls in Lync” »

Resource Room Calendar Permissions in Exchange 2010

With our Company’s recent move to Exchange 2010, we decided to move away from a “resource calendar” setup on SharePoint to using the Room Resources in Exchange and scheduling our conference rooms against them instead. What I found out is that once the mailboxes were setup (and Exchange 2010 does a great job of automating this whole process without the need of additional PowerShell) when I went to add an event it would show the time as being blocked out but would not give any event details or let me open it without an error.

If I went to try and request the resource calendar to share itself with me, I would give an error saying that the network doesn’t support this type of request.

I tried to use the Add-MailboxFolderPermission command and add Default to the mailbox but I got the message “An existing permission entry was found for user: Default.”. What I needed to do was modify the existing permission for Default on the Calendar by the following:

Set-MailboxFolderPermission -Identity lrgconfroom@pts.local:\Calendar -User Default -AccessRights Reviewer

Once this was complete, I could have simply restarted Outlook for the permissions to take place but after waiting a few minutes I could see the event with no problem: