Monthly Archives: October 2015

QuickTip: Old Tracing Files and OCSLogger

I’ve run across this in a few implementations now. You go to run the OCSLogger on an older Lync server and there seems to be way too much data in there, old data in fact.  You can see in the below image, I ran the logger for literally 2 seconds, but somehow have 9 SIPStack files. This can happen when trace files refuse to be deleted or overwritten.

9sipstackfiles

The quick answer is to close your logger, find your tracing folder (often C:\Windows\Tracing) and move the old ETL files, or all the files in the directory somewhere else.

somanyfiles

You should now be able to start the logger fresh.

Move Your Lync/Skype Users Faster

Hypothesis and Assumption

The other night during an upgrade, I had to move 35,000 Lync users from one pool to another Skype for Business pool.  Because it was an upgrade, this wasn’t a simple Invoke-CSPoolFailover situation.  Running a Get-CSUser  | Move-CSUser command suggested the move time was going to be just short of 8 hours, well outside of our maintenance window and well into the morning where users would arrive and potentially notice.

I’ve long suspected that multi-threading the move would help, and I typically run the move across many servers out of hope and superstition, but I could never say for sure if it was real or my imagination that users seemed to move faster.  Since the back end is mirrored, all of these threads on all of these servers are really ultimately beating on the same back end server, was that the bottleneck?  This night was a good night to find out if it was faster for sure.

Testing

I have six servers in the new Skype for Business pool, breaking the users equally across all of these servers, running 4 threads per server I was able to complete all moves within 2 hours.  A HUGE 4x improvement.

I was still curious, was it because I split it across six servers, or was splitting it across multiple threads enough?  I set up a lab with a similar number of users and ran the moves there.   There were four groups of users with names starting with A, B, C, or D respectively.

Running the following command would take about 40 minutes in each direction:

Download Measure1.txt
1
measure-command {Get-CsUser -Filter {Registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com}

However splitting the command up on the same server into four threads sped the move time up so the moves completed on an average of 14 minutes total, nearly 3x faster.

Download Measure2.txt
1
2
3
4
measure-command {Get-CsUser -Filter {FirstName -like 'a*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com}
measure-command {Get-CsUser -Filter {FirstName -like 'b*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com}
measure-command {Get-CsUser -Filter {FirstName -like 'c*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com}
measure-command {Get-CsUser -Filter {FirstName -like 'd*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com}

Splitting the move across four servers didn’t seem to improve the performance much over the existing tests, though in fairness my lab is limited and runs on a single virtual host.  I’d love someone to test further with a real environment, and I will myself, but these large moves don’t happen every night so I’ll need some time before another very large test can occur.

Conclusion

  • Is it worth splitting user moves into multiple processes?  YES!
  • Is it worth splitting across multiple servers?  I strongly suspect so.
  • Is it worth trying to find the point of diminishing returns?  Probably not, we’re talking about hours of time and not days, every system is different so while it’s a fun exercise, it’s somewhat fruitless and therefore not published here.
  • Is it worth creating a script that can programmaticly divide the users to be moved into perfectly equal parts for each thread because you’re a PowerShell nerd?  Not likely, I fought this with myself… we’re again talking about hours of time here, not days.  That said, here’s a sample that splits it up by first name and opens threads in new PowerShell windows, just cut and paste a chunk into an Administrative Skype for Business Management Shell window and let it do the rest of the work for you.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'a*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'b*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'c*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'd*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'e*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'f*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'g*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'h*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'i*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'j*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'k*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'l*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'm*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'n*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'o*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'p*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'q*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'r*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 's*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 't*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'u*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'v*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'w*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'x*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'y*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"
start-process powershell -ArgumentList "Get-CsUser -Filter {FirstName -like 'z*' -and registrarpool -eq 'sourcepool.domain.com'}|move-csuser -target destpool.domain.com;pause"

And for fun, here’s an image of me running the measure-command with results in my own lab:

Capture

Reminder: Quarterly Skype for Business Users Groups

This is your quarterly reminder that the US Skype for Business (they’re re-branding!) Users Groups are coming up.

These are always fun and valuable, and a great place to network with your peers and make those relationships.  I’ll be there as well as many experts, there will be a deep dive into monitoring applications and an open forum so please feel free to ask any questions you may have.

Head over to skypeusersgroup.com and find your group on www.meetup.com.

  • October 20th – Chicago, IL
  • October 20th – Cincinnati, OH
  • October 20th – Philadelphia, PA
  • October 21st – Los Angeles, CA
  • October 27th – Nashville, TN
  • October 21st- Silicon Valley, CA
  • October 29th- Kansas City, MO
  • November 3rd- Detroit, MI
  • November 3rd- Boise, ID
  • November 4th- Milwaukee, WI
  • November 4th- Seattle, WA
  • November 5th- Portland, OR
  • November 9th- New York, NY
  • November 10th- Charlotte, NC
  • December 3rd- San Francisco, CA
  • December 3rd – Atlanta, GA
  • December 10th- Baltimore, MD

Skype for Business iOS is Available! Calm Down.

The Skype for Business iOS app was released this morning to much fanfare… I’m as excited as anyone, however I had to calm down a bit as I quickly realized some critical features that I used regularly with the Lync 2013 app using didn’t make it into the RTM version.  This is somewhat of an issue because the Skype version is an update that replaces the Lync 2013 version, there’s no going back and there’s no running them in parallel.

IOSad

Some of the most notable features missing are:

  • There is no option to set call forwarding settings.
  • There is no option to transfer a call.
  • You cannot view PowerPoint presentations unless within a desktop sharing session.
  • No group IMs.

These shortcomings are outlined here and will hopefully be addressed soon:  https://support.microsoft.com/en-us/kb/3102247

Futhermore, other issues have been spotted such as the client automatically adding a +1 (or +whatever your country code) and are mentioned here: https://support.microsoft.com/en-us/kb/3101663

I’ve personally been seeing miscellaneous crashes as well, though to be fair, many of my apps have been crashing since upgrading to iOS9, so I can’t say this is Skype related for certain.  Still, because of the official issues referred to in the article, I’ve been advising helpdesks to notify their users to hold off on the update if any of these features will cause a serious hindrance to their work.  If these features don’t affect you, it’s a pretty cool app and I’m excited to have it finally on my phone.

 

Awarded MVP for Skype for Business 2015

It’s October 1st, and I am honored to (once again) be awarded as a Microsoft MVP for Skype for Business for 2015.  Reflecting on the last year, the biggest benefit of the program really has been the opportunity to meet and chat directly with people involved in the product group as well as the close comradery of the MVP community.  One of the most surprising things is simply how vocal the MVPs are about product issues and improvements that are needed, it’s not all a Microsoft love-fest like you might have imagined.  You should know that the MVPs are in your corner, standing in front of Microsoft, unashamedly pushing and fighting for many of the ideas seen on lync.ideascale.com and skypefeedback.com.  🙂  It’s not so surprising when you consider we’ve dedicated ourselves to the solution, are vendors and implementors, and are extremely passionate about what we do.

Capture

Update: the award hit has been received and unboxed.  New pin, new card, new plaque, more stickers, and the glass disk to fit on the existing award.  If you want to see what the first award looks like, click here.

IMG_2788