{"id":3138,"date":"2013-07-30T00:01:00","date_gmt":"2013-07-30T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2013\/07\/30\/learn-how-to-configure-powershell-memory\/"},"modified":"2013-07-30T00:01:00","modified_gmt":"2013-07-30T00:01:00","slug":"learn-how-to-configure-powershell-memory","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/learn-how-to-configure-powershell-memory\/","title":{"rendered":"Learn How to Configure PowerShell Memory"},"content":{"rendered":"<p><strong style=\"font-size: 12px\">Summary<\/strong><span style=\"font-size: 12px\">: Microsoft Scripting Guy, Ed Wilson, talks about how to configure Windows PowerShell memory availability for specialized applications.<\/span><\/p>\n<p><span style=\"font-size: 12px\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" alt=\"Hey, Scripting Guy! Question\" \/>&nbsp;Hey, Scripting Guy! I really need your help. We are doing something that perhaps Windows PowerShell cannot do. At least, this is the way it seems. We have a huge file share, and we are parsing through it with a series of <\/span><strong style=\"font-size: 12px\">Select-String<\/strong><span style=\"font-size: 12px\"> commands to find specific types of things. We are using <\/span><strong style=\"font-size: 12px\">Get-ChildItem<\/strong><span style=\"font-size: 12px\"> to obtain files for us to parse, and we have filtered it out as much as is possible. The thing is, that when I say huge, I mean really, really huge. Absolutely GINORMOUS type of huge.<\/span><\/p>\n<p>Anyway, we are perfectly resigned to the fact that Windows PowerShell will take some time to go through this parsing effort, and we have obviously tested everything on mock (much smaller) data prior to turning this thing loose. The problem is that Windows PowerShell runs for an hour or so, and then it stops with a System.OutOfMemoryException error message. It is bad enough that it happens, but it is horrible that it takes so long to occur. We make changes, reboot the server, wait for another hour, and boom!&mdash;it happens again. We have spent an entire week trying to make this work, and you are our last hope. I searched the Hey, Scripting Guy! blog, but I did not find anything helpful. So now&rsquo;s your chance to be a real hero.<\/p>\n<p>&mdash;AP<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" alt=\"Hey, Scripting Guy! Answer\" \/>&nbsp;Hello AP,<\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. Today is a great day. I got up, and fixed some nice English Breakfast tea with a bit of organic orange rind, some peppermint and spearmint leaves, a bit of crushed cinnamon stick, and a touch of lemon grass. I must say, it is a very refreshing cup of tea. Yesterday I had an awesome session with my mentee, Ashley McGlone. I am real proud of everything he has accomplished so far. So the week is going along perfectly. I am looking forward to this Thursday (August 1, 2013). We are having the Windows PowerShell User Group meeting in Charlotte, North Carolina. It will be awesome. With everything moving along smoothly, I thought I would take some time to try to catch up a bit with questions such as yours that are emailed to <a href=\"mailto:scripter@microsoft.com\">scripter@microsoft.com<\/a>.<\/p>\n<h2>Configuring memory for Windows PowerShell<\/h2>\n<p>To configure memory resources for Windows PowerShell, you must launch Windows PowerShell with Admin rights. If you attempt to do anything on the WSMAN: drive as a normal user, you will receive the following &ldquo;Access is denied&rdquo; error message:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5432.hsg-7-30-13-01.png\"><img decoding=\"async\" title=\"Image of error message\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/5432.hsg-7-30-13-01.png\" alt=\"Image of error message\" \/><\/a><\/p>\n<p>In addition to Admin rights, the WinRM service must be running. In Windows PowerShell&nbsp;3.0 in Windows&nbsp;8, this service starts on demand. Therefore, the first attempts to access the WinRM drive will result in a prompt to start the WinRM service. I use the <strong>Get-Service<\/strong> cmdlet to ensure that everything started properly:<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; get-service *win*<\/p>\n<p style=\"padding-left: 30px\">Status&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DisplayName<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212;&nbsp;&nbsp; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8211;<\/p>\n<p style=\"padding-left: 30px\">Running&nbsp; WinDefend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Defender Service<\/p>\n<p style=\"padding-left: 30px\">Running&nbsp; WinHttpAutoProx&#8230; WinHTTP Web Proxy Auto-Discovery Se..<\/p>\n<p style=\"padding-left: 30px\">Running&nbsp; Winmgmt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Management Instrumentation<\/p>\n<p style=\"padding-left: 30px\">Running&nbsp; WinRM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Remote Management (WS-Manag..<\/p>\n<h2>Check and set the machine-wide setting<\/h2>\n<p>The first thing to do is to check and set the machine-wide memory setting. To do this, I navigate to WsMan:\\Localhost\\Shell in my Windows PowerShell console. I then use the <strong>Get-ChildItem<\/strong> cmdlet (<strong>dir<\/strong> is alias) to see my settings for everything. This is shown here:<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; sl WSMan:\\localhost\\Shell<\/p>\n<p style=\"padding-left: 30px\">PS WSMan:\\localhost\\Shell&gt; dir<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; WSManConfig: Microsoft.WSMan.Management\\WSMan::localhost\\Shell<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; SourceOfValue&nbsp;&nbsp; Value<\/p>\n<p style=\"padding-left: 30px\">&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp; &#8212;&#8211;<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; AllowRemoteShellAccess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; true<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; IdleTimeout&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; 7200000<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxConcurrentUsers&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; 10<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxShellRunTime&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; 2147483647<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxProcessesPerShell&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; 25<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxMemoryPerShellMB&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; 1024<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxShellsPerUser&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; 30<\/p>\n<h2>Set MaxMemoryPerShellMB<\/h2>\n<p>To make the change, I use the <strong>Set-Item<\/strong> cmdlet and change the value of MaxMemoryPerShellMB from 1&nbsp;GB to 2&nbsp;GB. This technique is shown here:<\/p>\n<p style=\"padding-left: 30px\">Set-Item .\\MaxMemoryPerShellMB 2048<\/p>\n<p>Now I use the Up arrow and change <strong>Get-Item<\/strong> to <strong>Set-Item<\/strong>. This command and its output are shown here:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3022.hsg-7-30-13-02.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3022.hsg-7-30-13-02.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p style=\"padding-left: 30px\"><strong>Note&nbsp;<\/strong> I am already in WsMan:\\LocalHost\\Shell when I run the <strong>Set-Item<\/strong> command. If you do not want to navigate to the folder first, you can use this command:<\/p>\n<p style=\"padding-left: 30px\">Set-Item WSMan:\\localhost\\Shell\\MaxMemoryPerShellMB <strong>2048<\/strong><\/p>\n<p>I notice that a warning appears that states I also need to change memory settings for plug-ins. (This is true in Windows PowerShell&nbsp;3.0.) Therefore, I navigate to the plug-ins directory to make those changes. But before I make any changes, I notice there are several plug-ins listed:<\/p>\n<p style=\"padding-left: 30px\">PS WSMan:\\localhost\\Plugin&gt; dir<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; WSManConfig: Microsoft.WSMan.Management\\WSMan::localhost\\Plugin<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keys&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; Name<\/p>\n<p style=\"padding-left: 30px\">&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=Event Forwarding Plugin}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event Forwarding Plugin<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=microsoft.powershell}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; microsoft.powershell<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=microsoft.powershell.workf&#8230; microsoft.powershell.workflow<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=microsoft.powershell32}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; microsoft.powershell32<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=microsoft.windows.serverma&#8230; microsoft.windows.servermanag&#8230;<\/p>\n<p style=\"padding-left: 30px\">Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Name=WMI Provider}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WMI Provider<\/p>\n<p>The thing that is confusing is that I need to make a memory change for each plug-in endpoint configuration that I target from the client. Luckily, I happen to know that the default Windows PowerShell endpoint is Microsoft.PowerShell, and that is the only one I need to change. I type the following command:<\/p>\n<p style=\"padding-left: 30px\">Set-Item .\\microsoft.powershell\\Quotas\\MaxConcurrentCommandsPerShell 2048<\/p>\n<p>The command results in a warning that states I need to restart WinRM and that the value for the plug-in will only work if it is less than or equal to the value for the global memory setting. Here is the command and the output:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1050.hsg-7-30-13-03.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1050.hsg-7-30-13-03.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p style=\"padding-left: 30px\"><strong>Note&nbsp;<\/strong> I was in the Wsman:\\LocalHost\\Plugin directory when I ran the command to set the memory for the plug-in. If you do not want to navigate to the location, use this command instead:<\/p>\n<p style=\"padding-left: 30px\">Set-Item WSMan:\\localhost\\Plugin\\<strong>Microsoft.PowerShell<\/strong>\\Quotas\\MaxMemoryPerShellMB <strong>2048<\/strong><\/p>\n<p>I use the <strong>Get-Item<\/strong> cmdlet to ensure that the new value took. Here is the command I use:<\/p>\n<p style=\"padding-left: 30px\">PS WSMan:\\localhost\\Plugin&gt; get-Item .\\microsoft.powershell\\Quotas\\MaxMemoryPerShellMB<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; WSManConfig:<\/p>\n<p style=\"padding-left: 30px\">Microsoft.WSMan.Management\\WSMan::localhost\\Plugin\\microsoft.powershell\\Quotas<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; SourceOfValue&nbsp;&nbsp; Value<\/p>\n<p style=\"padding-left: 30px\">&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp; &#8212;&#8211;<\/p>\n<p style=\"padding-left: 30px\">System.String&nbsp;&nbsp; MaxMemoryPerShellMB&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; 2048<\/p>\n<h2>Restart the WinRM service<\/h2>\n<p>Now I need to restart the WinRM service. To do this, I use the <strong>Restart-Service<\/strong> cmdlet. The command is shown here:<\/p>\n<p style=\"padding-left: 30px\">Restart-Service winrm<\/p>\n<p>Just for fun, I close the Windows PowerShell console, and then reopen it. I rerun my <strong>Get-Item<\/strong> commands to see if anything has reverted. As indicated in the image that follows, everything is groovy.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7028.hsg-7-30-13-04.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/7028.hsg-7-30-13-04.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>AP, that is all there is to using the WSMAN drive to configure Windows PowerShell memory. Join me &nbsp;tomorrow when I will talk about more cool 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><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, talks about how to configure Windows PowerShell memory availability for specialized applications. &nbsp;Hey, Scripting Guy! I really need your help. We are doing something that perhaps Windows PowerShell cannot do. At least, this is the way it seems. We have a huge file share, and we are parsing through [&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":[362,3,4,45],"class_list":["post-3138","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-powershell-3","tag-scripting-guy","tag-scripting-techniques","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, talks about how to configure Windows PowerShell memory availability for specialized applications. &nbsp;Hey, Scripting Guy! I really need your help. We are doing something that perhaps Windows PowerShell cannot do. At least, this is the way it seems. We have a huge file share, and we are parsing through [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/3138","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=3138"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/3138\/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=3138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=3138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=3138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}