Notes from the Microsoft Management Summit 2013
This was another great year at the Microsoft Management Summit (MMS) in Las Vegas. While there were not an major product launches, much focus was given on the enhancements with SP1 for System Center. This news isn’t new since SP1 has officially been out since January but while there has been a lot of discussion about the features, seeing how Microsoft sees them in action and their alignment with the cloud mindset was beneficial. In the ConfigMgr space, there were numerous enhancements that were made with SP1 but my favorite is the hierarchal changes and the expansion of non-windows and non-PC device support.
Down to one
One great feature of the SP1 enhancements for ConfigMgr were the changes made to the architecture permitting a much flatter hierarchy. A very compelling argument was made as to why a CAS is not needed and that a single Primary site is all you need (unless you have over 100K clients or a solid reason to have multiples). Again and again it was stated from MS product team as well as MVPs managing huge deployments that you don’t need the CAS in the design and that a single Primary site server should be good for almost all but the largest deployments. This is backed up by the fact that the design changes in SP1 enable you to add a CAS server at any time later (thank goodness) and that the total number of clients supported at a single primary is 100,000. This is a huge shift for many of us, who based on the RTM specs, had installed CAS servers in solutions just in case a customer would want to expand their hierarchy later.
What was also discussed was the impact of having a CAS that doesn’t do anything, as in the solutions we described above. This impact was defined as the “replication tax” and basically described that since all primary servers in a hierarchy are equal, any change made at one server has to replicate to all the other servers and then up the hierarchy. When all your clients are reporting to a single primary with a CAS, that means that to see changes made at a Primary, you have to wait for it to replicate to see it at the CAS, for no real benefit. Since Primaries can’t be used to separate rights or access, the argument to have multiple primaries and a CAS really become difficult to support.
To example this effect, the product team was performing some “bathtub” testing against a design managing 400,000 clients during a normal Patch Tuesday rollout. With the minimal 4 Primary Site Servers they found it took around 14 hours to process all the backlogs. You would think throwing more servers at the solution would speed things up, however increasing the number of Primaries to 10 increased the backlog to 26 hours! In both scenarios the CAS was running at 100% utilization trying to keep up with the replication needs. This is huge, so make sure you are understanding this when you are designing your solution. If you have multiple Primary Servers now and have under 100,000 clients, I would strongly suggest you review your design and adjust accordingly.
Intune and ConfigMgr – Better together
Another great feature in ConfigMgr SP1 is the expanded support for deploying applications across numerous platforms and devices. Native support for IOS 10.6+, Linux, and Android means that you can have an agent, manage devices, and deploy software all from the same console. The user experience across all devices are similar and can even deeplink into the platform’s store to a specific public software install (App Store, Microsoft Store, Google Play). You can even use SCEP 2012 on your Apple systems.
While using ConfigMgr natively is great to manage on-prem devices, Microsoft expects you to manage cloud devices (mobile devices, disconnected pc’s, windows RT) from the cloud. Sounds obvious, and why not, since that is the easiest way to ensure an internet connected device can be managed without the work of making your management solution public facing. Microsoft has been working hard on their unified device management initiative, and with the latest version of Intune, creates a connection between your ConfigMgr SP1 solution and your Intune subscription service. Now there are ways you can empower users to be able to enroll their own devices and allow you to inventory, manage, deploy applications, and wipe those devices. All while having a single toolset to manage and a consistent experience for the end-user for application delivery. Let’s face it, keeping things simple and having a happy user makes a productive user and a happy you. There is so much to tell about this that I just can’t write it all but if you want more details feel free to reach out to me and I can help you dig in deeper.
As always, the sessions were great, the food was plentiful, the vendor parties were fun, and the socializing with other IT folks that wrestle with the same things I do was priceless. If you didn’t get a chance to go or was able to but missed some sessions in lieu of other ones, Microsoft has the recorded sessions along with slide decks available for download at http://channel9.msdn.com/Events/MMS/2013.
Now the only question (beside the obvious one about upgrading to SP1) is whether I will see you at next year’s MMS. However, the decision as to whether Microsoft will have another is still up in the air. We can leave that for another post though
Jason Condo
Principal Consultant
Using PerfView to Diagnose a .NET Memory Leak
I recently worked with a customer that was experiencing a memory leak with custom code running in Outlook. They were having trouble isolating the source of the leak, and they called us to help. There are several ways to dig into the process and profile the memory, but each have their own challenges and require some amount of supposition and guesswork.
When looking into these types of memory leaks, I have used a variety of tools over the course of my career, including DebugDiag, VMMap, and WinDBG with SOS. However, in investigating this particular leak, I came across a relatively new tool created by the .NET Performance Testing team called PerfView. This tool proved to be much easier to use in this situation, and it did not require multiple, cryptic steps, such as capturing multiple memory dumps and comparing the .NET object counts from one dump to the next. Instead, PerfView was able to capture multiple snapshots of the heap, compare those snapshots, and provide a listing of what was different between them.
To provide you with an idea of how simple this tool can be to help you find leaks, I created a simple application that contains a supposed “leak”. In reality, a ‘leak’ in a garbage collected runtime, like .NET, is typically just an object that is still being referenced and therefore cannot be removed from memory. It is not really a leak in the traditional sense, but it still is causing memory use to grow inside the process.
Knowing that my sample app has a leak, we can use PerfView to attempt to locate the source. The application has a simple WPF user interface which reports the size of the process. Over time, the process grows, but it gives no indication why. Below is a screen shot of the application:
To dig into this process, I used PerfView to inspect the heap. Below are the steps I took:
From the PerfView UI, choose “Take Heap Snapshot,” located on the Memory menu.
And choose the process you want to capture:
Click the “Dump GC Heap” button or simply double click on the process name.
When complete, PerfView will display the largest objects, sorted by the largest contributors.
As you can see, my sample application has an ArrayList as its largest contributor to the memory. That does not, however, necessarily mean that this object is the source of any leak. The largest object in an application may be a business object or some other component that exists to support the application’s functionality. In order to find the source of a leak, multiple snapshots must be captured and compared over time.
To capture another snapshot, simply return to PerfView’s main window and choose “Take Heap Snapshot” again from the Memory menu. Leave the current snapshot open so that you will be able to use it as a baseline when comparing it to the next snapshot. After capturing the second snapshot, you should have a second “Stacks” window open which looks similar to the first. To compare this snapshot with the first, locate and open the “Diff” menu. The first item in the list (assuming you did not close it) should be your original snapshot. (If the original snapshot was closed, you can reopen it from the main PerfView window.) Select the baseline snapshot and allow PerfView to compare the two.
After the Diff is created, you will see a screen that looks similar to the Stacks screens that displayed each snapshot.
In a Diff view, the columns to the right of the object types indicate the percentage and raw value differences between the two snapshots. In the case above, notice that the “Totals Metric” value in the header section of the window, near the upper left corner, shows that the total size difference between the two snapshots is about 3.4 MB. In the main section of that same window, we can see that there is/are ArrayList object(s) that have contributed about 99.8% to that difference, or about 3.4MB. If we double-click on the ArrayList line, we can see what objects use that particular type and how much each of those referring objects are contributing to the increase.
From this screen shot, we can see that an object called MyLittleLeaker.Leaker.a makes up the largest difference in memory between the two snapshots. This object is indeed the source of my leak.
As you can see from the contrived example above, PerfView can help provide insight into what is changing over time inside your application, and it can be much less cumbersome than capturing and interpreting memory dumps with commands that are hard to remember.
The Microsoft .NET Performance team has created a series of videos, which are posted on Channel 9, on how to use PerfView in several scenarios, including live profiling and investigating high CPU scenarios. Take a look at the Channel9 PerfView Tutorial to learn more.
Links:
- Download PerfView
- Publication of the PerfView performance analysis tool!
- Next Version of PerfView has been released!
- Channel9 PerfView Tutorial
Rich Deken
Principal Consultant
Responsive Design Made Easy
The Problem
As any designer not living under a rock the last year can tell you “responsive design” is the latest buzz word to take the industry by storm. While I believe that responsive design is a great and necessary thing, the problem pops up when a front end developer (that’s me) needs to incorporate this new technology into his current work flow. How can we take advantage of various screen sizes without devoting too much time and resources to study and trial-by-error?
The Solution
In an effort to become well versed in responsive design the Digital Brand Experience Team experimented with following three solutions:
1. A free software download that allows the user to set template parameters using an online tool and then exports out HTML/CSS that can be modified and tweaked in your favorite HTML editor.
2. Use a paid software from an industry giant that closely mimics existing design software that designers use day in and day out.
3. Writing the code from scratch using online guides and templates to get a base level of knowledge to hopefully expedite the learning/implementation process.
So, with that being said, today we are going to discuss option two. Since the Digital Brand Experience Team currently uses Adobe software through the Creative Cloud we were all curious/excited to give Adobes new preview software, Adobe Edge Reflow, a try.
Adobe Edge Reflow performs like 99% of the other Adobe products and is very easy to pick up if you have used Fireworks, Illustrator or InDesign for any length of time. I will give a brief overview on how the software works – if there is interest in going into more depth in a future blog post, let us know in the comments.
Edge Reflow is set up with your main canvas and a single toolbar to the left. All of our actions/settings can be controlled from this minimal view. There are four features that I would like to point out:
1. Four main selectors that allow you to select objects, create shapes, text, and graphics.
2. When one of these tools is selected the panel below changes to reflect different options and settings.
3. Canvas with a column grid and gutter width set to your liking.
4. The “plus” button is what allows you to set different break points for when your design will re-factor based on different screen sizes.
Since we all have a basic understanding of design software and how Adobe products behave, lets jump to a mock up already laid out in Edge Reflow.
As you can see I laid out a very basic grid structure just for the sake of argument. Now for the fun part and where I think that Edge Reflow really shines. Easily manipulating the content on a smaller screen.
So, first, we are going to click the “plus” button in the top right corner (to set our break point). Once the button is pressed the entire bar lights up and you can drag the arrow to the width that you need. We are going to set ours to 320px for the iPhone.
Now from the screenshot above you can see that this caused my layout to get a little squirrely. No need to freak out, adjusting this layout is as simple as setting up the the initial layout. You just need to resize and reorganize.
So, to fix this layout we are going to do a few things:
1. Change our column structure from 6 down to 1.
2. Reduce the top/bottom margin around the logo since we have less area to work with on mobile.
3. Reorient our main navigation and make the button size larger to account for tapping.
4. Reduce the size of our main banner graphic.
5. Adjust the body copy and right hand rail.
I wish you could have seen that in real-time, as it only took me 10-15 minutes to re-organize that layout.
Now that we have this done, how do we get the HTML/CSS exported so we can upload it to its final destination? Ah, you have found the main weak spot of Edge Reflow. I cannot figure out a way to export the code – which to me is a major stumbling block. The best I can figure is that under “view > preview in chrome” you can see the page in the browser. At that point you can view source and cut & paste the code out of the browser and into the HTML editor of your choice.
The Verdict
Edge Reflow is a very powerful tool that is very easy to pick up for any designer with a working knowledge of other Adobe products. You do not need any HTML/CSS experience and can do the entire layout through the visual interface. It is a great product for front end developers that are just getting their feet wet in the responsive design arena.
That being said I do have a few cons to point out:
1. Exporting HTML: Adobe really needs to come up with an “Export to Dreamweaver” feature. To me this is a no brainer and should have been included even in the preview release.
2. Editing someone else’s code: For me, it is not time efficient to make edits to someone else’s code. I always have problems finding a specific style or the main site structure is not laid out the way I would do it.
Final Thoughts: I am going to reserve this tool for quick prototyping when I need to show a rough responsive design to a client. Using this tool I can get the work done in an afternoon and be able to show the client a visual of what their site will look like on both a desktop and mobile screen. Today, I do not feel comfortable writing final website code with Edge Reflow—I will reserve that for writing the code from scratch.
Ben Vance
Senior Web Designer
March 2013 PU for SharePoint 2013 is available (and mandatory)
For those of you on SharePoint 2013, the March 2013 Public Update is now available with 30+ fixes as well as some performance and stability fixes around search . The good news is the SharePoint Server 2013 update contains the SharePoint Foundation 2013 update as well, so you only need to apply the one update. The bad news is that there is a change in the package configuration that requires you to install this update in order to install any future SharePoint updates.
The following are the KB links for the respective updates:
- KB 2768000 – SharePoint Foundation 2013
- KB 2767999 – SharePoint Server 2013
- KB 2768001 – Project Server 2013
The Full Server Packages for March 2013 PU are available through the following links:
- Download SharePoint Foundation 2013 March 2013 PU
- Download SharePoint Server 2013 March 2013 PU
- Download Project Server 2013 March 2013 PU
After installing the fixes you need to run the SharePoint 2013 Products Configuration Wizard on each machine in the farm. Additionally, if you are running Search Service Application in the farm, you will need to perform the following:
For those of you wondering the difference between and Public Update (PU) and a Cumulative Update (CU), a public update is a monthly release of general fixes and security updates applying to all customers where as a cumulative update is a bi-monthly release of specific hotfixes meant to address a specific customer(s) problem. CUs are often rolled into a PU later, as in this case where the February CU is rolled into this March PU.
Jason Condo, MCITP
Principal Consultant, Systems Management and Operations
Powershell – Get started with the low-hanging fruit
Much has been written about PowerShell (PS) cmdlets, whether they be the new ones available in v3, the Quest tools, those built into various products like SQL Server and Citrix XenDesktop, or the PSCX community extensions (to name just a few). These cmdlets are great, but don’t forget that PS is an object-oriented, interpreted scripting language, capable of taking advantage of .NET APIs and COM objects like IE and MS Word. Need to write a utility with a graphical interface so the help desk can easily provision a service for a user? Use the .NET System.Drawing and System.Windows.Forms namespaces. Want to open a web page repeatedly to ‘screen scrape’ it? Create a new object of type ‘InternetExplorer.Application’ and have at it!
Admittedly, there is a learning curve involved here, but here are some PS examples that allow you to use PowerShell quickly you may have overlooked:
1. Use the get-process cmdlet when tracking down the process that is causing performance problems. Combine that with the out-gridview and you can add additional selection criteria, and then select just the processes you want to output:
Get-process | out-gridview –passthru | fl
2. The out-gridview is fine if you have a small amount of data, but you need more automation if you have a large base. Combining the built-in csvde.exe with import-csv lets you scale to larger sizes:
Csvde –f users.csv
$users = import-csv users.csv
$users | where {$_.sAMAccountName.StartsWith(“S”)} | select name
3. Let’s gather CPU, memory, and disk statistics. Let’s write a PS workflow (PSFW, new with v3) that will gather all of the statistics in parallel, then pass it an array of the performance counters provided by perfmon we want to examine:
Workflow gather_stats ($perfmoncounters) { Foreach –parallel ($counter in $perfmoncounters) { (Get-counter $counter). CounterSamples } } $arr_perfmoncounters = ‘\Processor(_Total)\% Processor Time’, ` ’\Memory\Available Bytes’, ` ‘\PhysicalDisk(_Total)\% Disk Time’4. MS Excel is a powerful tool. Can PS export data into a format Excel can use? Yes it can! This example uses the Quest ActiveRoles Management Shell for Active Directory (ARMS), but you could also use get-user from the Exchange PS management tools, etc., then export the results to a comma separated value (CSV) file that Excel can import:
Get-QADUser | Export-Csv -NoTypeInformation -Encoding OEM users.csv
MS Excel can open the resulting file, and you can sort, filter, etc., as you normally would inside Excel.
5. All of the examples I have given show how to read data, but what if you want to write data back into AD? No problem! Just combine the earlier examples to gather your data, then send the results into the built-in MS tool dsmod.exe:
And, since I am encouraging you to mix-and-match tools, what if you want to use the Quest ARMS commands and the Exchange cmdlets (for example) at the same time? Here’s a command that will load all of the PS modules you have installed on your system into a single PS session. Open up a PS window and use this command, courtesy of the Microsoft Scripting Guys:
Get-Module -ListAvailable | Import-Module
Just a caveat for those of you running Exchange 2007 or 2010: These products have not been updated to use v3 of PowerShell yet, so hold off installing it until MS says it is safe.
And for those of you who looked at remoting in v2: PS v2 introduced remoting, but v3 makes the whole thing more robust and reliable. If v2 remoting left you with a bad taste, give it a fresh try with v3 – I guarantee you will have a better experience!
John Scaggs, MCT, MCITP
Senior Consultant, Advanced Infrastructure Group
BizTalk Server: Three Tips for Initiates
I often consult with clients who are in the early stages of building applications with BizTalk. While many find it easier than they expected to get started, there are some less-than-obvious things about BizTalk that newcomers can miss. Here is a roundup of tips I like to share with them.
Pipeline Configuration Dialogs
Applies to: Receive Locations, Send Ports
The dialogs for configuring receive locations and send ports have a dropdown for choosing the adapter and another dropdown (or two, if it’s a two-way port) for choosing the pipeline. Everyone knows that the adapter dropdown has a button to the right marked “Configuration” that launches an adapter configuration dialog. But not everyone notices another button, to the right of each pipeline dropdown, which is labeled with just three dots “…”. This button launches a configuration dialog for the pipeline. Here is the dialog for the XMLReceive pipeline:
You often don’t need this dialog because the pipeline works correctly by default. But when they need to change a default setting, some developers think the only way is to create and deploy a custom pipeline. They should try clicking the button first.
ElementFormDefault
Applies to: XSD Schemas
ElementFormDefault is an attribute of XSD schemas that I think should have been named “BizTalkDoesNotWorkUnlessYouChangeThisFromItsDefaultToQualified”. If you want a full explanation you can read here and here. But all you really need to know is the answers to two questions:
- Do you want BizTalk to work the same way as the rest of .NET?
- Do you enjoy getting error messages that say, “The element ‘foo’ in namespace ‘http://blah.com/foo’ has invalid child element ‘foofoo’ in namespace ‘http://blah.com/foo’. List of possible elements expected: ‘foofoo’.”
If you answered “No” to the first question and “Yes” to the second, then leave ElementFormDefault alone. But otherwise you should make it your business, whenever you create a new XSD schema in Visual Studio, before you do anything else, to change ElementFormDefault from its default setting (innocently marked “Default”) to the correct setting, which is Qualified. And it’s easy: just double click on it in the Properties window, and it changes to Qualified. You should do this consistently until it becomes like a reflex.
(Yes, there could be times when ElementFormDefault would need to be Unqualified, most likely so BizTalk can interoperate with some unenlightened outside system. If I ever that situation should arise I would map the Unqualified schema to a Qualified one within BizTalk as quickly as possible. But I’ve seldom seen it arise.)
Let’s review: what’s the first thing you should do when you create an XSD schema in Visual Studio? Answer: change ElementFormDefault to Qualified
Started/Enlisted/Unenlisted
Applies to: Send Ports, Orchestrations and Send Port Groups
Receive locations have two states: Enabled and Disabled. The meaning of these is self-explanatory. But send ports, orchestrations and send port groups have three states: Started, Enlisted and Unenlisted. You can think of Started as being just like Enabled, and Unenlisted as just like Disabled. But what does Enlisted mean?
It means the port/orchestration/group has an active message subscription but is not currently handling messages. Suppose you have a send port that sends invoices to your customer Fabikom’s web service, and you know that Fabikom’s web service will be going down for maintenance. If you change the port’s state from Started to Enlisted, then any Fabicom invoices that come through BizTalk will be held in reserve for the port, but the port won’t try to send them. Then when Fabikom’s web service comes back online, you can change the port state to Started, and all the reserved invoices will immediately get sent, along with all new ones that come in. Orchestrations and send port groups work the same way.
Richard Broida
Principal Consultant
The Devil is in the Details
If there’s one thing I’ve learned from my 17 years in advertising, it’s that when it comes to your design, it’s ALL about the details.
Whether it’s consistent tone-of-voice, pixel-perfect design, or designing for touch – trust me on this when I say it all matters to your audience.
You don’t have to be a graphic designer, user experience architect, copywriter or HTML developer in the digital space to notice the details. Consumers might not know exactly WHY they might be consuming content or adopting one product over another in the digital space. But, I can assure you it’s something about the design and experience that’s making it memorable, delightful and easy-to-use.
For example, take Absolut Vodka’s brand. They’ve created an iconic brand and consistently, aesthetically executed it across all channels including:
- The display of their highly recognizable font families in the CSS – Futura Condensed Extra Bold and Absolut Script
- The bold display and organically crafted interface elements
- The optimized-for-touch approach to the design.
http://www.absoluthost.com/
http://www.absolutdrinks.com/en/drinkspiration/
Yes, the big idea is important. But, quite frankly, I think everyone is just chasing the next shiny dangling object in the digital space – with many forgetting about the craftsmanship of his or her design when it’s time to go to market.
So, when you’re working on your next design, be sure to pay attention to the detail – because your audience is.
Tracy McCutcheon
Practice Director – Digital Brand Experience
Manually Control your ConfigMgr Client Deployment
During a System Center Configuration Manager 2012 (ConfigMgr 2012) implementation, I had a need to install the client to large groups of computers based on subnet in a controlled manner. For a controlled client installation, I think one of the simplest ways is to group the systems together in a collection and then install the client from the console from the actions menu to the whole collection. However, the customer had a requirement that the client push had to be performed on a subnet by subnet basis and the newly discovered computers didn’t have subnet information yet to easily create a query collection based on subnet or IP.
Well, instead of creating a script that would add computers from a list to a collection (or manually creating collections with direct memberships) and then me doing the client install per collection, I was able to leverage a tool in System Center Configuration Manager 2012 that assists you in creating CCR records for manual deployment of clients. The Generate CCR Tool (ClientPushGenerator.exe) was exactly what I needed for a controlled deployment into the environment.
To start, I was able to create lists of computer names based on subnet and saved each list off to a separate text file. I then launched the ClientPushGenerator.exe from the <configmgr install folder>\AdminConsole\bin on a Configuration Manager site server. It launched a tool that allowed me to choose the text file of computer names (each computer on a separate line) and choose the site they would be assigned to. I also had the option to choose whether I wanted to force the installation (Always install the client). Note that this is not required for upgrading SCCM 2007 clients to 2012.
I used the tool to generate CCR files to initiate a client push deployment to the computers in the text file. After monitoring for status and having the customer satisfied with the results, we repeated the steps for each subnet over a controlled period, monitoring each deployment set for success and impact. We were able to deploy 100+ subnets quickly this way with great results. Once we reached a majority of installs we were able to enable Client Push for the site and allow the rest of the systems to automatically get installed that we didn’t have in the lists.
While there are many ways to get your client deployed, this was a quick way to process some pre-defined lists of computers to stage the client rollout. If you want to use this tool, you don’t have to do this by subnet. This is just how the customer wanted their deployment groups to be processed in my case. No need to write a custom script now to generate those CCR files.
Jason Condo
Principle Consultant, System Management and Operations
New Position open at Bennett Adelson
Hello all.
I just wanted to share an exciting position we are looking to fill within Bennett Adelson. Hopefully, by this time you have followed us online or attended some of our many roadshows, and have seen the quality and dedication of our consultants. If you would like to join our team and are qualified to fill the position below we would love to have you apply online via LinkedIn.
System Center 2012 – Service Manager with Orchestrator RunBooks
Want users to make their own Service Requests to kick off advanced system tasks without IT administrator assistance? Service Requests through the Service Manager Portal can help provide a solution that can help alleviate IT administrative overhead. Below are some quick steps to create your own Service Request to kick off a Runbook to do an IT administrative task.
The administrative task we are creating allows a Windows User to add designated Windows Users to the local administrative group on a Windows computers.
Overview of the scenario:
- Create an Orchestrator Runbook
- Connect Service Manager to Orchestrator
- Import the Runbook
- Add the Runbook to a Service Request
- Publish the Service Request
The first step we will cover in this scenario is creating an Orchestrator Runbook
- Create an Orchestrator Runbook
For this scenario please make sure you have the AD integration pack installed in the Deployment Manager, please see below. The AD Integration Pack can be downloaded from Microsoft.

Open Runbook Designer and Create an Initialize Data Control:
Make sure to create the details below:

Add the user control from Active Directory

Add the computer control from Active Directory

Add the run program from System:
Make sure to add this to the command:
net localgroup Administrators {Sam Account Name} /{Type}

Final Runbook layout:

Follow the series for Step 2.
Nathan Mertz
| Bennett Adelson | Columbus
Active Directory and Identity and Access Management Principal Engineer
www.bennettadelson.com
User Experience | Mobility Solutions | Information Worker | Architecture & Development | Advanced Infrastructure