{"id":3575,"date":"2013-05-27T00:01:00","date_gmt":"2013-05-27T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2013\/05\/27\/use-the-updateservices-module-to-manage-wsus\/"},"modified":"2013-05-27T00:01:00","modified_gmt":"2013-05-27T00:01:00","slug":"use-the-updateservices-module-to-manage-wsus","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/use-the-updateservices-module-to-manage-wsus\/","title":{"rendered":"Use the UpdateServices Module to Manage WSUS"},"content":{"rendered":"<p><strong style=\"font-size: 12px\">Summary<\/strong><span style=\"font-size: 12px\">: Use the Windows PowerShell and the UpdateServices module to manage WSUS.<\/span><\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. Today we have an awesome blog post written by Boe Prox about using the <strong>UpdateServices<\/strong> module to manage WSUS. Boe is the 2010 second-place winner of the Scripting Games, and he won a free pass to TechEd 2010 in New Orleans. He is also an Honorary Scripting Guy and a frequent contributor to the Hey, Scripting Guys! Blog. <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/tags\/guest+blogger\/boe+prox\/\" target=\"_blank\">Here is a link to his previous writings<\/a>. When I suggested that Boe update some of his previous WSUS blog posts, he jumped at the chance.<\/p>\n<p>Here&rsquo;s Boe&hellip;<\/p>\n<p>Continuing from my post, <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2013\/04\/15\/installing-wsus-on-windows-server-2012.aspx\" target=\"_blank\">Installing WSUS on Windows Server 2012<\/a>, this blog post aims to look at the cmdlets that are available in the <strong>UpdateServices<\/strong> module. This means that I will not be going into using the WSUS API to manage the WSUS server. I may reference whether something can be done with the API, and for that information, I would recommend that you check out some of my other <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/tags\/wsus\/\" target=\"_blank\">Hey, Scripting Guy! Blog posts about WSUS<\/a>. With that, let&rsquo;s dive into this module!<\/p>\n<p>Also to note, the WSUS team posted recently <a href=\"http:\/\/blogs.technet.com\/b\/wsus\/archive\/2013\/05\/02\/installing-wsus-on-windows-server-2012-with-powershell.aspx?wa=wsignin1.0\" target=\"_blank\">Installing WSUS on Windows Server 2012 with PowerShell<\/a>, and they are actively looking for feedback on the module. So if you feel that something is missing or could be enhanced, please do the right thing and leave them some feedback!<\/p>\n<p>What cmdlets are available in the <strong>UpdateServices<\/strong> module, you ask? Let&rsquo;s take a look and find out by using <strong>Get-Module<\/strong>:<\/p>\n<p style=\"padding-left: 30px\">Get-Command -Module UpdateServices<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/4617.hsg-5-27-13-1.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/4617.hsg-5-27-13-1.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Now about each of the cmdlets&hellip;<\/p>\n<h3>Get-WSUSServer<\/h3>\n<p>The command <strong>Get-WSUSServer <\/strong>will give you information about your WSUS server. By default, it will only show you the WSUS server name and nothing else.<\/p>\n<p style=\"padding-left: 30px\">Get-WsusServer -Name Boe-PC -PortNumber 8530<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3683.hsg-5-27-13-2.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3683.hsg-5-27-13-2.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Also of note is that if you are on the server and you run <strong>Get-WSUSServer<\/strong>, you do not need to specify a <strong>Name<\/strong> or <strong>PortNumber<\/strong> parameters.<\/p>\n<p>To get more information from the output, I can pipe the output into <strong>Select-Object *<\/strong> and see everything.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2843.hsg-5-27-13-3.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2843.hsg-5-27-13-3.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Every command other than this command has a parameter called <strong>&ndash;WsusServer<\/strong>, which takes an object called Microsoft.UpdateServices.Administration.IUpdateServer. Trying to just use a string name for the server will fail. Instead, first get the object by calling Get-WSUSServer with the required parameters and save this to a variable such as $wsusServer. With this, you can then work with the remote WSUS server using the other commands. Otherwise, if you are on the server locally or through remoting, just continue to use the cmdlets without the &ndash;WsusServer parameter.<\/p>\n<h3>Get-Product and Set-Product<\/h3>\n<p>These cmdlets are used in conjunction to set the products that will be synchronized (enabled) or will not be synchronized (disabled).<\/p>\n<p><strong>Get-WSUSProduct<\/strong> has a parameter for filtering some of the titles, but sometimes that won&rsquo;t cut it, and piping the output into <strong>Where-Object<\/strong> is more efficient. The big thing to remember is that the <strong>Title<\/strong> property is a little misleading, meaning that if you just filter by using <strong>$_.title<\/strong>, nothing will happen. It is actually underneath the <strong>Product<\/strong> property. So your command will look something like this:<\/p>\n<p style=\"padding-left: 30px\">Get-WsusProduct | where-Object {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; $_.Product.Title -in (<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;CAPICOM&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Silverlight&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;SQL Server 2008 R2&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;SQL Server 2005&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;SQL Server 2008&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Exchange Server 2010&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Windows Server 2003&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Windows Server 2008&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Windows Server 2008 R2&#8217;)<\/p>\n<p style=\"padding-left: 30px\">} | Set-WsusProduct &ndash;Verbose<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5811.hsg-5-27-13-4.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5811.hsg-5-27-13-4.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>As you can see, you can pipe the results of <strong>Get-WSUSProduct<\/strong> directly into <strong>Set-WSUSProduct<\/strong> and enable the products to be available during the next synchronization. Disabling an item from being synchronized is just as easy by using the <strong>Disable<\/strong> parameter:<\/p>\n<p style=\"padding-left: 30px\">Get-WsusProduct -TitleIncludes &#8220;office&#8221; | Where {<\/p>\n<p style=\"padding-left: 30px\">$_.product.title -match &#8220;^office(\\s\\d+(?:\/XP)?)?$&#8221;<\/p>\n<p style=\"padding-left: 30px\">} | Set-WSUSProduct -Disable &ndash;WhatIf<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8037.hsg-5-27-13-5.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8037.hsg-5-27-13-5.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>In this case, I didn&rsquo;t want to actually disable the Office updates, but I wanted to show what would happen if I did use this action.<\/p>\n<h3>Get-WsusClassification and Set-WsusClassification<\/h3>\n<p>Similar to <strong>Get\/Set-WSUSProduct<\/strong>, these cmdlets work with each other to get and set which classifications will be available during the synchronization of the WSUS server.&nbsp; We can follow a similar approach to configure which classifications will be enabled for synchronization:<\/p>\n<p style=\"padding-left: 30px\">Get-WsusClassification | Where-Object {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; $_.Classification.Title -in (<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Update Rollups&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Security Updates&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Critical Updates&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Service Packs&#8217;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8216;Updates&#8217;)<\/p>\n<p style=\"padding-left: 30px\">} | Set-WsusClassification &ndash;Verbose<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2526.hsg-5-27-13-6.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2526.hsg-5-27-13-6.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>You might notice that we had to filter by using <strong>$_.Classification.Title<\/strong> instead of just <strong>Title<\/strong>&mdash;much like we did using <strong>Get-Product<\/strong>.&nbsp; The same approach for disabling a classification is possible by using the <strong>Disable<\/strong> parameter on <strong>Set-WSUSClassification<\/strong>. Usually this is a set it and forget it configuration, so in the odd chance you have to come back and make a change, there should be no problem using these cmdlets.<\/p>\n<h3>Set-WsusServerSynchronization<\/h3>\n<p>Setting the synchronization source is pretty important if you want to be able to pull update metadata and files from the upstream server. To accomplish this, you can use <strong>Set-WSUSServerSynchronization<\/strong>. Note that this <strong>does not<\/strong> set the synchronization schedule, just the update source. If all you want to do is pull from the Microsoft Updates server, the command is very simple:<\/p>\n<p style=\"padding-left: 30px\">Set-WsusServerSynchronization &ndash;SyncFromMU<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/4263.hsg-5-27-13-7.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/4263.hsg-5-27-13-7.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Specifying an upstream server requires a little more knowledge of the configuration, such as the server name and the port of the remote system:<\/p>\n<p style=\"padding-left: 30px\">Set-WsusServerSynchronization -UssServerName UpstreamWSUS -PortNumber 80<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7827.hsg-5-27-13-8.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7827.hsg-5-27-13-8.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>And that is all to configuring a source to synchronize from.<\/p>\n<h3>Invoke-WSUSServerCleanup<\/h3>\n<p>Let&rsquo;s face it. Sometimes WSUS will get bloated from stale computers, updates that have no purpose being on the server and files from those old updates taking up space without any rhyme or reason. The solution to this is to use <strong>Invoke-WSUSServerCleanup<\/strong> to prune your WSUS server of all of these to help storage and performance.<\/p>\n<p style=\"padding-left: 30px\">Get-WsusServer | Invoke-WsusServerCleanup -CleanupObsoleteComputers &ndash;CleanupObsoleteUpdates<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0333.hsg-5-27-13-9.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0333.hsg-5-27-13-9.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Depending on the amount of data, this could take a while to run. Be patient. It will eventually finish and your server will be that much better!<\/p>\n<h3>Get-WsusComputer and Add-WsusComputer<\/h3>\n<p>Managing computers in WSUS is very common, and <strong>Get-WSUSComputer<\/strong> and <strong>Add-WSUSComputer<\/strong> will help save you some time. First off, let&rsquo;s take a look at using <strong>Get-WsusComputer<\/strong> to see what systems are currently being managed by my WSUS server:<\/p>\n<p style=\"padding-left: 30px\">Get-WSUSComputer<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2620.hsg-5-27-13-10.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2620.hsg-5-27-13-10.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Sure, this isn&rsquo;t exactly a huge inventory, but you get the idea. By itself, the command will list every system that is being managed for updates. However, this isn&rsquo;t all there is to this cmdlet. There are a number of parameters that you can use to filter for specific criteria on the server.<\/p>\n<p>&ldquo;How many parameters?&rdquo; you ask?<\/p>\n<p>Simple. Check out the Help for the cmdlet, and you will see what I mean.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1057.hsg-5-27-13-11.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1057.hsg-5-27-13-11.png\" alt=\"\" border=\"0\" \/><\/a><\/p>\n<p>This provides a great way to report on anything, ranging from inactive computers to those in specific WSUS Target groups, or simply finding computers that might have updates that failed to install correctly.<\/p>\n<h3>Get-WsusUpdate, Approve-WsusUpdate, and Deny-WsusUpdate<\/h3>\n<p>Last on the list are the three cmdlets that represent the update management. <strong>Get\/Approve\/Deny-WsusUpdate<\/strong> allows you to find updates and approve or decline the updates on the WSUS server. By using <strong>Get-WsusUpdate<\/strong>, you can filter for what types of updates you want to look at for approval or to decline. To see a list of all updates that haven&rsquo;t been approved and are needed by your systems, you can run the following command:<\/p>\n<p style=\"padding-left: 30px\">Get-WsusUpdate -Approval Unapproved -Status Needed<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3660.hsg-5-27-13-12.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3660.hsg-5-27-13-12.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Yes, quite a few updates are needed for my systems. Definitely time to make some approvals to get caught up on patching.<\/p>\n<p>As with the <strong>Get-WsusComputer<\/strong> cmdlet, you can also filter for updates that have failed to install on the computers by specifying <strong>Failed<\/strong> and using the <strong>Status<\/strong> parameter on the cmdlet. Filtering by classification is also allowed by using the <strong>Classification<\/strong> parameter to narrow the scope of the search even more.<\/p>\n<p>Moving on from this, I should really approve these updates so I can have a fully patched system. Fortunately, <strong>Approve-WsusUpdate<\/strong> can accomplish this with no effort at all. All I need to know is the target groups of my systems for the approvals. Note that there is not yet a cmdlet that can list all of the target groups, so you will need to hop on to the WSUS Administrator Console to get this information first.<\/p>\n<p>With the information in hand, I can now proceed to approve all of those updates for installation.<\/p>\n<p style=\"padding-left: 30px\">Get-WsusUpdate -Approval Unapproved -Status Needed |<\/p>\n<p style=\"padding-left: 30px\">Approve-WsusUpdate -Action Install -TargetGroupName &#8220;All Computers&#8221; &ndash;Verbose<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3660.hsg-5-27-13-13.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3660.hsg-5-27-13-13.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>Whoops! I didn&rsquo;t mean to approve the all of those language packs. Guess it is time to look at the <strong>Deny-WsusUpdate<\/strong> and decline these updates.<\/p>\n<p style=\"padding-left: 30px\">Get-WsusUpdate -Status Needed -Approval Approved | Where {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; $_.update.title -match &#8220;Language&#8221;<\/p>\n<p style=\"padding-left: 30px\">} | Deny-WsusUpdate &ndash;Verbose<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1614.hsg-5-27-13-14.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1614.hsg-5-27-13-14.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>There we go, now those updates have been declined, and I can install these updates on my system.<\/p>\n<p>And with that, we have looked at all of the available cmdlets in the UpdateServices module! Hopefully these examples, while not extensive, have been enough to encourage you to take the leap into managing your WSUS server on Windows Server 2012 with Windows PowerShell.<\/p>\n<p>If you are wondering why there might appear to missing cmdlets here, there is nothing missing! But if you remember, I mentioned earlier that the WSUS team is seeking feedback on things to add and improve for this module. So please go to their site via <a href=\"http:\/\/blogs.technet.com\/b\/wsus\/archive\/2013\/05\/02\/installing-wsus-on-windows-server-2012-with-powershell.aspx?wa=wsignin1.0\" target=\"_blank\">Installing WSUS on Windows Server 2012 with PowerShell<\/a> and give them feedback to make this module even better.<\/p>\n<p>~Boe<\/p>\n<p>Thanks, Boe, for an awesome blog post.<\/p>\n<p>Join me tomorrow for more cool Windows PowerShell stuff.<\/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><strong>Ed Wilson, Microsoft Scripting Guy<\/strong><span style=\"font-size: 12px\">&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Use the Windows PowerShell and the UpdateServices module to manage WSUS. Microsoft Scripting Guy, Ed Wilson, is here. Today we have an awesome blog post written by Boe Prox about using the UpdateServices module to manage WSUS. Boe is the 2010 second-place winner of the Scripting Games, and he won a free pass to [&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":[162,56,3,45,380,318],"class_list":["post-3575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-boe-prox","tag-guest-blogger","tag-scripting-guy","tag-windows-powershell","tag-windows-update","tag-wsus"],"acf":[],"blog_post_summary":"<p>Summary: Use the Windows PowerShell and the UpdateServices module to manage WSUS. Microsoft Scripting Guy, Ed Wilson, is here. Today we have an awesome blog post written by Boe Prox about using the UpdateServices module to manage WSUS. Boe is the 2010 second-place winner of the Scripting Games, and he won a free pass to [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/3575","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=3575"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/3575\/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=3575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=3575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=3575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}