{"id":16861,"date":"2010-10-10T00:01:00","date_gmt":"2010-10-10T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/10\/10\/weekend-scripter-use-powershell-to-compare-two-snapshots-of-running-processes\/"},"modified":"2010-10-10T00:01:00","modified_gmt":"2010-10-10T00:01:00","slug":"weekend-scripter-use-powershell-to-compare-two-snapshots-of-running-processes","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/weekend-scripter-use-powershell-to-compare-two-snapshots-of-running-processes\/","title":{"rendered":"Weekend Scripter: Use PowerShell to Compare Two Snapshots of Running Processes"},"content":{"rendered":"<p><strong>Summary<\/strong>: Microsoft Scripting Guy Ed Wilson shows how to use Windows PowerShell to compare snapshots of running processes in this step-by-step article.<\/p>\n<p>&nbsp;<\/p>\n<p>Microsoft Scripting Guy Ed Wilson here. The road seems to stretch on indefinitely. Parallel lines of concrete, surrounded by tall dancing pine trees and bordered by freshly mown grass, continue ahead as far as the eye can see. Physics tells us that two parallel lines will continue towards infinity without touching. The person who came up with that idea must have been driving on the interstate between Charlotte, North Carolina and Columbia, South Carolina &ndash; easily one of the most boring roads in the United States of America. Don&rsquo;t get me wrong &ndash; I like trees. In fact, I love trees; I just prefer trees with more character than the tall, wispy, stick like Southern Pine tree. Palm trees are my current favorite tree. Give me a place with lots of palm trees, and I am at home. <\/p>\n<p>Anyway, I am in my usual passenger seat with my laptop plugged into my power inverter and the Windows PowerShell console open in my 64-bit Windows 7 operating system. We are on our way to speak at another SQL Saturday conference. I decided to play around with the <strong>compare<\/strong> object. <\/p>\n<p>The first thing I do is store the <strong>process<\/strong> object in a variable. When I am working interactively in the Windows PowerShell console, I quite often use aliases. Just like my real name is not Ed, the real name for the <strong>Get-Process<\/strong> cmdlet is <strong>Get-Process<\/strong> and not <strong>gps<\/strong>. But unlike the command <strong>gps<\/strong>, I am not going to tell you what my real name is. <\/p>\n<p>All Windows PowerShell cmdlets return objects. The objects that I am going to store in the <strong>$a<\/strong> variable are all instances of the <strong>process<\/strong> class, which is found in the <strong>System.Diagnostics<\/strong> .NET Framework namespace. Namespaces group related objects in the .NET Framework. At times, the namespaces make sense, such as <strong>system.io<\/strong>. At other times, the names are not so obvious. In our process example, <strong>System.Diagnostics.Process<\/strong> tells us both the namespace and the class name. Often this is the way I choose to refer to .NET Framework classes because I must know the namespace in which the class resides. Therefore, if I keep saying <strong>System.Diagnostics.Process<\/strong> over and over again, eventually I will remember where that class resides, and the next time I need to use it, I will automatically know where the class is found. Of course I can open up MSDN, search for the class name, and eventually find the class reference documentation, assuming I have access to the Internet. However, in the United States, we do not even have ubiquitous cell phone coverage, much less universal freely accessible wireless network access. Therefore, when on the road, I am on my own. Luckily, Windows PowerShell also has the <strong>Get-Member<\/strong> cmdlet that will tell me information about the class and its members. <\/p>\n<p>I create the <strong>$a<\/strong> variable and store the resulting objects from the <strong>Get-Process<\/strong> cmdlet in the variable. This is shown here where I use <strong>gps<\/strong> (the alias for <strong>Get-Process<\/strong>):<\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">$a = gps<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>Next, I start a copy of Notepad. I do this by typing the word <i>notepad<\/i>. Windows PowerShell sees the word <i>notepad<\/i>, and recognizes that it is not inside a pair of quotation marks, thereby therefore attempting to call a command named <strong>notepad<\/strong>. It finds notepad.exe, and launches it. When I have a new process running (notepad.exe), I take another snapshot of all the processes running on the computer by calling the <strong>Get-Process<\/strong> cmdlet again. This time, I will store the contents into a new variable called <strong>$b<\/strong>. This section of the code is shown here: <\/p>\n<blockquote><p><span style=\"line-height: normal;font-family:;list-style-type: disc\"><span style=\"font-family: Arial\"><span><span style=\"font-size: 10pt;color: #000000\">&nbsp;<\/span><\/span><span style=\"font-size: 10pt;color: #000000\">notepad         <br \/><span>&nbsp;<\/span>$b = gps<\/span><\/span><\/span><\/p><\/blockquote>\n<p>Now compare the two objects. To compare two objects, use the <strong>Compare-Object<\/strong> cmdlet. The <strong>reference<\/strong> object is the baseline configuration, and the <strong>difference<\/strong> object is the object that has changed. My baseline is stored in the <strong>$a<\/strong> variable, and the process snapshot I took after starting Notepad is stored in the <strong>$b<\/strong> variable. This command and the associated output are shown here:<\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">Compare-Object -ReferenceObject $a -DifferenceObject $b           <br \/>PS C:\\&gt; Compare-Object -ReferenceObject $a -DifferenceObject $b            <\/p>\n<p>InputObject<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>SideIndicator            <br \/>&#8212;&#8212;&#8212;&#8211;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;&#8212;-            <br \/>System.Diagnostics.Process (notepad)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>=&gt;            <br \/>System.Diagnostics.Process (sppsvc)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;=            <\/p>\n<p>PS C:\\&gt;<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>The output tells me there was a process called <strong>sppsvc<\/strong> that was running in the baseline snapshot, but is not running after I launched Notepad. Let&rsquo;s explore the differences. To examine the <strong>notepad<\/strong> process, I need to retrieve it from the collection of processes that are stored in the <strong>$b<\/strong> variable. To do this, I use the <strong>Where-Object<\/strong> cmdlet. The alias for <strong>Where-Object<\/strong> is the question mark. This can be a bit confusing because in the past the question mark has always been used for help, but it kind of makes sense because we are asking the question, &ldquo;Where is ________?&rdquo;. Next, we need to retrieve the object that has a name that is equal to <strong>notepad<\/strong>. The <strong>name<\/strong> property of the <strong>process<\/strong> object was discovered via the <strong>Get-Member<\/strong> cmdlet. Unfortunately, the output from the <strong>Get-Process<\/strong> cmdlet changes the <strong>name<\/strong> property to <strong>ProcessName<\/strong>. In fact, many of the column headings that are displayed in the <strong>Get-Process<\/strong> output are aliases. This is shown here: <\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">PS C:\\&gt; $b | Get-Member           <\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: System.Diagnostics.Process            <\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Definition            <br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-            <br \/>Handles<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>Handles = Handlecount            <br \/>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>Name = ProcessName            <br \/>NPM<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>NPM = NonpagedSystemMemorySize            <br \/>PM<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>PM = PagedMemorySize            <br \/>VM<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>VM = VirtualMemorySize            <br \/>WS<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>AliasProperty<span>&nbsp; <\/span>WS = WorkingSet<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>Now to hone in on the <strong>notepad<\/strong> process, I pipe the process objects that are stored in the <strong>$b<\/strong> variable to the <strong>Where-Object <\/strong>cmdlet (the <strong>?<\/strong> is an alias for the <strong>Where-Object<\/strong>) and filter out the processes with the <strong>name<\/strong> property that is equal to <strong>notepad<\/strong>. This command and its results are shown here:<\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span><span style=\"font-size: 10pt;color: #000000\">&nbsp;<\/span><\/span><span style=\"font-size: 10pt;color: #000000\">PS C:\\&gt; $b | ? { $_.name -eq &#8216;notepad&#8217; }           <\/p>\n<p>Handles<span>&nbsp; <\/span>NPM(K)<span>&nbsp;&nbsp;&nbsp; <\/span>PM(K)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>WS(K) VM(M) <span>&nbsp; <\/span>CPU(s)<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Id ProcessName            <br \/>&#8212;&#8212;-<span>&nbsp; <\/span>&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211; &#8212;&#8211;<span>&nbsp;&nbsp; <\/span>&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212; &#8212;&#8212;&#8212;&#8211;            <br \/><span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>66<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>1428<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>4568<span>&nbsp;&nbsp;&nbsp; <\/span>62<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0.03<span>&nbsp;&nbsp; <\/span>5980 notepad            <\/p>\n<p>PS C:\\&gt;<\/span><\/span>        <\/p>\n<p><\/span><\/p>\n<\/blockquote>\n<p>On the other side of our <strong>Compare-Object<\/strong> results was a process named <strong>sppsvc<\/strong>. To dig into it, I use the same basic command that I used for returning the <strong>process<\/strong> object for the <strong>notepad<\/strong> process. The command is shown here:<\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">PS C:\\&gt; $a | ? { $_.name -eq &#8216;sppsvc&#8217; }           <\/p>\n<p>Handles<span>&nbsp; <\/span>NPM(K)<span>&nbsp;&nbsp;&nbsp; <\/span>PM(K)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>WS(K) VM(M)<span>&nbsp;&nbsp; <\/span>CPU(s)<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Id ProcessName            <br \/>&#8212;&#8212;- <span>&nbsp;<\/span>&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211; &#8212;&#8211;<span>&nbsp;&nbsp; <\/span>&#8212;&#8212;<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212; &#8212;&#8212;&#8212;&#8211;            <br \/><span>&nbsp;&nbsp;&nbsp; <\/span>163<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>8<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>2680<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>4996<span>&nbsp;&nbsp;&nbsp; <\/span>40<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>4012 sppsvc            <\/p>\n<p>PS C:\\&gt;<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>More information can be returned from a process object than just the seven default properties shown above. To see all the properties and their associated values, I pipe the resulting object to the <strong>Format-List<\/strong> cmdlet and choose all the properties (<strong>fl *<\/strong> is the alias for this command). The command is shown here: <\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">$a | ? { $_.name -eq &#8216;sppsvc&#8217; } | fl *<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>The output is rather long, and to conserve space I have included the screen shot shown in the following image.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0042.WES-10-10-10-1_01B8D06F.jpg\"><img decoding=\"async\" title=\"Image of output\" style=\"border-right: 0px;padding-right: 0px;border-top: 0px;padding-left: 0px;border-left: 0px;padding-top: 0px;border-bottom: 0px\" height=\"342\" alt=\"Image of output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0447.WES-10-10-10-1_thumb_11786573.jpg\" width=\"604\" border=\"0\" \/><\/a><\/p>\n<p>One property that is a little unique is the <strong>Startinfo<\/strong> property. It does not contain a string or an integer; rather, it contains another object. I use the command seen here to view the <strong>Startinfo<\/strong> information. <\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"margin: 4pt 0in 7pt;line-height: 10pt;list-style-type: disc\"><span><span style=\"font-family: 'Lucida Sans Typewriter'\"><span style=\"font-size: 10pt;color: #000000\">PS C:\\&gt; ($a | ? { $_.name -eq &#8216;sppsvc&#8217; }).Startinfo           <\/p>\n<p>Verb<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>Arguments<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>CreateNoWindow<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: False            <br \/>EnvironmentVariables<span>&nbsp;&nbsp;&nbsp; <\/span>: {temp, processor_revision, processor_level, logonserver&#8230;}            <br \/>RedirectStandardInput<span>&nbsp;&nbsp; <\/span>: False            <br \/>RedirectStandardOutput<span>&nbsp; <\/span>: False            <br \/>RedirectStandardError<span>&nbsp;&nbsp; <\/span>: False            <br \/>StandardErrorEncoding<span>&nbsp;&nbsp; <\/span>:            <br \/>StandardOutputEncoding<span>&nbsp; <\/span>:            <br \/>UseShellExecute<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: True            <br \/>Verbs<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: {}            <br \/>UserName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>Password<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>Domain<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>LoadUserProfile<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: False            <br \/>FileName<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>WorkingDirectory<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>:            <br \/>ErrorDialog<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: False            <br \/>ErrorDialogParentHandle : 0            <br \/>WindowStyle<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: Normal            <\/p>\n<p>PS C:\\&gt;<\/span><\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 8pt;line-height: 13.25pt;list-style-type: disc\"><span><span style=\"font-family: Arial\"><span style=\"font-size: 10pt;color: #000000\">&nbsp;<\/span><\/span><\/span><\/p>\n<\/blockquote>\n<p>We are pulling into Columbia, South Carolina. I need to hibernate my laptop so that I can prepare to evacuate the motor vehicle. Join me tomorrow for another Weekend Scripter article. <\/p>\n<p>We would love for you follow us on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\">Twitter<\/a> and <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\">Facebook<\/a>. If you have any questions, send email to us at <a href=\"mailto:scripter@microsoft.com\">scripter@microsoft.com<\/a>, or post your questions on the <a href=\"http:\/\/bit.ly\/scriptingforum\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Ed Wilson and Craig Liebendorfer, Scripting Guys<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Microsoft Scripting Guy Ed Wilson shows how to use Windows PowerShell to compare snapshots of running processes in this step-by-step article. &nbsp; Microsoft Scripting Guy Ed Wilson here. The road seems to stretch on indefinitely. Parallel lines of concrete, surrounded by tall dancing pine trees and bordered by freshly mown grass, continue ahead as [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[51,31,87,3,4,61,45],"class_list":["post-16861","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-getting-started","tag-operating-system","tag-processes","tag-scripting-guy","tag-scripting-techniques","tag-weekend-scripter","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft Scripting Guy Ed Wilson shows how to use Windows PowerShell to compare snapshots of running processes in this step-by-step article. &nbsp; Microsoft Scripting Guy Ed Wilson here. The road seems to stretch on indefinitely. Parallel lines of concrete, surrounded by tall dancing pine trees and bordered by freshly mown grass, continue ahead as [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=16861"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16861\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=16861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=16861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=16861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}