{"id":4827,"date":"2012-10-14T00:01:00","date_gmt":"2012-10-14T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2012\/10\/14\/weekend-scripter-configure-a-new-virtual-machine-with-powershell\/"},"modified":"2012-10-14T00:01:00","modified_gmt":"2012-10-14T00:01:00","slug":"weekend-scripter-configure-a-new-virtual-machine-with-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/weekend-scripter-configure-a-new-virtual-machine-with-powershell\/","title":{"rendered":"Weekend Scripter: Configure a New Virtual Machine with PowerShell"},"content":{"rendered":"<p><b>Summary<\/b>: Microsoft Scripting Guy, Ed Wilson, discusses using Windows PowerShell&nbsp;3.0 to configure a virtual machine on his laptop.<\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. One of the things I really appreciate is weekends. Most of the time, I do not even open my email. Freedom from email is something I dream about. Recently, my cell phone went on a walkabout, so my dreams are coming more and more true.<\/p>\n<p>Anyway, I am sitting on the lanai sipping a cup of white tea with a few organic blueberries in it. It is a nice refreshing cup of tea and a great way to start the day. I have my laptop, freshly built with Windows&nbsp;8, and I want to spend a bit of time configuring the virtual machine that I created yesterday.<\/p>\n<p style=\"padding-left: 30px\"><b>Note<\/b>&nbsp;&nbsp;&nbsp;Yesterday in my blog, <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2012\/10\/13\/weekend-scripter-use-powershell-to-create-a-new-virtual-machine.aspx\" target=\"_blank\">Use PowerShell to Create a New Virtual Machine<\/a>, I used Windows PowerShell&nbsp;3.0 to create a new virtual machine on my laptop, which is running Windows 8. Today I will configure the virtual machine.<\/p>\n<p>When I create a virtual machine, there are always a few things I do prior to the first use of the machine. These include installing the integration services and configuring dynamic memory.<\/p>\n<p style=\"padding-left: 30px\"><b>Note<\/b>&nbsp;&nbsp;&nbsp;Admin rights are required to use the Hyper-V module.<\/p>\n<h2>Checking integration services<\/h2>\n<p>One of the things I always do is ensure that the virtual machine additions (integration services) install properly. In the past, checking this seemed to involve attempting a new installation, and then watching for messages. In the Hyper-V module, I decide to look for cmdlets that are related to the additions. Following is the command I use. (<b>gcm<\/b> is an alias for the <b>Get-Command<\/b> cmdlet. I use <b>&ndash;mod<\/b> instead of typing the longer <b>Module<\/b><i> <\/i>parameter. I also use a wildcard (<b>*integ*<\/b>) to help me look for cmdlets that are related to the virtual machine integration services.)<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; gcm -mod hyp* -Noun *integ*<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">CommandType&nbsp;&nbsp;&nbsp;&nbsp; Name&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModuleName<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;-&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">Cmdlet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disable-VMIntegrationService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hyper-V<\/p>\n<p style=\"padding-left: 30px\">Cmdlet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enable-VMIntegrationService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hyper-V<\/p>\n<p style=\"padding-left: 30px\">Cmdlet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-VMIntegrationService&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; Hyper-V<\/p>\n<p>This command shows me that I could enable or disable the integration services by using a cmdlet. I can also check to ensure that they are enabled.<\/p>\n<p>I decide that I will use the <b>Get-VMIntegrationService<\/b> cmdlet to ensure the presence of the integration services. I know that a well-planned cmdlet accepts pipelined information. So I use the <b>Get-VM<\/b> cmdlet and pipe the results to the <b>Get-VMIntegrationService<\/b> cmdlet. I give it a whirl to see what happens. The command is shown here.<\/p>\n<p style=\"padding-left: 30px\">get-vm | Get-VMIntegrationService<\/p>\n<p>The command and associated output are shown in the image that follows.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7215.wes-10-14-12-1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7215.wes-10-14-12-1.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>I assume that the Primary and Secondary status descriptions have something to do with whether a virtual machine runs, because only DC1 is up right now. The output, although impressive, is a bit much to read, so I group the information to make things easier to understand. The revised command is shown here.<\/p>\n<p style=\"padding-left: 30px\">get-vm | Get-VMIntegrationService | group name &ndash;NoElement<\/p>\n<p>The following output tells me that all four virtual machines contain each of the integration services.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; get-vm | Get-VMIntegrationService | group name -NoElement<\/p>\n<p style=\"padding-left: 30px\">Count Name<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8211; &#8212;-<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 4 Time Synchronization<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 4 Heartbeat<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 4 Key-Value Pair Exchange<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 4 Shutdown<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 4 VSS<\/p>\n<h2>Configure dynamic memory<\/h2>\n<p>I conjecture that I will need a cmdlet that uses the verb of <b>Set<\/b><i> <\/i>to permit configuring dynamic memory. In addition, I surmise that the noun will have something to do with memory. I use the following command to find the cmdlet I need to use (you can see that my guess was pretty close).<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; gcm -Verb set -Noun *mem* -Mod *hyper*<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">CommandType&nbsp;&nbsp;&nbsp;&nbsp; Name&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModuleName<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;-&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">Cmdlet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set-VMMemory&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; Hyper-V<\/p>\n<p>Now I use the <strong>Get-Command<\/strong> cmdlet to look at the syntax of the <strong>Set-VMMemory<\/strong> cmdlet. This command is shown here.<\/p>\n<p style=\"padding-left: 30px\">gcm -Syntax Set-VMMemory<\/p>\n<p>The command and its associated output are shown in the image that follows.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5618.wes-10-14-12-2.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5618.wes-10-14-12-2.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>The syntax of the <b>Set-VMMemory<\/b> cmdlet tells me that there are three ways to use the cmdlet. The first is to supply one or more virtual machine names as strings. The third way is to supply one or more virtual machines (I assume I can get these via the <b>Get-VM<\/b> cmdlet). I am not sure what the second syntax does, but it does not matter, because I need to supply a virtual machine name.<\/p>\n<p style=\"padding-left: 30px\"><b>Note<\/b> &nbsp;&nbsp;The fact that I can supply arrays for input is awesome, and it can lead to extremely powerful Hyper-V management scenarios.<\/p>\n<p>I decide to configure my virtual machine with dynamic memory, a minimum value of 512&nbsp;MB of RAM, and a maximum of 2048&nbsp;MB of RAM. I also set a 20% buffer. The following command accomplishes these tasks.<\/p>\n<p style=\"padding-left: 30px\">Set-VMMemory -VMName c7 -DynamicMemoryEnabled $true -MinimumBytes 512MB -MaximumBytes 2048MB -Buffer 20<\/p>\n<p>I can use the Get-VMMemory cmdlet to ensure my changes took place. This command appears here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; Get-VMMemory -VMName c7<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">VMName DynamicMemoryEnabled Minimum(M) Startup(M) Maximum(M)<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">c7&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048<\/p>\n<p>Remember, this is still Windows PowerShell I am using. So I can look for additional information by piping the cmdlet to the <b>Format-List<\/b> cmdlet and using a <b>*<\/b> to look for all properties. Here is the command.<\/p>\n<p style=\"padding-left: 30px\">Get-VMMemory -VMName c7 | fl *<\/p>\n<p>In addition, I can use pipeline cmdlets into the <b>Get-VMMemory<\/b> cmdlet. I use the following command to verify that I have dynamic memory enabled on all the virtual machines on my laptop.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; get-vm | Get-VMMemory<\/p>\n<p style=\"padding-left: 30px\">VMName DynamicMemoryEnabled Minimum(M) Startup(M) Maximum(M)<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">c1&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p style=\"padding-left: 30px\">C2&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p style=\"padding-left: 30px\">c7&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2048<\/p>\n<p style=\"padding-left: 30px\">DC1&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p>I see that I have allocated too much memory for my c7 virtual machine. I use the <b>Set-Virtual MachineMemory<\/b> cmdlet to make the change. I only need to specify the revised value. The command is shown here.<\/p>\n<p style=\"padding-left: 30px\">Set-VMMemory -VMName c7 -MaximumBytes 1024MB<\/p>\n<p>I use the <b>Get-VM | Get-VMMemory<\/b> command to ensure that the change worked. It does, as shown here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; get-vm | Get-VMMemory<\/p>\n<p style=\"padding-left: 30px\">VMName DynamicMemoryEnabled Minimum(M) Startup(M) Maximum(M)<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">c1&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p style=\"padding-left: 30px\">C2&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p style=\"padding-left: 30px\">c7&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/p>\n<p style=\"padding-left: 30px\">DC1&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024<\/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>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, discusses using Windows PowerShell&nbsp;3.0 to configure a virtual machine on his laptop. Microsoft Scripting Guy, Ed Wilson, is here. One of the things I really appreciate is weekends. Most of the time, I do not even open my email. Freedom from email is something I dream about. Recently, my [&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":[373,362,3,130,61,367,45],"class_list":["post-4827","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-hyperv","tag-powershell-3","tag-scripting-guy","tag-servers","tag-weekend-scripter","tag-windows-8","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, discusses using Windows PowerShell&nbsp;3.0 to configure a virtual machine on his laptop. Microsoft Scripting Guy, Ed Wilson, is here. One of the things I really appreciate is weekends. Most of the time, I do not even open my email. Freedom from email is something I dream about. Recently, my [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/4827","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=4827"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/4827\/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=4827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=4827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=4827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}