<?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>Memoirs of a Consultant</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/janesays/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/janesays/feed.xml</link>
    <description>Great computing starts with a story. Welcome to my personal blog with tales from the field.</description>
    <lastBuildDate>Mon, 30 Jul 2018 14:03:05 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Using SecPol to block access to a specific folder</title>
      <link>https://docs.microsoft.com/archive/blogs/janesays/blockfolderaccess</link>
      <pubDate>Mon, 30 Jul 2018 09:58:29 GMT</pubDate>
      <dc:creator><![CDATA[Jay Hijazi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/janesays/?p=305</guid>
      <description><![CDATA[Customers operating in high security environments, usually want to block access to specific folders....]]></description>
      <content:encoded><![CDATA[<blockquote>Customers operating in high security environments, usually want to block access to specific folders. Using this method I was able to safely remove the write access from users without harming the functionality of Windows. BUT!!!! Please use at your own risk, and test in your own labs before executing and implementing. The use of SecPol to achieve this was passed onto me by friend, so shoutout to them :)</blockquote>
&nbsp;

<img width="812" height="565" class="alignnone wp-image-325 size-full" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/a.png" />
<ul>
 	<li>Launch MMC (Run &gt; MMC.exe)</li>
 	<li>Add Security Templates (File &gt; Add/Remove Snap-in… &gt; Security Templates)</li>
</ul>
&nbsp;

<img width="688" height="167" class="alignnone wp-image-315 size-full" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/b.png" />

&nbsp;
<ul>
 	<li>You’ll have to set the source path to C:\Windows\security\templates
<ul>
 	<li>Delete the default generated source (Right click the source and delete)</li>
 	<li>Then right click and click on “New Template Search Path…”
<ul>
 	<li>Set it to: C:\Windows\security\templates</li>
</ul>
</li>
</ul>
</li>
</ul>
&nbsp;

<img width="1697" height="1043" class="alignnone wp-image-335 size-full" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/c.png" />
<ul>
 	<li>Create a new template (Right click on the source &gt; New Template)
<ul>
 	<li>Name it “BlockFavoritesFolderAccess”</li>
</ul>
</li>
</ul>
&nbsp;

<img width="607" height="328" class="alignnone wp-image-345 size-full" alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/d.png" />
<ul>
 	<li>Expand the new directory and select file system folder.
<ul>
 	<li>Either right click on it or click on Actions &gt; Add File…</li>
</ul>
</li>
</ul>
&nbsp;

<img width="406" height="404" class="alignnone wp-image-355 " alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/e.png" />
<ul>
 	<li>Navigate to the user’s specific profile. (Users &gt; Username &gt; Favorites)</li>
</ul>
&nbsp;

<img width="409" height="506" class="alignnone wp-image-365 " alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/f.png" />
<ul>
 	<li>Add or select the user or group, set the permission, and click OK
<ul>
 	<li>Allow Read</li>
 	<li>Deny Write</li>
 	<li>Uncheck everything else</li>
</ul>
</li>
</ul>
&nbsp;

<img width="419" height="416" class="alignnone wp-image-375 " alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/g.png" />
<ul>
 	<li>Select “Replace existing permission on all sub folders and files with inheritable permissions, and click OK</li>
</ul>
&nbsp;

<img width="439" height="345" class="alignnone wp-image-385 " alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/h.png" />
<ul>
 	<li>Close out of MMC (no need to “Save console settings to Console”</li>
 	<li>Then select yes to save the newly created .inf file
<em>Note: Notice where the .inf file is stored.</em></li>
</ul>
&nbsp;

<strong><u>Now you have an inf file to run Secedit against, which will set the decretory ACLs you specified.</u></strong>

Create a script/batch file or manually copy that newly created inf file into C:\Windows\Security\Templates of the machine your targeting, and run the following command:
<ul>
 	<li>Open CMD (Admin)
<ul>
 	<li>Navigate to C:\Windows\Security\Templates</li>
 	<li>Then Run:
<ul>
 	<li>secedit /configure /db BlockFavoritesFolderAccess.sdb /cfg BlockFavoritesFolderAccess.inf /overwrite /log BlockFavoritesFolderAccess.log</li>
 	<li>Type “y” for Yes to accept the override</li>
</ul>
</li>
</ul>
</li>
</ul>
<img width="756" height="395" class="alignnone wp-image-395 " alt="" src="https://msdnshared.blob.core.windows.net/media/2018/05/I.png" />]]></content:encoded>
    </item>
    <item>
      <title>WaaS (Windows as a Service) FAQ</title>
      <link>https://docs.microsoft.com/archive/blogs/janesays/waas-windows-as-a-service-faq</link>
      <pubDate>Sun, 13 May 2018 18:57:52 GMT</pubDate>
      <dc:creator><![CDATA[Jay Hijazi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/janesays/?p=205</guid>
      <description><![CDATA[I put together this comprehensive WaaS FAQ. These are the questions that I have come across in the...]]></description>
      <content:encoded><![CDATA[<blockquote><span style="color: #000000;font-family: Calibri">I put together this comprehensive WaaS FAQ. These are the questions that I have come across in the field that are either scattered in more than one place or may not be documented explicitly. My main goal for this FAQ is to help you get comfortable with the idea of WaaS, which hopefully in turn will allow you to have that conversation with your peers and superiors. In my experience the beginning discussions of adopting WaaS are just as hard as the actual implementation phase. It is a very new way of doing things, and customers typically have the most peculiar questions with a lot of resistance upfront. The idea is for this FAQ to capture as much of that as possible and serve a single area information for those who need help or are interested in this topic. This post will be a living document and will continually be edited and updated.</span></blockquote>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">What is WaaS?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">“Windows as a Service” is really about simplifying the overall process of how to get the latest versions of Windows to your users. Instead of the fork-lift approach of building and then deploying, the process has become a lot more streamlined, where the building and deploying efforts are much smaller, but ongoing/constant. Think of your mobile device getting updates; iOS 11.01 to 11.02. No wipe and reloads, golden images, thick clients, and so on. Once on Windows 10 SAC (Semi Annual Channel – Formally Current Branch), the next version you get can be as simple as getting a patch like update from either Windows Updates or SCCM (assuming enterprise).</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">Give it to me straight, what does this mean for users?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Two (semi-annual) feature updates a year. One around March, and the other around September.</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">What is a feature update?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Targeted twice per year, a feature update is a patch-like package that can be deployed like you deploy any other Windows patch today. With this is newish direction, Microsoft will always be working on new features, that either don’t make the cut, or end up making in the next feature update. Expect subtle changes, not major. Think Windows 7 to SP1 not Windows XP to Windows 7. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">How many features updates should we expect a year?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">As mentioned above, <strong>two</strong>. One near the beginning of the year dubbed “2-Digit Year + 03” and another one later on in the year dubbed “2-digit year + 09”. As you may have guessed, the "03" and "09" in name refers to the months "March" and September".  Examples: 1703 (March of 2017) and 1709 (September of 2017). Note: This does not mean they will come out exactly in these months, but close to it. The fixed naming convention is for consistency.</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">Up to how many feature updates can a single machine/user skip, not in terms of support, but in terms of requisitions for going from one OS level to the other?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">As of right now (with no known plans to change this) any Win10 version can be upgraded to any newer Win10 version. So, there is no limit as to the number of versions that can be skipped (outside of supportability for the older version). </span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Keep in mind the following: </span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">When skipping many versions, this may lead to additional hurdles due to the big jump.</span></li>
 	<li><span style="color: #000000;font-family: Calibri">Another thing to keep in mind is the method you use to upgrade. For example, W10 1507 is not supported on SCCM 1802. So even though you can technically upgrade from any W10 version to any newer W10 version, the method of upgrade may be limited and not compatible. </span></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">What is a UWP App?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">A UWP (Universal Windows Platform) App is as the name the suggests; an application built on a platform that can be universally used across all your Windows 10 devices. All UWP apps are distributed as an .AppX package and are disturbed through the Windows Store. Think how of how the same application can work on both an iPad, or an iPhone.</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">Can a UWP App be Removed?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri"><strong>Yes</strong>. So, some of these apps come pre-installed, and among those are some that kind of feel built-in. <span> </span>For the ones you have either downloaded yourself, or for some of the ones that have come pre-installed, you can simply remove them via the Windows Store, or by right clicking the app itself, and clicking on uninstall. For the Windows 10 built-in apps like Photos, Maps, Mail and Calendar, those require some more tinkering like running a PS script. I don’t recommend this route, instead I recommend blocking them via policy. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">Can a UWP App be Blocked?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Yes. The best way to accomplish this is to use the built-in AppLocker tool (only available on the Enterprise version). This feature is configured via policy. Look for a guide to be posted on my blog soon. Until then, many tutorials out there on the net. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">How are UWP App’s updated?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Through the Windows Store, and while the “Store” is the frontend platform/GUI, UWP App updates do also go through the Windows Update APIs.</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">What happened to “Windows Photo Viewer” (formally known as “Windows Picture and Fax Viewer”), which was the default photo viewer on Windows since XP?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">“Windows Photo Viewer” is no longer the default photo viewer on Windows 10. The “Photos” UWP application that comes preinstalled with the OS has taken its place. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">Can Cortona be blocked? </span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Yes. Via group policy, under: Computer Configuration &gt; Administrative Templates &gt; Windows Components &gt; Search. Locate Allow Cortana and double-click on it to open the relevant policy. Select Disabled.</span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">I thought “Paint” was R.I.P?</span></strong></span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">It was, then it wasn’t, and now who knows. Sarcasm aside, Paint is still available on Windows 10. The idea for now is that Microsoft plans to keep the original “Paint” as part of the system, but at some point, it will be removed from the OS officially, and will be available for download through the “Windows Store”. No timeframe has been provided for this move yet. “Paint 3D” which has been available since W10 1709 is considered to be its more modern replacement. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">Can’t I just install the Long-term servicing branch/channel and call it a day?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">This is <strong>not</strong> a solution. The rule of thumb is, if the machine has an Office applications on it, then it most likely should not be running LTSC. This servicing channel is meant for really specific and special cases. More importantly you may eventually run into a hardware compatibility issue when it comes to things like Silicon support for example. Again, this servicing channel is meant for machines that are not meant to be updated or changed frequently. Think specific computer for a line machine at the factory that is off the network, that may have a computer refresh cycle every 5-10 years. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">How will Microsoft handle LTSC support and releases?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Microsoft will offer a new LTSC release every 2-3 years. This channel will support the currently released silicon at the time of release. As future silicon generations are released, you will need a newer version of Windows 10 to support the newly released silicon. So, if you receive new hardware, you will need to wait for next release of LTSC for support on the new silicon. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><span style="color: #002060"><strong><span style="font-family: Segoe UI Semibold">Can you upgrade from LTSC to SAC (LTSB to CB)?</span></strong></span>
<ul>
 	<li><span style="font-family: Calibri"><span style="color: #000000">Yes. In fact, you can do an in-place upgrade, which means the switch can be made without loosing or moving any user data. This path is supported. <span> </span>(</span><a href="https://docs.microsoft.com/en-us/windows/deployment/update/waas-overview">https://docs.microsoft.com/en-us/windows/deployment/update/waas-overview</a></span><span style="color: #000000;font-family: Calibri">) </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">Does Edge need Internet Explorer to Function?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Edge does not need IE to function (Technically), but for the time being, the combo of having both of them is something I recommend especially for Enterprises in terms of experience. If you wanted to you can disable IE 11, and Edge would work just fine. No dependencies.</span></li>
 	<li><span style="color: #000000;font-family: Calibri">However, there are aspects that have been designed to work together:</span>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">For example: Using the Enterprise Mode Site List, you can dictate which sites Microsoft Edge should open in Internet Explorer 11. For those sites, they will essentially open automatically in IE 11. Depending on configuration you select, a user will either be warned about it, or it will just happen.</span></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">What type of Application is Edge?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Yes, it’s true, Edge is a UWP app. It is not available via the store per se, but built-in into the OS. </span></li>
</ul>
</li>
</ul>
<ul>
 	<li><strong><span style="color: #002060;font-family: Segoe UI Semibold">How does Edge receive updates?</span></strong>
<ul>
 	<li><span style="color: #000000;font-family: Calibri">Through Windows Update. Security updates are released every two to four weeks, and the bigger updates are pushed out as part of W10 feature updates.</span></li>
</ul>
</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Compare all properties of two objects in Windows PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/janesays/compare-all-properties-of-two-objects-in-windows-powershell</link>
      <pubDate>Tue, 25 Apr 2017 00:12:54 GMT</pubDate>
      <dc:creator><![CDATA[Jamie Nelson [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/janesays/?p=45</guid>
      <description><![CDATA[I've always said that the Compare-Object cmdlet, which has been around forever in Windows...]]></description>
      <content:encoded><![CDATA[I've always said that the <em>Compare-Object</em> cmdle</code>t, which has been around forever in Windows PowerShell, is one of the most flexible and useful cmdlets out there. If you're an IT Professional of any kind, whether you work with Exchange Server or manage file servers, <em>Compare-Object</em> can make you look like a genius. In the past, I've used it for a number of random tasks, from comparing Active Directory group memberships to detecting changed files/folders on a file server.

The <em>Compare-Object</em> cmdlet really shines when you're comparing collections of like objects, and, although it allows you to also compare based on specific object properties, that sometimes leaves a little to be desired. Take for instance, the comparison of two Active Directory user objects. It is fairly common for an administrator to come across scenarios where you need to compare two Active Directory users and find the specific differences. Usually, you're troubleshooting something strange that happens for one user but not the other. Often times it may come down to how particular attributes have been configured on the user object. So, <em>Compare-Object</em> to the rescue, right? Not so fast.

[ps]
$ad1 = Get-ADUser amelia.mitchell -Properties *
$ad2 = Get-ADUser carolyn.quinn -Properties *
Compare-Object $ad1 $ad2
[/ps]

Running this code gives you the following output. Not exactly helpful. Of course, we know that the identity of the reference object and difference object will not be the same.

<pre>
InputObject						SideIndicator
-----------						-------------
CN=carolyn.quinn,OU=Users,DC=contosocorp,DC=us		=&gt;           
CN=amelia.mitchell,OU=Users,DC=contosocorp,DC=us	&lt;=
</pre>

To take the comparison one step further, you can use the -Property parameter. This allows you to compare one or more specific parameters. More helpful than the last example, but it assumes you know where the differences between the objects lie.

[ps]
$ad1 = Get-ADUser amelia.mitchell -Properties *
$ad2 = Get-ADUser carolyn.quinn -Properties *
Compare-Object $ad1 $ad2 -Property title,department
[/ps]

Okay, this is definitely more helpful. We can see by the output below that the user objects have different title and department attributes. However, we had to specify the attributes we wanted to compare. If we wanted to compare all attributes, this would be a very long command or a very manual process to compare each attribute.

<pre>
title             department SideIndicator
-----             ---------- -------------
Finance Associate Finance    =&gt;           
Accountant II     Accounting &lt;=
</pre>

So, with a little extra logic, we can do this pretty easily. First, we define the <em>Compare-ObjectProperties</em> function. That function will take any two source objects and get a unique list of all of the property names of both objects we're comparing. This is necessary because objects aren't always going to have the same set of attributes. When that is the case, we want to see where one has a null value and the other is populated. With the list of unique property names, our function can iteratively process them through <em>Compare-Object</em> and only return the properties that are different.

[ps]
Function Compare-ObjectProperties {
    Param(
        [PSObject]$ReferenceObject,
        [PSObject]$DifferenceObject  
    )
    $objprops = $ReferenceObject | Get-Member -MemberType Property,NoteProperty | % Name
    $objprops += $DifferenceObject | Get-Member -MemberType Property,NoteProperty | % Name
    $objprops = $objprops | Sort | Select -Unique
    $diffs = @()
    foreach ($objprop in $objprops) {
        $diff = Compare-Object $ReferenceObject $DifferenceObject -Property $objprop
        if ($diff) {            
            $diffprops = @{
                PropertyName=$objprop
                RefValue=($diff | ? {$_.SideIndicator -eq '&lt;='} | % $($objprop))
                DiffValue=($diff | ? {$_.SideIndicator -eq '=&gt;'} | % $($objprop))
            }
            $diffs += New-Object PSObject -Property $diffprops
        }        
    }
    if ($diffs) {return ($diffs | Select PropertyName,RefValue,DiffValue)}     
}

$ad1 = Get-ADUser amelia.mitchell -Properties *
$ad2 = Get-ADUser carolyn.quinn -Properties *
Compare-ObjectProperties $ad1 $ad2
[/ps]

Running the above code produces the following output. This is definitely what we're looking for.

<pre>
PropertyName			RefValue						DiffValue
------------			--------						---------
CanonicalName			contosocorp.us/Users/amelia.mitchell			contosocorp.us/Users/carolyn.quinn
CN				amelia.mitchell						carolyn.quinn
Created				2/16/2017 9:31:12 AM					2/16/2017 9:31:15 AM
createTimeStamp			2/16/2017 9:31:12 AM					2/16/2017 9:31:15 AM
Department			Accounting						Finance
DisplayName			Amelia Mitchell						Carolyn Quinn
DistinguishedName		CN=amelia.mitchell,OU=Users,DC=contosocorp,DC=us	CN=carolyn.quinn,OU=Users,DC=contosocorp,DC=us
dSCorePropagationData		{2/16/2017 9:53:26 AM, 2/16/2017 9:31:12 AM,...		{2/16/2017 9:53:25 AM, 2/16/2017 9:31:15 AM, 12/31/1600 6:00:0...
employeeType			FullTime						Contractor
GivenName			Amelia							Carolyn
Manager				CN=christopher.walsh,OU=Users,DC=contosocorp,DC=us
MemberOf			{CN=Group8842,OU=Groups,DC=contosocorp,DC=us...		{CN=Group8896,OU=Groups,DC=contosocorp,DC=us...
Modified			4/24/2017 7:51:46 AM					4/24/2017 7:51:56 AM
modifyTimeStamp			4/24/2017 7:51:46 AM					4/24/2017 7:51:56 AM
Name				amelia.mitchell						carolyn.quinn
ObjectGUID			e3436c96-ac59-4b0a-a2cd-cea586676089			27abcbb9-57f8-4e4d-8f87-a5ee0e3d6ddd
objectSid			S-1-5-21-827217070-865584383-1086049070-1208 		S-1-5-21-827217070-865584383-1086049070-1249
Office				LON							NYC
PasswordLastSet			2/16/2017 9:31:12 AM					2/16/2017 9:31:15 AM
physicalDeliveryOfficeName	LON							NYC
pwdLastSet			131317326721610425					131317326757222285
SamAccountName			amelia.mitchell						carolyn.quinn
SID				S-1-5-21-827217070-865584383-1086049070-1208		S-1-5-21-827217070-865584383-1086049070-1249
sn				Mitchell						Quinn
Surname				Mitchell						Quinn
Title				Accountant II						Finance Associate
UserPrincipalName		amelia.mitchell@contosocorp.us				carolyn.quinn@contosocorp.us
uSNChanged			372797							372798
uSNCreated			17224							17511
whenChanged			4/24/2017 7:51:46 AM					4/24/2017 7:51:56 AM
whenCreated			2/16/2017 9:31:12 AM					2/16/2017 9:31:15 AM
</pre>

One of the best things about this function is that you're not limited to comparing Active Directory user objects. You can use any two objects you want, and they don't even have to be the same type of object! Try for yourself using the example below, which compares a file object to a service. Granted, there probably aren't many use cases for such a scenario, but you never know. The capability is there nonetheless.

[ps]
$file = Get-Item -Path C:\Windows\System32\notepad.exe
$service = Get-Service -Name WinRM
Compare-ObjectProperties $file $service
[/ps]

Happy PowerShell'ing. See you next time.
]]></content:encoded>
    </item>
  </channel>
</rss>