{"id":2765,"date":"2013-10-05T00:01:00","date_gmt":"2013-10-05T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2013\/10\/05\/disconnected-sessions-phenotype-and-genotype-part-1\/"},"modified":"2013-10-05T00:01:00","modified_gmt":"2013-10-05T00:01:00","slug":"disconnected-sessions-phenotype-and-genotype-part-1","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/disconnected-sessions-phenotype-and-genotype-part-1\/","title":{"rendered":"Disconnected Sessions: Phenotype and Genotype (Part 1)"},"content":{"rendered":"<p><strong>Summary<\/strong>: Learn about a revolutionary feature in Windows PowerShell&nbsp;3.0 that lets you disconnect from and reconnect to PSSessions.\nScripting Guy, Ed Wilson here. We have an exciting guest blog series that is written by Paul Higinbotham, a software design engineer for Windows PowerShell and June Blender, a senior programming writer for Windows Azure Active Directory. Today, June is going to start us off&hellip;\nIn Windows PowerShell&nbsp;2.0, when you closed a session, such as your Windows PowerShell console window, or you lost your network connection, you lost all remote sessions (PSSessions) that you started in that session. And if a command just happened to be running in one of those remote sessions, the command stopped, and its results were forever lost.\nAll of that changed in Windows PowerShell&nbsp;3.0. And, for those of us who multitask (frequently switching machines and coming and going between our home and office), it was a dream come true. I&#8217;m always surprised that I don&#8217;t hear more people raving about this change. But maybe you just don&#8217;t know the whole story.\nTo help me tell this story, I&#8217;ve recruited Paul Higinbotham, the Windows PowerShell developer who coded this feature. I&#8217;ll explain how you use it (the &#8220;phenotype&#8221;) and then, in a few follow-up posts, Paul will explain why it works (the &#8220;genotype&#8221;). I&#8217;m always pleased to get a chance to work with Paul, who&#8217;s a great writer as well as a great coder. When you hear from him, you&#8217;ll want to get to know him, too.<\/p>\n<h2>Need to go home? No problem!<\/h2>\n<p>So, here&#8217;s the scenario:<\/p>\n<ul>\n<li>An IT pro is hard at work diagnosing a failure on Server01, which is a remote machine with a tricky problem. She creates a PSSession to Server01 and then runs a few commands and a diagnostic script that takes a while to complete. In the meantime, she closes the session, closes the computer, and starts another task on a different machine. At the end of a long day, she heads home.<\/li>\n<li>After dinner, she opens her home laptop, connects to her corporate network, starts Windows PowerShell, connects to the PSSession on Server01 and reviews the results. She runs a few more commands before calling it a day.<\/li>\n<li>Next morning, she goes to work, reconnects to the session on Server01, and continues her investigation.<\/li>\n<\/ul>\n<p>This scenario works in Windows PowerShell&nbsp;3.0 because the PSSession is saved on the remote computer when the session is disconnected, either intentionally or unintentionally (such as when the network connection is interrupted). The PSSession becomes independent of the session in which it was created. Let&#8217;s run through the commands that she uses.\nFirst, she creates a PSSession named Diag on Server01, runs some commands and a script.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s = New-PSSession -Name Diag -ComputerName Server01<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;Id Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp; 2 Diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Opened&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp; Available<\/p>\n<p class=\"Code\">Notice that the State of the PSSession is <strong>Opened<\/strong> and the Availability is <strong>Available<\/strong>, which means that she can run commands in the PSSession.\nAmong the commands that she runs is a command to save the current date and time in a <strong>$Start<\/strong> variable in PSSession. She&#8217;ll use this value to track the time spent on this machine.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s {$start = get-date}<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s {$start}<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">Wednesday, September 18, 2013 2:51:20 PM<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s -FilePath Get-Diagnostics.ps1<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s { &lt;more_commands&gt;}<\/p>\n<p class=\"Code\">Before she moves to a different computer, she disconnects the PSSession. There are several ways to do this, including simply closing her laptop, but she uses the <strong>Disconnect-PSSession<\/strong> cmdlet.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Disconnect-PSSession $s<br \/> Id Name&nbsp;&nbsp; ComputerName&nbsp; State&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&#8212; &#8212;-&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;2 Diag&nbsp;&nbsp; Server01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnected&nbsp; Microsoft.PowerShell&nbsp; None<\/p>\n<p class=\"Code\">Notice that the State is <strong>Disconnected<\/strong> and the Availability is <strong>None<\/strong>, which means that no one is using the session.\nIn Windows PowerShell&nbsp;2.0, if a session is disconnected, all is lost. But in Windows PowerShell&nbsp;3.0, the commands continue to run uninterrupted in the disconnected session. It&#8217;s&hellip;well&hellip;revolutionary!<\/p>\n<h2>Meanwhile, at home&hellip;<\/h2>\n<p>Our IT pro finally finishes her tasks and goes home. After whipping up a gourmet dinner and enjoying an evening bicycle ride, she grabs her Surface Pro, connects to her corporate network, starts Windows PowerShell, and reconnects to the Diag PSSession on Server01. To find the disconnected PSSession, she uses the <strong>ComputerName<\/strong> parameter of the <strong>Get-PSSession<\/strong> cmdlet.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s = Get-PSSession -ComputerName Server01 -Name Diag<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">Id Name&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;&#8212; &#8212;-&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp; 1 Diag&nbsp;&nbsp;&nbsp; Server01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnected&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None\nThe <strong>ComputerName<\/strong> parameter of <strong>Get-PSSession<\/strong> works differently in Windows PowerShell&nbsp;2.0 and Windows PowerShell&nbsp;3.0. In Windows PowerShell&nbsp;3.0, the <strong>ComputerName<\/strong> parameter is an implicit remoting command.<\/p>\n<ul>\n<li>Windows PowerShell&nbsp;2.0: <br \/> Gets all PSSessions in the current session, and selects the ones that connect to Server01.<\/li>\n<li>Windows PowerShell&nbsp;3.0: <br \/> Connects to the Server01 computer, and gets the PSSessions that this user started.<\/li>\n<\/ul>\n<p>She&#8217;s glad that she remembered to name the PSSession, because she has several PSSessions to the Server01 computer, and the ID property is not persistent; it can change with each connection.\nNext, she uses the Connect-PSSession cmdlet to reconnect to the disconnected PSSession.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Connect-PSSession $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">Id Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;9 Diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opened&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp; Available\nNow, the PSSession state is <strong>Opened<\/strong>, indicating that she&#8217;s connected to it, and the Availability is <strong>Available<\/strong>, so she can run commands in the PSSession.\nIf, at this point, she peeks at the Diag PSSession from another computer (or another session on the same computer), it looks a bit different. From the perspective of another session, the Diag PSSession is <strong>Disconnected<\/strong>, that is, not connected to the current session. It is also <strong>Busy<\/strong>, meaning that it is connected to another session.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Get-PSSession -ComputerName Server01 -name Diag<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;Id Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp; 1 Diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disconnected&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Busy\nNow, back in the reconnected PSSession, our IT pro can review the output, and run more commands.\nAnd that <strong>$Start<\/strong> variable from the afternoon? It&#8217;s still there:<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s {$start}<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">Wednesday, September 18, 2013 2:51:20 PM<\/p>\n<h2>Back to work<\/h2>\n<p>When our roving IT pro gets to work bright and early in the morning, she opens her main computer and reconnects to the PSSession. This time, she uses <strong>Receive-PSSession<\/strong>, which gets the results of her commands and automatically reconnects to the PSSession.<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s = Get-PSSession -ComputerName Server01 -name Diag<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;Id Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp; 1 Diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disconnected&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $results = Receive-PSSession $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; $s<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;Id Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ComputerName&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurationName&nbsp;&nbsp;&nbsp;&nbsp; Availability<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&nbsp;&nbsp;&nbsp; &#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp; 7 Diag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Opened&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft.PowerShell&nbsp;&nbsp;&nbsp;&nbsp; Available\nAnd that session-specific <strong>$Start<\/strong> variable is still in the PSSession:<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">PS C:&gt; Invoke-Command -Session $s {$start}<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">&nbsp;<\/p>\n<p class=\"Code\" style=\"padding-left: 30px\">Wednesday, September 18, 2013 2:51:20 PM\nPretty remarkable? In the next post in this series (watch for it on Saturday, October 12), I&#8217;ll show you how to use the <strong>InDisconnectedSessions <\/strong>parameter of <strong>Invoke-Command<\/strong> and share a few &#8220;gotchas&#8221; to keep you out of trouble. In the meantime, try it, and use the following <strong>Leave a comment<\/strong> section to send questions to me and Paul.\n~June\nThanks, June. 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=\"http:\/\/blogs.technet.commailto: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.\n<strong>Ed Wilson, Microsoft Scripting Guy<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Learn about a revolutionary feature in Windows PowerShell&nbsp;3.0 that lets you disconnect from and reconnect to PSSessions. Scripting Guy, Ed Wilson here. We have an exciting guest blog series that is written by Paul Higinbotham, a software design engineer for Windows PowerShell and June Blender, a senior programming writer for Windows Azure Active Directory. [&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,370,57,3,4,45],"class_list":["post-2765","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-guest-blogger","tag-june-blender","tag-remoting","tag-scripting-guy","tag-scripting-techniques","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Learn about a revolutionary feature in Windows PowerShell&nbsp;3.0 that lets you disconnect from and reconnect to PSSessions. Scripting Guy, Ed Wilson here. We have an exciting guest blog series that is written by Paul Higinbotham, a software design engineer for Windows PowerShell and June Blender, a senior programming writer for Windows Azure Active Directory. [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/2765","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=2765"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/2765\/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=2765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=2765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=2765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}