<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>HeLaw's Blog on System Center</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/helaw/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/helaw/feed.xml</link>
    <description>System Center:  Tying it all together!</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:23:26 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>System Center Configuration Manager 2012 SP1 - CU4 Available!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/system-center-configuration-manager-2012-sp1-cu4-available</link>
      <pubDate>Tue, 28 Jan 2014 14:33:16 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2014/01/28/system-center-configuration-manager-2012-sp1-cu4-available/</guid>
      <description><![CDATA[Greetings, Heath here with a quick update that CU4 for SCCM 2012 SP1 is available for...]]></description>
      <content:encoded><![CDATA[<p>Greetings, Heath here with a quick update that CU4 for SCCM 2012 SP1 is available for download.</p>
<p>Take a look here:&nbsp; <a href="https://support.microsoft.com/kb/2922875">https://support.microsoft.com/kb/2922875</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Free eBook:  Introducing Microsoft System Center 2012 R2!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/free-ebook-introducing-microsoft-system-center-2012-r2</link>
      <pubDate>Wed, 15 Jan 2014 07:27:28 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2014/01/15/free-ebook-introducing-microsoft-system-center-2012-r2/</guid>
      <description><![CDATA[Greetings everyone!&nbsp; Quick post today to let you know that Microsoft Press released a new free...]]></description>
      <content:encoded><![CDATA[<p>Greetings everyone!&nbsp; Quick post today to let you know that Microsoft Press released a new free eBook covering System Center 2012 R2!&nbsp; Great stuff from the Mitch Tulloch and the System Center team.&nbsp; This is chock-full of great content, and covers the new features of R2 nicely.&nbsp; Plus, I contributed a bit to the System Center Configuration Manager section, so be sure to check it out!</p>
<p>You can download the eBook for free from&nbsp;<a title="here." href="https://blogs.msdn.com/b/microsoft_press/archive/2013/12/16/free-ebook-introducing-microsoft-system-center-2012-r2.aspx">here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Configuration Manager: Cache Management</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/configuration-manager-cache-management</link>
      <pubDate>Tue, 07 Jan 2014 08:31:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2014/01/07/configuration-manager-cache-management/</guid>
      <description><![CDATA[Greetings all!&nbsp; Heath here, reporting in after a lengthy vacation and the holidays.&nbsp; I...]]></description>
      <content:encoded><![CDATA[<p>Greetings all!&nbsp; Heath here, reporting in after a lengthy vacation and the holidays.&nbsp; I hope everyone has been doing well over the past month or two, and hope 2014 is off to a great start for you.</p>
<p>This post is all about something we use everyday, but probably don&rsquo;t spend too much time managing or monitoring in our enterprise:&nbsp; the Configuration Manager Client Cache!&nbsp; This is an all up post, meaning I&rsquo;ve got example code to make changes, and then we follow-up with inventory and reports to validate the settings in our environment.</p>
<p>First, an intro to the Configuration Manager client cache.&nbsp; It&rsquo;s used for a large number of Configuration Manager operations &ndash; by default, whenever a client needs to grab content for an action (think Application Management and Software Updates), the client will download to a temporary location.&nbsp; This &ldquo;download and execute&rdquo; behavior is what gives us the ability to use BITS to move content to a client,&nbsp; allows us to be clear of network requirements while running setup.exe, and allows clients to re-execute an application with out re-downloading any content.&nbsp;</p>
<p>Let's get started in the lab.&nbsp; We'll start with our script below&nbsp; &ndash; in this case, we&rsquo;re going to use the Configuration Manager COM object to interact with the Configuration Manager client.&nbsp; I encourage everyone to poke around with this &ndash; much of the client automation work you&rsquo;ll see in the SDK is geared around COM, so this is a great skill to add to your scripting repertoire if you are a Configuration Manager admin!</p>
<pre class="scroll"><code class="cplusplus">#Initialize our CCM COM Objects<br /> $CCM = New-Object -com UIResource.UIResourceMGR<br /> <br /> #USe GetCacheInfo method to return Cache properties<br /> $CCMCache = $CCM.GetCacheInfo()<br /> <br /> #Get the current cache location<br /> $CCMCacheDrive = $CCMCache.Location.Split("\")[0]<br /> <br /> #Check Free space on drive<br /> $Drive = Get-WMIObject -query "Select * from Win32_LogicalDisk where DeviceID = '$CCMCacheDrive'"<br /> <br /> #Convert freespace to GB for easier check<br /> $FreeSpace = $Drive.FreeSpace/1GB<br /> <br /> #Check Sizes and set Cache<br /> If ($Freespace -ge 5 -and $Freespace -lt 15)<br /> {<br /> #Free space moderate<br /> $CacheSize = 5120<br /> }<br /> If ($Freespace -ge 15)<br /> {<br /> #Plenty of space<br /> $CacheSize = 10240<br /> }<br /> <br /> #Set Cache Size<br /> $CCMCache.TotalSize = $CacheSize<br /> <br /> Write-Host (Get-WMIObject -namespace root\ccm\softmgmtAgent -class CacheConfig).Size<br /> </code></pre>
<p>Here you&rsquo;ll see a couple of things take place:</p>
<ol>
<li>Initialize the ConfigMgr UI COM Object</li>
<li>Get the drive holding the current cache</li>
<li>Check the free space (notice, we tell it to divide by <a title="1GB" href="https://technet.microsoft.com/en-us/library/ee692684.aspx">1GB</a>)</li>
<li>We determine the size of the cache and then set the new cache size</li>
<li>Finally, we check that the setting took by checking the cache size via the CacheConfig class in the CCM\SoftMgmtAgent namespace - more on this below.</li>
</ol>
<p>Cool!&nbsp; We&rsquo;ve got a PowerShell script that will change the Configuration Manager client cache size without restarting the Configuration Manager client.&nbsp; Where would this be useful?&nbsp; We could send this out via package and program to set it once, maybe even with a recurring schedule.&nbsp; I&rsquo;m a huge fan of Compliance Settings within Configuration Manager, and this sounds like a perfect use case for Configuration Manager Compliance Settings!</p>
<p>Here, we&rsquo;ll wrap this up in a Compliance Setting Configuration Item.&nbsp; This Configuration Item will use a script to detect and set the state, then we&rsquo;ll check the outcome of the script as our measure of compliance:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7612.image_5102F6AE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7612.image_5F00_5102F6AE.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6406.image_thumb_2A37711F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6406.image_5F00_thumb_5F00_2A37711F.png" alt="image" width="569" height="355" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5807.image_350AC9A3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5807.image_5F00_350AC9A3.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7875.image_thumb_04E37EE0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7875.image_5F00_thumb_5F00_04E37EE0.png" alt="image" width="429" height="404" border="0" /></a></p>
<p>Great, now we&rsquo;ve got a CI that will enforce client cache configurations, and since it&rsquo;s a CI, we can set an easy recurrence pattern and get basic information back out of the script.</p>
<p>Now that we&rsquo;re able to manage the cache on the client, we&rsquo;ll probably want to be able to report on this configuration, so we&rsquo;ll need to do a bit of work to make this happen.&nbsp; We&rsquo;ll be using Hardware Inventory to pull back the Configuration Manager Cache Configuration &ndash; in this case, we&rsquo;ll need to use the nifty new MOF-free editor in System Center 2012 Configuration Manager to go grab the class we&rsquo;re after.</p>
<p>Lets start by connecting to the appropriate namespace on a client &ndash; we&rsquo;ll have to run the console as Admin (Right click, &ldquo;Run As Administrator&rdquo;).&nbsp; We&rsquo;ll navigate to <em>root\ccm\SoftMgmtAgent</em> namespace, then select the <em>CacheConfig</em> class:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6266.image_43558FD4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6266.image_5F00_43558FD4.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8666.image_thumb_47626E57.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8666.image_5F00_thumb_5F00_47626E57.png" alt="image" width="368" height="408" border="0" /></a></p>
<p>While we&rsquo;re modifying hardware inventory, a great attribute to add to an existing class is &ldquo;Free Space&rdquo; in the <em>Logical Disk</em> class.&nbsp; This will be used later for the reports below.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0842.image_421387A6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0842.image_5F00_421387A6.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2867.image_thumb_2D90C8D9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2867.image_5F00_thumb_5F00_2D90C8D9.png" alt="image" width="444" height="376" border="0" /></a></p>
<p>Cool, now that we have hardware inventory reporting back, we should be able to build a few reports that reference the V_GS_CacheConfig.&nbsp; I won&rsquo;t go into too many details, as the reports are available below, but we&rsquo;ll make use of our newly created inventory class to report on the current state of the client cache enterprise wide.&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6180.clip_image002_3A8AA8EA.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6180.clip_5F00_image002_5F00_3A8AA8EA.jpg"><img style="display: inline;" title="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8015.clip_image002_thumb_437A3B29.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8015.clip_5F00_image002_5F00_thumb_5F00_437A3B29.jpg" alt="clip_image002" width="559" height="543" border="0" /></a></p>
<p>If we click through each of the cache sizes, we can dig into a detailed view for each client in that state.&nbsp; This could easily be adapted to a &ldquo;I need to deploy a 10GB package &ndash; which clients can handle it?&rdquo; type of report!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4885.clip_image0025_4140431E.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4885.clip_5F00_image0025_5F00_4140431E.jpg"><img style="display: inline;" title="clip_image002[5]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/1682.clip_image0025_thumb_2361BF1D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/1682.clip_5F00_image0025_5F00_thumb_5F00_2361BF1D.jpg" alt="clip_image002[5]" width="980" height="220" border="0" /></a></p>
<p>&nbsp;All of the sample files are available <a href="https://gallery.technet.microsoft.com/Configuration-Manager-ccc81762">here</a>, via TechNet.&nbsp; I debated splitting this into two posts, but I wanted to make sure the entire solution is available for folks, and the nice thing is you can choose to use all of the components (Script, reports, inventory changes) or the individual pieces (report/inventory info OR cache script).&nbsp; Maybe you&rsquo;ll use this as a starting point for your project, maybe you&rsquo;ve had issues with a standardized client cache in the past &ndash; either way, let me know how you use this or any questions or comments below!&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>What’s new in R2?  PowerShell and Client Notification!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/whats-new-in-r2-powershell-and-client-notification</link>
      <pubDate>Sat, 02 Nov 2013 08:02:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/11/02/whats-new-in-r2-powershell-and-client-notification/</guid>
      <description><![CDATA[Howdy everyone.&nbsp; This post is continuing the series of PowerShell improvements in System Center...]]></description>
      <content:encoded><![CDATA[<p>Howdy everyone.&nbsp; This post is continuing the series of PowerShell improvements in System Center Configuration Manager 2012 R2.&nbsp; In my past few posts (<a href="https://blogs.msdn.com/b/helaw/archive/2013/10/19/what-s-new-in-r2-spot-the-difference.aspx">Here</a>, <a href="https://blogs.msdn.com/b/helaw/archive/2013/10/26/what-s-new-in-r2-organization-with-powershell.aspx">Here</a>, and <a href="https://blogs.msdn.com/b/helaw/archive/2013/10/19/what-s-new-in-r2-powershell-and-maintenance-windows.aspx">Here</a>) we&rsquo;ve looked at individual cmdlets available.&nbsp; This post is keeping with that tradition and will focus on notifying clients using the client notification channel introduced in Service Pack 1 and a new PowerShell cmdlet to start client notification!</p>
<p>Now, you may be asking yourself &ldquo;Heath, client notification has been around for a while, why is it relevant now?&rdquo;.&nbsp; Great question!&nbsp; This post comes straight from work I was doing with a customer this week where we were trying to take make clients evaluate policy in&nbsp;an automation scenario.&nbsp; Sure, we have always been able to use WMI to start a machine policy polling cycle, but here&rsquo;s the thing:&nbsp; that method has always required us to have all of the ports open to each individual client device.&nbsp; There was no throttling, no mechanism to track the status, and overall, it worked. But it was lacking.</p>
<p>Enter Fast Channel Notification and Client Notification.&nbsp; I won&rsquo;t jump into all the details, as the Configuration Manager Team blog has a great write up (<a href="https://blogs.technet.com/b/configmgrteam/archive/2012/09/27/fast-channel-for-system-management.aspx">Here</a>), but the key takeaways are that client notification removes the need for huge network access and permissions on the remote box.&nbsp; Instead, Configuration Manager Fast Notification (Client Notification) use either port 10231 or port 80 to notify clients that new Machine Policy, User Policy, or System Center Endpoint Protection actions need to be taken.</p>
<p>Another really cool, but unknown, feature of Client Notification is we maintain a current state for all clients in the hierarchy.&nbsp; What does this mean to you?&nbsp; Well, if we haven&rsquo;t seen a client online in the past 20 minutes, we mark it as offline so we can definitively know the status of our PCs. So, as we are automating, we can intelligently handle clients that are offline.&nbsp; That&rsquo;s pretty cool!</p>
<p>Using Client Notification via the console is a pretty easy task, though overlooked by many folks I talk with.&nbsp; We&rsquo;d simply grab a collection of devices or a single device, right click, select Client Notification and then select Download Computer Policy:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4212.image_1A1B7298.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4212.image_5F00_1A1B7298.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3175.image_thumb_37905455.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3175.image_5F00_thumb_5F00_37905455.png" alt="image" width="885" height="463" border="0" /></a></p>
<p>One new feature you&rsquo;ll see is that in R2, we also have the ability to notify a device that we&nbsp;want it to grab user policy.&nbsp; This is pretty handy in workstation scenarios, as we push to user-centric software deployment, we may want to tell the PC to check for new apps deployed to that user.</p>
<p>So, let&rsquo;s jump to R2 PowerShell lab and take a peek! One of the new features&nbsp;in PowerShell for R2 is the ability to interact with client operations, starting with the Invoke-ClientNotification cmdlet.&nbsp; As usual, let&rsquo;s start by getting help on the cmdlet in question:</p>
<pre class="scroll"><code class="cplusplus">Get-Help Invoke-CMClientNotification</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7725.image_3960AA1C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7725.image_5F00_3960AA1C.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8688.image_thumb_2B90F4D2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8688.image_5F00_thumb_5F00_2B90F4D2.png" alt="image" width="888" height="523" border="0" /></a></p>
<p>&nbsp;</p>
<p>Easy enough, looks like we really just need to specify two things:&nbsp; (1) Which collection or device we want to notify and (2) the action we want to take.&nbsp; In my lab, I&rsquo;ve created a collection with one member, so we&rsquo;ll use my &ldquo;Client Notification Test&rdquo; collection.&nbsp; Let&rsquo;s give it a try:</p>
<pre class="scroll"><code class="cplusplus">Invoke-CMClientNotification -NotificationType RequestMachinePolicyNow -DeviceCollection (Get-CMDeviceCollection -Name "Client Notification Test")</code></pre>
<p>Awesome, with any luck, we should be able to watch for a couple of things to happen.&nbsp; First, on the site server, we can watch BGBServer.log and we can see a new Client Notification request.&nbsp; We could also watch for activity in the CCMClientNotification.log on clients.&nbsp; On the server side, you&rsquo;ll see traffic like this in BGBServer.log indicating the push was started:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5657.image_3D03E65B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5657.image_5F00_3D03E65B.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/1307.image_thumb_5EEF48DF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/1307.image_5F00_thumb_5F00_5EEF48DF.png" alt="image" width="879" height="102" border="0" /></a></p>
<p>Now, that is great &ndash; we&rsquo;ve notified clients in a notification that they need to fetch policy and start doing stuff.&nbsp; We can track it through the console in the Monitoring workspace, under &ldquo;Client Operations&rdquo;:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6014.image_5CB550D4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6014.image_5F00_5CB550D4.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0741.image_thumb_1EBBC016.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0741.image_5F00_thumb_5F00_1EBBC016.png" alt="image" width="879" height="401" border="0" /></a></p>
<p>&nbsp;</p>
<p>The console is great, but what happens if we are wanting to automate this?&nbsp; We&rsquo;ll need to use Powershell, and luckily the product team has made it easy for us with a Get-ClientOperations cmdlet.&nbsp; We&rsquo;ll start by getting help:</p>
<pre class="scroll"><code class="cplusplus">Get-Help Get-CMClientOperations</code></pre>
<p>Looks like we don&rsquo;t get a lot of options, but we&rsquo;ll fix that up in a bit.&nbsp;</p>
<p>For now, let&rsquo;s just see what we get from Get-CMClientOperations:&nbsp;</p>
<pre class="scroll"><code class="cplusplus">Get-CMClientOperations</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8105.image_60C22F57.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8105.image_5F00_60C22F57.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5430.image_thumb_34A53266.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5430.image_5F00_thumb_5F00_34A53266.png" alt="image" width="883" height="374" border="0" /></a></p>
<p>Hmm.&nbsp; Interesting, I pushed it to a collection with 5 clients, but I don&rsquo;t see any client counts yet.&nbsp; Why&rsquo;s that?</p>
<p>Well, the data we pull from behind the scenes, SMS_ClientOperationStatus, isn&rsquo;t real time.&nbsp; The data we see above is from a summarized task that takes place.&nbsp; So, we need to invoke the summarization task.&nbsp; We do track the summarization status, and if you&rsquo;ll notice above, LastSummaryTime is blank.&nbsp; How can we summarize that data?&nbsp; We can do it through the console, but lucky for us, there&rsquo;s a new cmdlet that does it for us:&nbsp; <em>Invoke-CMClientOperationSummarization:</em></p>
<pre class="scroll"><code class="cplusplus">Invoke-CMClientOperationSummarization<br /> <br />Get-CMClientOperations<br /> </code></pre>
<p>Ah, much better &ndash; I am seeing accurate statistics on my recent client operation:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7026.image_71C8EDEB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7026.image_5F00_71C8EDEB.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2654.image_thumb_2186966B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2654.image_5F00_thumb_5F00_2186966B.png" alt="image" width="878" height="422" border="0" /></a></p>
<p>&nbsp;</p>
<p>Now, you&rsquo;re probably saying &ndash; but Heath, in my automation example, I want to wait for all online clients notified before I take the next step and clean it up afterwards.&nbsp; Let&rsquo;s string together everything we&rsquo;ve learned in this post into a nice bit of PowerShell to do exactly that!</p>
<pre class="scroll"><code class="cplusplus"> #Define the Collection we'll use for notification <br /> $DeviceCollection = "Client Notification Test"<br /> <br /> #Invoke the Client Notification process against my designated collection <br /> Invoke-CMClientNotification -NotificationType RequestMachinePolicyNow -DeviceCollection (Get-CMDeviceCollection -Name $DeviceCollection)<br /> <br /> #Summarize data, wait for summarization to complete, then get latest stats and wait some more. <br /> Do <br /> { <br /> Invoke-CMClientOperationSummarization <br /> Start-Sleep -seconds 30 <br /> $ClientOps = Get-CMClientOperations | where TargetCollectionName -eq $DeviceCollection <br /> If ($ClientOps.CompletedClients + $ClientOps.OfflineClients -ne $ClientOps.TotalClients) <br /> { <br /> $AllClientsAccountedFor = $True <br /> Write-Host (Get-Date).ToString("HH:mm") - $ClientOps.TotalClients clients notified. <br /> Break <br /> } <br /> Write-Host (Get-Date).ToString("HH:mm") - Waiting for $ClientOps.FailedClients clients to complete notification. <br /> }<br /> <br /> While ($AllClientsAccountedFor -eq $False)<br /> <br /> #Once we're complete, clean up our client operation <br /> Remove-CMClientOperation -id $ClientOps.ID -force<br /> <br /> #Let everyone know we're complete <br /> Write-Host (Get-Date).ToString("HH:mm") - Removed Client Operation $ClientOps.ID for $ClientOps.TotalClients clients within collection $ClientOps.TargetCollectionName<br /> </code></pre>
<p>This very basic example will invoke a client notification task, and then repeatedly summarize and monitor it until we&rsquo;ve accounted for all clients, and finally, delete the resulting Client Operation.&nbsp; Pretty handy!&nbsp;&nbsp;</p>
<p>As a recap, client notification is a&nbsp;huge improvement over previous methods, especially as we look to integrate Configuration Manager into automated data center operations.&nbsp; Maybe you want to wrap this up into your own PowerShell function, maybe you want to use it in an Orchestrator Runbook, the automating client notifications brings a near real-time capability to Configuration Manager.</p>
<p>I hope this blog post gave you a good intro into what is required to programmatically start, summarize, monitor and delete Client Notification operations with PowerShell.&nbsp; Do you have planned uses for Client Notification or are you currently using Client Notification for automation tasks?&nbsp; I&rsquo;d love to hear about it or any other feedback in the comments below!</p>
<p>Thanks!</p>]]></content:encoded>
    </item>
    <item>
      <title>What’s new in R2?  Configuration Manager Folders and Organization with PowerShell!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/whats-new-in-r2-configuration-manager-folders-and-organization-with-powershell</link>
      <pubDate>Sat, 26 Oct 2013 03:50:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/10/26/whats-new-in-r2-configuration-manager-folders-and-organization-with-powershell/</guid>
      <description><![CDATA[Greetings everyone!&nbsp; This blog post is going to continue the series of new PowerShell cmdlets...]]></description>
      <content:encoded><![CDATA[<p>Greetings everyone!&nbsp; This blog post is going to continue the series of new PowerShell cmdlets within System Center 2012 R2 Configuration Manager.&nbsp; In my <a href="https://blogs.msdn.com/b/helaw/archive/2013/10/19/what-s-new-in-r2-spot-the-difference.aspx">last</a> blog post, I covered how we can use Powershell to find new cmdlets from version to version of&nbsp;Configuration Manager, and this post will make use of that data.</p>
<p>This post comes from a question I received this week.&nbsp; We&rsquo;re going to focus on interacting with the Configuration Manager folder structure using Powershell.&nbsp; What&rsquo;s that?&nbsp; Folders?&nbsp; Configuration Manager?&nbsp;</p>
<p>That&rsquo;s right.&nbsp; Starting with Configuration Manager 2012, folders are used for organization within the console, creating logical placeholders for all sorts of content.&nbsp; Most object nodes within the console will allow you to create folders.&nbsp; One of the benefits to folders is they are extremely useful when selecting a large number of objects, during RBA operations for instance:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2068.image_6AC2E2A9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2068.image_5F00_6AC2E2A9.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0743.image_thumb_486DDDE1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0743.image_5F00_thumb_5F00_486DDDE1.png" alt="image" width="546" height="368" border="0" /></a></p>
<p>Alright, now that we all know folders are a great way to keep our consoles organized, how can we mirror the folder management functionality in the console with PowerShell?&nbsp; We&rsquo;ll begin our investigation with Powershell provider for Configuration Manager.&nbsp; When you open a Powershell session using the Configuration Manager module, we load a provider that allows us to interact with Configuration Manager via Powershell.&nbsp; We can take a look at the providers loaded by using <em>Get-PSProvider:</em></p>
<pre class="scroll"><code class="cplusplus">Get-PSProvider</code></pre>
<p><em></em>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5483.image_23701D68.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5483.image_5F00_23701D68.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3022.image_thumb_0C44A2EA.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3022.image_5F00_thumb_5F00_0C44A2EA.png" alt="image" width="810" height="239" border="0" /></a></p>
<p>Notice my prompt, <em>PS P20:\&gt;</em>.&nbsp; This is telling me any command I issue will be handled by the Configuration Manager provider, just like any other provider.&nbsp; Also notice the other providers such as FileSystem, Registry, etc.&nbsp; This will be important.</p>
<p><em>Move-CMObject</em> is a new cmdlet, but part of new PowerShell functionality in Configuration Manager 2012 R2.&nbsp; While <em>Move-CMObject</em> allows me to move objects within the folder hierarchy, new functionality allows me to interact with my Configuration Manager site just like the good ol' file system!</p>
<p>Let&rsquo;s start by taking a look at our CMSite:</p>
<pre class="scroll"><code class="cplusplus">Get-ChildItem</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6180.image_3C024B69.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6180.image_5F00_3C024B69.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3302.image_thumb_306C8E2A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3302.image_5F00_thumb_5F00_306C8E2A.png" alt="image" width="804" height="453" border="0" /></a></p>
<p>Awesome!&nbsp; So we can use Get-Childitem to take a deeper look at our site.&nbsp; A little known fact, in PowerShell, &ldquo;Dir&rdquo; is actually just an alias for &ldquo;<em>Get-ChildItem</em>&rdquo;:</p>
<pre class="scroll"><code class="cplusplus">dir</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3312.image_74AF8627.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3312.image_5F00_74AF8627.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6011.image_thumb_3B2C7630.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6011.image_5F00_thumb_5F00_3B2C7630.png" alt="image" width="805" height="524" border="0" /></a></p>
<p>Next, let&rsquo;s figure out how to navigate within this hierarchy.&nbsp; In Powershell, we can use the <em>Set-Location</em> cmdlet to navigate within any of the locations from each provider.&nbsp; For instance, on my file system, I may want to navigate to my home directory using <em>Set-Location</em>, which would look like this:</p>
<pre class="scroll"><code class="cplusplus">Set-Location C:\Users\</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2210.image_51821B75.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2210.image_5F00_51821B75.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7827.image_thumb_6190EA2C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7827.image_5F00_thumb_5F00_6190EA2C.png" alt="image" width="805" height="74" border="0" /></a></p>
<p>This same functionality will also work in Configuration Manager:</p>
<pre class="scroll"><code class="cplusplus">Set-Location .\DeviceCollection</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7433.image_0EA5D6FB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7433.image_5F00_0EA5D6FB.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3731.image_thumb_753DD3C0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3731.image_5F00_thumb_5F00_753DD3C0.png" alt="image" width="804" height="74" border="0" /></a></p>
<p>You might say, &ldquo;Hey Heath, that looks a lot like&nbsp;the Change Directory (<em>cd</em>) command from older command shells!&rdquo; To that, I&rsquo;d say you&rsquo;re correct, we can navigate the Configuration Manager objects just like a file system!</p>
<pre class="scroll"><code class="cplusplus">cd .\DeviceCollection</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4152.image_37444302.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4152.image_5F00_37444302.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7888.image_thumb_04E06F83.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7888.image_5F00_thumb_5F00_04E06F83.png" alt="image" width="815" height="75" border="0" /></a></p>
<p>Awesome.&nbsp; So, we&rsquo;ve figured out how to navigate the folder structure of our site.&nbsp; We can also create a new folder, using the &ldquo;<em>New-Item</em>&rdquo; cmdlet.&nbsp; Let&rsquo;s try it:</p>
<pre class="scroll"><code class="cplusplus">New-Item &ldquo;Heath&rsquo;s New Folder&rdquo;<br />Get-ChildItem | fl &ndash;Property Name<br /> </code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4237.image_2C97C0E2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4237.image_5F00_2C97C0E2.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0842.image_thumb_1C8B82DC.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0842.image_5F00_thumb_5F00_1C8B82DC.png" alt="image" width="823" height="393" border="0" /></a></p>
<p>We can also make folders using an alias more of you might be familiar with.&nbsp; &ldquo;<em>MD&rdquo;</em>, is an alias for MKDir, which will create a new item in this path.</p>
<pre class="scroll"><code class="cplusplus">md &ldquo;Heath&rsquo;s Second Folder&rdquo;<br />get-childitem | fl &ndash;property Name<br /> </code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7268.image_7D5790C6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7268.image_5F00_7D5790C6.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7612.image_thumb_467D3C80.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7612.image_5F00_thumb_5F00_467D3C80.png" alt="image" width="819" height="391" border="0" /></a></p>
<p>Finally, we can use the new &ldquo;<em>Move-CMObject</em>&rdquo;&nbsp; cmdlet in System Center 2012 R2 Configuration Manager to move objects around the console.&nbsp; Let&rsquo;s start by getting help:</p>
<pre class="scroll"><code class="cplusplus">Get-Help Move-CMObject</code></pre>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2018.image_2832858A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2018.image_5F00_2832858A.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/3438.image_thumb_11070B0C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/3438.image_5F00_thumb_5F00_11070B0C.png" alt="image" width="831" height="245" border="0" /></a></p>
<p>Alright, <em>Move-CMObject</em> will use two parameters, InputObject defines the object we are going to move, and FolderPath defines the location we&rsquo;ll move to.&nbsp; Easy enough, let&rsquo;s create a new device collection and then move it to the OSD folder:</p>
<pre class="scroll"><code class="cplusplus">$NewCollection = New-CMDeviceCollection -Name "Windows Server 2012 R2" -LimitingCollectionName "All Systems"<br />Move-CMObject -FolderPath .\DeviceCollection\OSD -InputObject $NewCollection<br /> </code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6327.image_7E40CBE5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6327.image_5F00_7E40CBE5.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/2022.image_thumb_197924E7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/2022.image_5F00_thumb_5F00_197924E7.png" alt="image" width="832" height="32" border="0" /></a></p>
<p>Which has moved the newly created folder to the path we specified:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/6675.image_629ED0A0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/6675.image_5F00_629ED0A0.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4087.image_thumb_445419AA.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4087.image_5F00_thumb_5F00_445419AA.png" alt="image" width="843" height="472" border="0" /></a></p>
<p>Hopefully this post has helped you understand the new ability to interact with folders in System Center 2012 R2 Configuration Manager.&nbsp; I&rsquo;m excited for the ability to programmatically organize objects in the Configuration Manager console, as this could be an automated task to move certain objects to a specified path automatically, keeping our console nice and tidy.&nbsp; Feedback is always appreciated,&nbsp;let me know if you have any questions or comments below!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>What’s new in R2?  Spot the Difference!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/whats-new-in-r2-spot-the-difference</link>
      <pubDate>Sat, 19 Oct 2013 07:20:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/10/19/whats-new-in-r2-spot-the-difference/</guid>
      <description><![CDATA[I don&rsquo;t know about you all, but I remember sitting in the doctor&rsquo;s office as a kid,...]]></description>
      <content:encoded><![CDATA[<p class="scroll">I don&rsquo;t know about you all, but I remember sitting in the doctor&rsquo;s office as a kid, reading the kid magazines, where they had a game to spot the differences in two pictures.&nbsp; Sometimes the differences would be easy to spot,&nbsp;and other times it'd be a bit more challenging.&nbsp; Ah, childhood.</p>
<p>What&rsquo;s that?&nbsp; How is this related to System Center 2012 R2 you ask?&nbsp; Well, with System Center 2012 Configuration Manager R2 we get a whole lot of new cmdlets available for our use.&nbsp; Unlike the magazines at the doctor&rsquo;s office, however, it isn't always easy to spot the differences in cmdlets between versions of products.&nbsp; Also, unlike the magazines at the doctor&rsquo;s office, we can use PowerShell to find the new cmdlets available!</p>
<p>First off, we need a reference machine.&nbsp; Ah yes, my older System Center Configuration Manager 2012 SP1 CU2 site will serve nicely.&nbsp; Here, we&rsquo;ll export the&nbsp;cmdlets from the Service Pack 1 Configuration Manager module to a CSV for consumption later:</p>
<p>&nbsp;<code class="csharp">Get-Command -Module ConfigurationManager | select Name | export-csv &lt;path to CSV&gt;</code></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5684.image_5F58165B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5684.image_5F00_5F58165B.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5706.image_thumb_5D1E1E50.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5706.image_5F00_thumb_5F00_5D1E1E50.png" alt="image" width="876" height="33" border="0" /></a></p>
<p>Great.&nbsp; Now, we need to compare this to a newer version of the Configuration Manager Powershell module.&nbsp; I'll copy the CSV we created in the last step to my shiny new System Center 2012 R2 Configuration Manager site server, and with a few lines of Powershell, we can compare to two and find new cmdlets!&nbsp; Note, this won&rsquo;t tell us any cmdlets that have changed, but it will tell us what is a new addition to System Center 2012 R2.</p>
<pre class="scroll"><code class="cplusplus"> $NewCmdlets = @()<br /> $CM12SP1Cmdlets = Import-CSV "E:\Output\CM12SP1CU2Cmdlets.csv"<br /> $CM12R2Cmdlets = Get-Command -module ConfigurationManager | select Name<br /> <br /> ForEach ($Cmdlet in $CM12R2Cmdlets)<br /> {<br /> <br /> If ($CM12SP1Cmdlets.Name -NotContains $Cmdlet.Name)<br /> {<br /> $NewCmdlets += $Cmdlet.Name<br /> }<br /> } </code></pre>
<pre class="scroll"><code class="cplusplus"><br /> </code></pre>
<p>Cool!&nbsp; Now if we look at the values of <em>$NewCmdlets</em>, we have&nbsp;an array&nbsp;of cmdlets that are new to System Center 2012 R2 Configuration Manager!</p>
<pre class="scroll"><code class="cplusplus"> Copy-CMClientAuthCertificateProfileConfigurationItem<br /> Copy-CMRemoteConnectionProfileConfigurationItem<br /> Copy-CMTrustedRootCertificateProfileConfigurationItem<br /> Copy-CMVpnProfileConfigurationItem<br /> Copy-CMWirelessProfileConfigurationItem<br /> Get-CMAccessLicense<br /> Get-CMClientAuthCertificateProfileConfigurationItem<br /> Get-CMClientOperations<br /> Get-CMDeviceVariable<br /> Get-CMInitialModifiableSecuredCategory<br /> Get-CMMaintenanceWindow<br /> Get-CMRemoteConnectionProfileConfigurationItem<br /> Get-CMRemoteConnectionProfileConfigurationItemXmlDefinition<br /> Get-CMTrustedRootCertificateProfileConfigurationItem<br /> Get-CMVhd<br /> Get-CMVpnProfileConfigurationItem<br /> Get-CMWirelessProfileConfigurationItem<br /> Invoke-CMClientNotification<br /> Invoke-CMContentValidation<br /> Invoke-CMDeviceRetire<br /> Invoke-CMDeviceWipe<br /> Move-CMObject<br /> New-CMClientAuthCertificateProfileConfigurationItem<br /> New-CMDeviceVariable<br /> New-CMMaintenanceWindow<br /> New-CMRemoteConnectionProfileConfigurationItem<br /> New-CMTrustedRootCertificateProfileConfigurationItem<br /> New-CMVhd<br /> New-CMVpnProfileConfigurationItem<br /> New-CMWirelessProfileConfigurationItem<br /> Publish-CMPrestageContentTaskSequence<br /> Remove-CMClientAuthCertificateProfileConfigurationItem<br /> Remove-CMContentDistribution<br /> Remove-CMDeviceVariable<br /> Remove-CMMaintenanceWindow<br /> Remove-CMRemoteConnectionProfileConfigurationItem<br /> Remove-CMTrustedRootCertificateProfileConfigurationItem<br /> Remove-CMVhd<br /> Remove-CMVpnProfileConfigurationItem<br /> Remove-CMWirelessProfileConfigurationItem<br /> Set-CMAssignedSite<br /> Set-CMClientAuthCertificateProfileConfigurationItem<br /> Set-CMDeviceOwnership<br /> Set-CMDeviceVariable<br /> Set-CMMaintenanceWindow<br /> Set-CMRemoteConnectionProfileConfigurationItem<br /> Set-CMTrustedRootCertificateProfileConfigurationItem<br /> Set-CMVhd<br /> Set-CMVpnProfileConfigurationItem<br /> Set-CMWirelessProfileConfigurationItem<br /> </code></pre>
<p>No matter the technologies you have to support on a daily basis, this example code or variations of this example code can be used to find new Powershell Cmdlets across all Microsoft products.&nbsp; Have you found an interesting new Powershell Cmdlet?&nbsp; Let me know in the comments below!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>What’s new in R2? PowerShell and Maintenance Windows!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/whats-new-in-r2-powershell-and-maintenance-windows</link>
      <pubDate>Sat, 19 Oct 2013 05:45:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/10/19/whats-new-in-r2-powershell-and-maintenance-windows/</guid>
      <description><![CDATA[Greetings Everyone.&nbsp; Big news this week for System Center folks as System Center 2012 R2...]]></description>
      <content:encoded><![CDATA[<p>Greetings Everyone.&nbsp; Big news this week for System Center folks as System Center 2012 R2 released.&nbsp; As part of that, Configuration Manager 2012 R2 is available, and as a result of that&hellip;&nbsp;&nbsp; <strong>New PowerShell cmdlets are available!</strong>&nbsp; Maybe others don&rsquo;t get as excited as I do when it comes to new Cmdlets, but it&rsquo;s&nbsp;a party&nbsp;around the Lawson household when&nbsp;I get to explore new releases for new automation capabilities.</p>
<p>This post is part of a series that will cover what&rsquo;s new in R2.&nbsp; I&rsquo;m sure we&rsquo;ve all seen the awesome news from our product teams on this, but I&rsquo;m going to take a different spin and put a focus on little improvements that make our lives as administrators easier.&nbsp; This post is going to focus on our ability to add Maintenance Windows using PowerShell in R2.&nbsp; This is a pretty welcome addition, as I&rsquo;ve seen the code that goes into making Maintenance Windows a reality in previous releases, and it&rsquo;s certainly much more than one line.&nbsp; This is also amazingly powerful for automation scenarios, as we can programmatically control when clients will perform actions.</p>
<p>Side note here, while on the subject of Maintenance Windows, one other thing I am really excited for in R2 is the ability to define maintenance window usage.&nbsp; With System Center Configuration Manager 2012&nbsp;R2, we can now define separate Maintenance Windows for Software Updates, Operating System Deployment, and everything else.&nbsp; Why is this important?&nbsp; Picture the scenario:&nbsp; I want my clients to install software updates during Maintenance Window A and&nbsp;applications to install during a Maintenance Window B.&nbsp; In the past, the same maintenance window would have allowed both actions, which could lead to undesirable consequences.&nbsp; In R2, I can define separate maintenance windows for each&nbsp;type of activity.&nbsp;&nbsp;Pretty big deal, right?</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0882.image_48820EED.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0882.image_5F00_48820EED.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4532.image_thumb_7EF2C0EF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4532.image_5F00_thumb_5F00_7EF2C0EF.png" alt="image" width="384" height="451" border="0" /></a></p>
<p>Back to the subject, with Configuration Manager 2012 R2, we have new cmdlets to interact with&nbsp;Maintenance Windows.&nbsp; Here, we&rsquo;ll use the <em>Get-Command</em> cmdlet to find all Configuration Manager cmdlets that contain the word &ldquo;<em>MaintenanceWindow&rdquo;</em>:</p>
<pre class="scroll"><code class="csharp">Get-Command &ndash;Module ConfigurationManager | where Name &ndash;like &ldquo;*MaintenanceWindow&rdquo;</code></pre>
<p>Which gives us this:&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/5224.image_4ECB762C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/5224.image_5F00_4ECB762C.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7711.image_thumb_1EA42B69.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7711.image_5F00_thumb_5F00_1EA42B69.png" alt="image" width="836" height="177" border="0" /></a></p>
<p>&nbsp;Cool, now&nbsp;we've got an idea of the commands that are available.&nbsp; Following the normal naming standard, each Powershell cmdlet follows <em>Verb-Noun</em> syntax.&nbsp; Next up, let&rsquo;s get some help on interacting with the <em>New-CMMaintenanceWindow c</em>mdlet using <em>Get-Help</em>:</p>
<pre class="scroll"><code class="csharp">Get-Help New-CMMaintenanceWindow</code></pre>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/1307.image_0B82FEBD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/1307.image_5F00_0B82FEBD.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/0245.image_thumb_692DF9F4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/0245.image_5F00_thumb_5F00_692DF9F4.png" alt="image" width="837" height="331" border="0" /></a></p>
<p>It appears&nbsp;we need to give it a name and a CollectionID to bind the maintenance window to.&nbsp; This seems easy enough &ndash; but wait, what&rsquo;s that Schedule it&rsquo;s looking for?&nbsp; Well, as it turns out it&rsquo;s looking for a ScheduleToken, which we can quickly create using New-CMSchedule cmdlet:</p>
<pre class="scroll"><code class="csharp">Get-Help New-CMSchedule</code></pre>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8524.image_58B588F9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8524.image_5F00_58B588F9.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/8535.image_thumb_6CCEA582.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/8535.image_5F00_thumb_5F00_6CCEA582.png" alt="image" width="839" height="112" border="0" /></a></p>
<p>Easy enough, looks like&nbsp;I just have to feed it a start and end time., though I do have to do just a bit of formatting to make sure I feed it a start and end date.&nbsp; In this case, we&rsquo;ll take the easy road and let .NET do the formatting for us:</p>
<pre class="scroll"><code class="csharp"> #Use the DateTime.Parse() Method to parse in date to a DateTime <br /> $StartTime = [DateTime]::Parse('2013-10-20 05:00') <br /> $EndTime = [DateTime]::Parse('2013-10-20 08:00')<br /> <br /> #Create The ScheduleToken <br /> New-CMSchedule -Nonrecurring -Start $StartTime -End $EndTime</code></pre>
<p>&nbsp;</p>
<p>Scream it from the mountain tops, we have a schedule token!&nbsp; Next, let&rsquo;s pull it all together and create our maintenance window:</p>
<pre class="scroll"><code class="csharp"> #Parameters <br /> $CollectionID = "P200000A"<br /> <br /> #Use the DataTime.Parse() Method to parse in date to a DateTime <br /> $StartTime = [DateTime]::Parse('2013-10-20 05:00') <br /> $EndTime = [DateTime]::Parse('2013-10-20 08:00')<br /> <br /> #Create The ScheduleToken <br /> $Schedule = New-CMSchedule -Nonrecurring -Start $StartTime -End $EndTime<br /> <br /> New-CMMaintenanceWindow -CollectionID $CollectionID -Schedule $Schedule -Name "Heath's Sunday Maintenance"<br /> </code></pre>
<p>When we run the example above, we end up with this:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/7080.image_2ED514C4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/7080.image_5F00_2ED514C4.png"><img style="display: inline;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/37/metablogapi/4278.image_thumb_2C9B1CB9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-37-metablogapi/4278.image_5F00_thumb_5F00_2C9B1CB9.png" alt="image" width="428" height="450" border="0" /></a></p>
<p>Hopefully this post has armed you with the knowledge you need to programmatically create maintenance windows.&nbsp; Can you think of scenarios where this code can be used for new automation abilities?&nbsp; Do you have an awesome use case in mind or feedback?&nbsp; Let me hear it in the comments below!</p>]]></content:encoded>
    </item>
    <item>
      <title>System Center 2012 Configuration Manager Service Pack 1 Cumulative Update 3 Released!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/system-center-2012-configuration-manager-service-pack-1-cumulative-update-3-released</link>
      <pubDate>Tue, 24 Sep 2013 08:43:14 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/09/24/system-center-2012-configuration-manager-service-pack-1-cumulative-update-3-released/</guid>
      <description><![CDATA[On Friday, Cumulative Update 3 was released for System Center 2012 Configuration Manager Service...]]></description>
      <content:encoded><![CDATA[<p>On Friday, Cumulative Update 3 was released for System Center 2012 Configuration Manager Service Pack 1.</p>  <p>Quite a few fixes, check this link out for more details:&#160; <a title="Description of Cumulative Update 3 for System Center 2012 Configuration Manager Service …" href="https://support.microsoft.com/kb/2882125/en-us">Description of Cumulative Update 3 for System Center 2012 Configuration Manager Service …</a></p>  <p>&#160;</p>  <p>HeLaw</p>]]></content:encoded>
    </item>
    <item>
      <title>Welcome!</title>
      <link>https://docs.microsoft.com/archive/blogs/helaw/welcome</link>
      <pubDate>Tue, 03 Sep 2013 19:43:00 GMT</pubDate>
      <dc:creator><![CDATA[HeLaw]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/helaw/2013/09/03/welcome/</guid>
      <description><![CDATA[Greetings All!&nbsp; Heath here.&nbsp; This is my piece of the web where I'll document the cool...]]></description>
      <content:encoded><![CDATA[<p>Greetings All!&nbsp; Heath here.&nbsp; This is my piece of the web where I'll document the cool things I work on and distribute info I come across in my daily duties.</p>
<p>A little bit about me:&nbsp; I'm a System Center Premier Field Engineer based in Kansas City, Missouri.&nbsp; My role is pretty cool in that I get to work with customers on a daily basis doing everything from supporting existing installations to helping them plan and deploy the newest greatest tech.</p>
<p>I promise as I find my rhythm in blogging I'll aim towards at least one solid solution-oriented blog update a month, and hopefully this will also serve as a staging area for other cool, interesting stuff I find along the way.</p>
<p>&nbsp;</p>
<p>Stay tuned!</p>]]></content:encoded>
    </item>
  </channel>
</rss>