{"id":12571,"date":"2011-09-27T00:01:00","date_gmt":"2011-09-27T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2011\/09\/27\/create-a-custom-object-from-wmi-by-using-powershell\/"},"modified":"2011-09-27T00:01:00","modified_gmt":"2011-09-27T00:01:00","slug":"create-a-custom-object-from-wmi-by-using-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/create-a-custom-object-from-wmi-by-using-powershell\/","title":{"rendered":"Create a Custom Object from WMI by Using PowerShell"},"content":{"rendered":"<p><strong>Summary<\/strong>: Create a custom object from WMI to display processor and operating system information using Windows PowerShell.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" title=\"Hey, Scripting Guy! Question\" border=\"0\" alt=\"Hey, Scripting Guy! Question\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" width=\"34\" height=\"34\" \/>Hey, Scripting Guy! Your script <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2011\/09\/26\/use-powershell-and-wmi-to-get-processor-information.aspx\">yesterday<\/a> was pretty cool. However, in addition to obtaining information about the processor, I also need to know operating system is 32-bit or 64-bit, the version of Windows that is installed, and the service pack that is installed. I hate to be picky, but this is the information I need in order to plan for our upgrade project.<\/p>\n<p>&mdash;BB<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" title=\"Hey, Scripting Guy! Answer\" border=\"0\" alt=\"Hey, Scripting Guy! Answer\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" width=\"34\" height=\"34\" \/>Hello BB,<\/p>\n<p>Microsoft Scripting Guy Ed Wilson here. First, I need to apologize to the Scripting Wife. Yesterday was her birthday, and I did not mention it in the Hey, Scripting Guy! Blog. Sorry!<\/p>\n<p>Beyond the disappointed Scripting Wife, BB, I am glad you enjoyed yesterday&rsquo;s article. It is one of those things that sort of gets out of control. I begin working on a script and keep adding to it. So I will simply continue adding to it for today.<\/p>\n<p>First, make sure you have the script from yesterday&rsquo;s Hey Scripting Guy! Article. The script, as it stood at the end of yesterday, is shown here:<\/p>\n<p style=\"padding-left: 30px\">Import-Module ActiveDirectory<\/p>\n<p style=\"padding-left: 30px\">$pingConfig = @{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;count&#8221; = 1<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;bufferSize&#8221; = 15<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;delay&#8221; = 1<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;EA&#8221; = 0 }<\/p>\n<p style=\"padding-left: 30px\">$computer = $cn = $null<\/p>\n<p style=\"padding-left: 30px\">$cred = Get-Credential<\/p>\n<p style=\"padding-left: 30px\">&nbsp;Get-ADComputer -filter * -Credential $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;ForEach-Object {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Test-Connection -ComputerName $_.dnshostname @pingconfig)<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { $computer += $_.dnshostname + &#8220;`r`n&#8221;} }<\/p>\n<p style=\"padding-left: 30px\">$computer = $computer -split &#8220;`r`n&#8221;<\/p>\n<p style=\"padding-left: 30px\">$property = &#8220;systemname&#8221;,&#8221;maxclockspeed&#8221;,&#8221;addressWidth&#8221;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;numberOfCores&#8221;, &#8220;NumberOfLogicalProcessors&#8221;<\/p>\n<p style=\"padding-left: 30px\">foreach($cn in $computer)<\/p>\n<p style=\"padding-left: 30px\">{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;if($cn -match $env:COMPUTERNAME)<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Get-WmiObject -class win32_processor -Property&nbsp; $property |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Select-Object -Property $property }<\/p>\n<p style=\"padding-left: 30px\">&nbsp;elseif($cn.Length -gt 0)<\/p>\n<p style=\"padding-left: 30px\">&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Get-WmiObject -class win32_processor -Property $property -cn $cn -cred $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp; &nbsp;Select-Object -Property $property } }<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p>Now, let&rsquo;s see if I can find the additional information you need for your upgrade project. Actually, it is pretty simple because everything you need is in the <b>Win32_OperatingSystem<\/b> WMI class. The <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa394239(VS.85).aspx\">Win32_OperatingSystem WMI class is documented on MSDN<\/a>, but the properties needed for today&rsquo;s script are rather straightforward and do not need extensive documentation. A quick check of the <b>Win32_Operatingsystem<\/b> WMI class reveals everything I need. The command I use to perform this check is shown here (<b>gwmi<\/b> is an alias for <b>Get-WmiObject<\/b> and <b>fl<\/b> is alias for <b>Format-List<\/b>):<\/p>\n<p style=\"padding-left: 30px\">gwmi win32_operatingsystem | fl *<\/p>\n<p>The command and associated output are shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8863.hsg-9-27-11-01.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of command and associated output\" alt=\"Image of command and associated output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8863.hsg-9-27-11-01.png\" \/><\/a><\/p>\n<p>The revised script is named GetADComputersAndWMiProcessorAndOSInfo.ps1.<\/p>\n<p style=\"padding-left: 30px\">GetADComputersAndWMiProcessorAndOSInfo<\/p>\n<p style=\"padding-left: 30px\">Import-Module ActiveDirectory<\/p>\n<p style=\"padding-left: 30px\">$pingConfig = @{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;count&#8221; = 1<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;bufferSize&#8221; = 15<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;delay&#8221; = 1<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; &#8220;EA&#8221; = 0 }<\/p>\n<p style=\"padding-left: 30px\">$computer = $cn = $null<\/p>\n<p style=\"padding-left: 30px\">$cred = Get-Credential<\/p>\n<p style=\"padding-left: 30px\">&nbsp;Get-ADComputer -filter * -Credential $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;ForEach-Object {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Test-Connection -ComputerName $_.dnshostname @pingconfig)<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { $computer += $_.dnshostname + &#8220;`r`n&#8221;} }<\/p>\n<p style=\"padding-left: 30px\">$computer = $computer -split &#8220;`r`n&#8221;<\/p>\n<p style=\"padding-left: 30px\">$property = &#8220;systemname&#8221;,&#8221;maxclockspeed&#8221;,&#8221;addressWidth&#8221;,<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;numberOfCores&#8221;, &#8220;NumberOfLogicalProcessors&#8221;<\/p>\n<p style=\"padding-left: 30px\">$osProperty = &#8220;Caption&#8221;, &#8220;OSArchitecture&#8221;,&#8221;ServicePackMajorVersion&#8221;<\/p>\n<p style=\"padding-left: 30px\">foreach($cn in $computer)<\/p>\n<p style=\"padding-left: 30px\">{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;if($cn -match $env:COMPUTERNAME)<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $obj = Get-WmiObject -class win32_processor -Property&nbsp; $property |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select-Object -Property $property<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $os =&nbsp; Get-WmiObject -class win32_OperatingSystem -Property&nbsp; $osproperty |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Select-Object -Property $osproperty<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; } #end if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p style=\"padding-left: 30px\">&nbsp;elseif($cn.Length -gt 0)<\/p>\n<p style=\"padding-left: 30px\">&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $obj = Get-WmiObject -class win32_processor -Property $property -cn $cn -cred $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Select-Object -Property $property<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $os = Get-WmiObject -class win32_OperatingSystem -Property $osproperty -cn $cn -cred $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Select-Object -Property $osproperty<\/p>\n<p style=\"padding-left: 30px\">&nbsp; } #end elseif<\/p>\n<p style=\"padding-left: 30px\">&nbsp; New-Object psobject -Property @{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;name&#8221; = $obj.systemname<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;speed&#8221; = $obj.maxclockspeed<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;addressWidth&#8221; = $obj.addressWidth<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;numberCores&#8221; = $obj.numberOfCores<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;numberLogicalProcessors&#8221; = $obj.NumberOfLogicalProcessors<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;OSname&#8221; = $os.Caption<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;OSArchitecture&#8221; = $os.OSArchitecture<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;ServicePack&#8221; = $os.ServicePackMajorVersion<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; }<\/p>\n<p style=\"padding-left: 30px\">&nbsp; #$os<\/p>\n<p style=\"padding-left: 30px\">&nbsp;} #END FOREACH<\/p>\n<p>When the script runs, the first thing that happens is a credential dialog box displays. This is because I request credentials for connection to remote systems. The credentials are not used to connect to the local computer. The credential dialog box is shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0726.hsg-9-27-11-02.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of credential dialog box\" alt=\"Image of credential dialog box\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0726.hsg-9-27-11-02.png\" width=\"429\" height=\"316\" \/><\/a><\/p>\n<p>I added an array of properties to store the operating system information:<\/p>\n<p style=\"padding-left: 30px\">$osProperty = &#8220;Caption&#8221;, &#8220;OSArchitecture&#8221;,&#8221;ServicePackMajorVersion&#8221;<\/p>\n<p>This change is shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7633.hsg-9-27-11-03.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of the change\" alt=\"Image of the change\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7633.hsg-9-27-11-03.png\" \/><\/a><\/p>\n<p>In addition, I changed the portion of the script inside the <b>Foreach<\/b> loop so that I am storing the <b>Processor<\/b> object instead of directly emitting. I also added a WMI query to retrieve the operating system information. The revised section is shown here:<\/p>\n<p style=\"padding-left: 30px\">foreach($cn in $computer)<\/p>\n<p style=\"padding-left: 30px\">{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;if($cn -match $env:COMPUTERNAME)<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $obj = Get-WmiObject -class win32_processor -Property&nbsp; $property |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select-Object -Property $property<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $os =&nbsp; Get-WmiObject -class win32_OperatingSystem -Property&nbsp; $osproperty |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select-Object -Property $osproperty<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; } #end if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p style=\"padding-left: 30px\">&nbsp;elseif($cn.Length -gt 0)<\/p>\n<p style=\"padding-left: 30px\">&nbsp; {<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $obj = Get-WmiObject -class win32_processor -Property $property -cn $cn -cred $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Select-Object -Property $property<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; $os = Get-WmiObject -class win32_OperatingSystem -Property $osproperty -cn $cn -cred $cred |<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; Select-Object -Property $osproperty<\/p>\n<p style=\"padding-left: 30px\">&nbsp; } #end elseif<\/p>\n<p>This portion of the revised code is shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8585.hsg-9-27-11-04.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of this portion of revised code\" alt=\"Image of this portion of revised code\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8585.hsg-9-27-11-04.png\" \/><\/a><\/p>\n<p>To make it easier to work with the output, I decided to return a custom object. This object contains information from both WMI classes. In addition, I changed some of the column headings to make it easier to read. This section of the script that creates the new object is shown here:<\/p>\n<p style=\"padding-left: 30px\">New-Object psobject -Property @{<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;name&#8221; = $obj.systemname<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;speed&#8221; = $obj.maxclockspeed<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;addressWidth&#8221; = $obj.addressWidth<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;numberCores&#8221; = $obj.numberOfCores<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;numberLogicalProcessors&#8221; = $obj.NumberOfLogicalProcessors<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;OSname&#8221; = $os.Caption<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;OSArchitecture&#8221; = $os.OSArchitecture<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; &#8220;ServicePack&#8221; = $os.ServicePackMajorVersion<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; } #end new object<\/p>\n<p>This portion of the new code is shown in the following figure.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3108.hsg-9-27-11-05.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of this portion of new code\" alt=\"Image of this portion of new code\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3108.hsg-9-27-11-05.png\" \/><\/a><\/p>\n<p>When the script runs, the following output is displayed.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5657.hsg-9-27-11-06.png\"><img decoding=\"async\" style=\"border: 0px\" title=\"Image of output displayed when script is run\" alt=\"Image of output displayed when script is run\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5657.hsg-9-27-11-06.png\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>BB, that is all there is to using Windows PowerShell to query for both processor and operating system information.&nbsp;<\/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\">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><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Create a custom object from WMI to display processor and operating system information using Windows PowerShell. &nbsp; Hey, Scripting Guy! Your script yesterday was pretty cool. However, in addition to obtaining information about the processor, I also need to know operating system is 32-bit or 64-bit, the version of Windows that is installed, and [&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":[237,16,31,287,2,3,4,203,288,45,6],"class_list":["post-12571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-basic-computer-information","tag-desktop-management","tag-operating-system","tag-receiving-input","tag-running","tag-scripting-guy","tag-scripting-techniques","tag-service-packs-and-hotfixes","tag-version-information","tag-windows-powershell","tag-wmi"],"acf":[],"blog_post_summary":"<p>Summary: Create a custom object from WMI to display processor and operating system information using Windows PowerShell. &nbsp; Hey, Scripting Guy! Your script yesterday was pretty cool. However, in addition to obtaining information about the processor, I also need to know operating system is 32-bit or 64-bit, the version of Windows that is installed, and [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/12571","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=12571"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/12571\/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=12571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=12571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=12571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}