{"id":502,"date":"2014-10-23T00:01:00","date_gmt":"2014-10-23T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2014\/10\/23\/my-path-to-a-powershell-4-0-upgrade\/"},"modified":"2014-10-23T00:01:00","modified_gmt":"2014-10-23T00:01:00","slug":"my-path-to-a-powershell-4-0-upgrade","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/my-path-to-a-powershell-4-0-upgrade\/","title":{"rendered":"My Path to a PowerShell 4.0 Upgrade"},"content":{"rendered":"<p><b style=\"font-size:12px\">Summary<\/b><span style=\"font-size:12px\">: Microsoft IIS MVP, Terri Donahue, talks about her path to upgrading to Windows PowerShell&nbsp;4.0.<\/span><\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. Welcome new guest blogger, Terri Donahue.<\/p>\n<p style=\"margin-left:30px\">Microsoft IIS MVP, Terri Donahue is a systems administrator who has been supporting Internet Information Services (IIS) since version&nbsp;4.0. Through the years, she has had extensive hands-on experience with many web servers including Lotus Domino, Apache, and of course, IIS. She has a passion for helping people solve technology-related problems. She is focusing on improving her Windows PowerShell skills. She regularly attends the Charlotte PowerShell User Group and volunteers at PowerShell Saturday in Charlotte.<\/p>\n<p>Take it away, Terri&#8230;<\/p>\n<p>Windows PowerShell&nbsp;4.0 is backward-compatible with Windows PowerShell&nbsp;3.0 and Windows PowerShell&nbsp;2.0. This means that upgrading to&nbsp;Windows PowerShell 4.0 should not be governed by the necessity to maintain multiple versions of scripts for the different versions of Windows PowerShell. The decision should be determined by the new features that PowerShell&nbsp;4.0 can provide. Windows PowerShell&nbsp;2.0 brought us remoting, and Windows PowerShell&nbsp;3.0 brought us IntelliSense and lots of new cmdlets. As everyone has heard, Desired State Configuration (DSC), is the biggest addition to Windows PowerShell&nbsp;4.0.<\/p>\n<p>However, there are more new features in Windows PowerShell&nbsp;4.0 than DSC. The <b>Save-Help<\/b> cmdlet can come in very handy for downloading a local copy of Help for a given module or modules for use on a computer that doesn&rsquo;t have Internet access. I imagine this will be a bigger plus than is originally realized&mdash;as the offline Web PI command-line utility has been.<\/p>\n<p>One thing to note is that upgrading to Windows PowerShell&nbsp;4.0 does not ensure that all the new cmdlets will work exactly the same on the upgraded systems. This is the same issue that I encountered when I installed Windows Framework&nbsp;3.0 on Windows Server&nbsp;2008&nbsp;R2.&nbsp;<span style=\"font-size:12px\">A script that correctly queried a certificate property on my computer running Windows&nbsp;8 (native Windows PowerShell&nbsp;3.0) returned the same status code regardless of the setting of the property on a server that had been upgraded to WMF&nbsp;3.0. <\/span><\/p>\n<p><span style=\"font-size:12px\">To ensure that it was an operating system dependency rather than an issue with the cmdlet, I used the old school method of querying with crypt32.dll rather than the Windows PowerShell cmdlet. Both methods had the same results on the upgraded server running Windows Server&nbsp;2008 R2.<\/span><\/p>\n<p>I am an administrator who hacks around at script, including Windows PowerShell writing, so being able to debug my script is a necessity. The debugger has also been enhanced in Windows PowerShell&nbsp;4.0. It now allows for debugging a script running on a remote computer, and it even preserves the debugging session when the remote session is disconnected and later reconnected.<\/p>\n<p>Based on my research, I decided to upgrade my servers running Windows Server&nbsp;2012 and Windows Server&nbsp;2008 R2 to Windows PowerShell&nbsp;4.0.<\/p>\n<p>On a computer running Windows 8.1, there are 548 cmdlets. On a server running Windows Server&nbsp;2012&nbsp;R2, there are 693 cmdlets. As you can see from the following table, the number of cmdlets is greatly reduced when you perform an upgrade to a given Windows PowerShell version on a different operating system compared to the native installation on a computer. Therefore, that should not be the driving factor behind deciding to upgrade.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"213\" valign=\"top\">\n<p><b><span>&nbsp;&nbsp;<\/span>Server version<\/b><\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><b><span>&nbsp;&nbsp;<\/span>Cmdlets with WMF&nbsp;3.0<\/b><\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><b><span>&nbsp; C<\/span>mdlets with WMF&nbsp;4.0<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>Windows Server 2008 R2<\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>313<\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>317<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>Windows Server 2012<\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>440<\/p>\n<\/td>\n<td width=\"213\" valign=\"top\">\n<p><span>&nbsp;&nbsp;<\/span>444<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Be sure to read and follow the steps to install WMF&nbsp;4.0 on your given operating system. I had no problem on my server running Windows Server&nbsp;2008 R2, but on the server running Windows Server&nbsp;2012, I kept running into this error message:<\/p>\n<p style=\"margin-left:30px\"><b>Windows update could not be installed because of error&nbsp;2148098050 &quot;The certificate for the signer of the message is invalid or not found.&quot;<\/b><\/p>\n<p>The fix was to download the correct installer, which to me was not apparent. The the selected check box next to the installer name in the following image shows the correct installer for Windows Server&nbsp;2012:<\/p>\n<p><a href=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/76\/18\/Capture%20A.PNG\"><img decoding=\"async\" src=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/76\/18\/Capture%20A.PNG\" alt=\"Image of list\" title=\"Image of list\" \/><\/a><\/p>\n<p>The <b>Windows8-RT<\/b> naming convention was what threw me off. I kept trying to install the <b>Windows6.1-KB2819745-x64.MultiPkg.msu<\/b> package. In addition, I went so far as to install Windows Identity Foundation&nbsp;3.5, which was referenced in many resolution articles&mdash;before I actually read the following steps in the release notes for Windows&nbsp;2012:<\/p>\n<p><a href=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/76\/18\/Capture%20B.PNG\"><img decoding=\"async\" src=\"https:\/\/msdnshared.blob.core.windows.net\/media\/TNBlogsFS\/prod.evol.blogs.technet.com\/CommunityServer.Blogs.Components.WeblogFiles\/00\/00\/00\/76\/18\/Capture%20B.PNG\" alt=\"Image of instructions\" title=\"Image of instructions\" \/><\/a><\/p>\n<p>Sometimes, even some of us nerdy types need to be reminded to RTFM!<\/p>\n<p>After the upgrade, I decided to play around with DSC some because I hadn&rsquo;t seen it in action nor tried it. There were some frustrations when I was trying to get it to work as documented on a couple sites that I tried. I could not get it to create the .mof file, regardless of what I did. I went through a couple steps on the server running Windows Server&nbsp;2012, and that still did not help. For example, I installed IIS and many of the features that I wanted to set up using DSC. I then installed Windows PowerShell Desired State Configuration (thinking that was the missing piece).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-1.png\" alt=\"Image of menu\" title=\"Image of menu\" \/><\/a><\/p>\n<p>The step that I had been missing was actually running the configuration from the Windows PowerShell ISE. This loaded the configuration in the session. This is the same as running a function to initialize it before use. This is a configuration that installs all of the features I use in my IIS setups to ensure that certain components are available and ready for use:<\/p>\n<p style=\"margin-left:30px\">Configuration TestWebsite<\/p>\n<p style=\"margin-left:30px\">{<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp; param ($MachineName)<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp; Node $MachineName<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install the IIS Role<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature IIS<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-Server&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install ASP.NET&nbsp;4.5<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature ASP<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-Asp-Net45&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install Request Monitor<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature Request<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-Request-Monitor&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install ODBC Logging &#8211; required for SMTP Server logging<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature ODBC<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-ODBC-Logging&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install Tracing &#8211; enables FRT<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature Tracing<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-HTTP-Tracing&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Install ASP.Net&nbsp;3.5<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature ASP35<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure = &quot;Present&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = &quot;Web-ASP-Net&quot;<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp; }<\/p>\n<p style=\"margin-left:30px\">}&nbsp;<\/p>\n<p>As an explanation, each <b>WindowsFeature<\/b> designation installs the corresponding role or feature. This configuration installs the following features:<\/p>\n<ul>\n<li>IIS<\/li>\n<li>ASP.NET&nbsp;4.5<\/li>\n<li>Request monitoring<\/li>\n<li>ODBC logging (which is required for the SMTP server)<\/li>\n<li>Failed request logging (which, in my opinion, is essential to ensure that you can accurately trace error messages to resolve issues on your IIS implementation)<\/li>\n<li>ASP.NET&nbsp;3.5 to support any ASP.NET&nbsp;2.0 applications that will be running on your IIS server<\/li>\n<\/ul>\n<p>After entering this configuration in Windows PowerShell ISE, I saved the script as <b>TestWebsite<\/b> and then ran it. As shown in the following screenshots, the <b>TestWebsite<\/b> folder was created, and the .mof file was saved in it:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-2.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-2.png\" alt=\"Image of menu\" title=\"Image of menu\" \/><\/a><\/p>\n<p style=\"margin-left:30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-3.png\" style=\"font-size:12px\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-3.png\" alt=\"Image of menu\" title=\"Image of menu\" \/><\/a><\/p>\n<p>After you have initialized the configuration, you can run the <b>Start-DscConfiguration<\/b> cmdlet to implement the DSC configuration that you created earlier.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-4.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-4.png\" alt=\"Image of command\" title=\"Image of command\" \/><\/a><\/p>\n<p>The <b>Start-DscConfiguration<\/b> cmdlet requires a path to the folder that houses the .mof file. The <b>Force<\/b> parameter ensures that the configuration runs and the <b>Verbose<\/b> parameter writes the output to the console. Because this configuration has already been run on my server running Windows Server&nbsp;2012, the following information is returned:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-5.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-5.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>After I figured out this little nugget, I decided to try the same thing on my server running Windows Server&nbsp;2008 R2, which had only WMF&nbsp;4.0 installed. As you can see from the following screenshot, I have no roles installed.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-6.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-6.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>I pasted the configuration in the Windows PowerShell ISE and ran it to initialize it. I then ran <b>TestWebsite &ndash;MachineName<\/b> <b>localhost<\/b>. This ran the configuration with <b>localhost<\/b> as the <b>$Machinename<\/b> parameter. As shown here, after this ran, there is a <b>TestWebsite<\/b> folder created in the <b>My Documents<\/b> folder that has a localhost.mof file in it:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-7.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-7.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p style=\"margin-left:30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-8.png\" style=\"font-size:12px\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-8.png\" alt=\"Image of menu\" title=\"Image of menu\" \/><\/a><\/p>\n<p>On this server, without all of the other attempts to resolve false issues, the command ran as expected. The output shows each feature being installed as it runs in addition to the successful installation and the amount of time to install each feature:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-9.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-9.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>As you can see here, all requested features have been successfully installed and are ready for use:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-10.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-10-23-14-10.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>Because IIS administration is what I do, this makes it easy to ensuring that installations include features that I deem as necessary on any machine that has Windows PowerShell&nbsp;4.0 installed.<\/p>\n<p>I hope you find this post useful when you are evaluating whether you should upgrade an existing Windows PowerShell&nbsp;3.0 implementation to Windows PowerShell&nbsp;4.0.<\/p>\n<p>~Terri<\/p>\n<p>Thank you, Terri, for an interesting and most excellent article. Windows PowerShell Upgrade Week will continue tomorrow when I will have a guest post by Windows PowerShell MVP, Dave Wyatt.<\/p>\n<p>I invite you to follow me on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\" target=\"_blank\">Twitter<\/a> and <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\" target=\"_blank\">Facebook<\/a>. If you have any questions, send email to me at <a href=\"mailto:scripter@microsoft.com\" target=\"_blank\">scripter@microsoft.com<\/a>, or post your questions on the <a href=\"http:\/\/bit.ly\/scriptingforum\" target=\"_blank\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p><b>Ed Wilson, Microsoft Scripting Guy<\/b><span style=\"font-size:12px\">&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Microsoft IIS MVP, Terri Donahue, talks about her path to upgrading to Windows PowerShell&nbsp;4.0. Microsoft Scripting Guy, Ed Wilson, is here. Welcome new guest blogger, Terri Donahue. Microsoft IIS MVP, Terri Donahue is a systems administrator who has been supporting Internet Information Services (IIS) since version&nbsp;4.0. Through the years, she has had extensive hands-on [&hellip;]<\/p>\n","protected":false},"author":596,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[56,462,3,546,541,45],"class_list":["post-502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-guest-blogger","tag-powershell-4-0","tag-scripting-guy","tag-terri-donahue","tag-upgrade","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft IIS MVP, Terri Donahue, talks about her path to upgrading to Windows PowerShell&nbsp;4.0. Microsoft Scripting Guy, Ed Wilson, is here. Welcome new guest blogger, Terri Donahue. Microsoft IIS MVP, Terri Donahue is a systems administrator who has been supporting Internet Information Services (IIS) since version&nbsp;4.0. Through the years, she has had extensive hands-on [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/502","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\/596"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=502"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/502\/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=502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}