{"id":16731,"date":"2010-10-23T00:01:00","date_gmt":"2010-10-23T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/10\/23\/weekend-scripter-using-windows-powershell-to-make-a-marquee\/"},"modified":"2010-10-23T00:01:00","modified_gmt":"2010-10-23T00:01:00","slug":"weekend-scripter-using-windows-powershell-to-make-a-marquee","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/weekend-scripter-using-windows-powershell-to-make-a-marquee\/","title":{"rendered":"Weekend Scripter: Using Windows PowerShell to Make a Marquee"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><span style=\"font-size: small\"><b>Summary:<\/b> Learn how to display output as moving text by using Windows PowerShell and easy to use techniques.<\/span><\/p>\n<p><span style=\"font-size: small\">&nbsp;<\/span><\/p>\n<p><span style=\"font-size: small\">Microsoft Scripting Guy Ed Wilson here. After a long, hot and oppressive summer, Fall has descended upon Charlotte, <\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/North_Carolina\"><span style=\"font-size: small\">North Carolina<\/span><\/a><span style=\"font-size: small\"> in the United States. The wife (who also scripts) and I decided to head down to the <\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Columbia,_South_Carolina\"><span style=\"font-size: small\">Columbia, South Carolina<\/span><\/a><span style=\"font-size: small\"> <\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Riverbanks_Zoo\"><span style=\"font-size: small\">Riverbanks Zoo<\/span><\/a><span style=\"font-size: small\">. It is an excellent place to spend a cool colorful day. One of the cool things about the Riverbanks Zoo is that they also have an awesome botanical garden. The cool thing about this time of the year is that you might also be able to see a cat playing with a pumpkin&mdash;not something one gets to see every day. In fact, as seen in the following image, it seems that this <\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Script_kiddie\"><span style=\"font-size: small\">script kitty<\/span><\/a><span style=\"font-size: small\"> does not get to play with a pumpkin every day either. He seems completely engrossed. <\/span><\/p>\n<p><span style=\"font-size: small\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/0511.WES-10-23-10-01.jpg\" border=\"0\" \/><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><span style=\"font-size: small\"><\/span>&nbsp;<\/p>\n<p><span style=\"font-size: small\">Anyway, because I am on the road and Sean said I needed a day off, I decided to turn the keyboard over to him. Sean Kearney is a Microsoft MVP for Windows PowerShell. He is a network administrator, a Microsoft Certified Technology Specialist in Windows Server Virtualization and Configuration, and a <\/span><a href=\"http:\/\/www.microsoft.com\/learning\/en\/us\/Books\/9541.aspx\"><span style=\"font-size: small\">Microsoft Certified Systems Engineer<\/span><\/a><span style=\"font-size: small\">. Sean is a devoted and passionate computer enthusiast from the early 80s to the present day, having used just about every microcomputer ever. Sean taught himself computer programming with 65xxmachine code, working with many technologies\u2015but primarily Microsoft. Sean deals with &ldquo;anything thrown at him,&rdquo; from gnawed keyboards to recovery of Exchange servers to networking setups and isolating the realm of the unknown. Currently, he tests and deploys just about any new Microsoft Technology; he also deals with users in an enterprise-class environment. Sean loves Windows PowerShell, <\/span><a href=\"http:\/\/www.microsoft.com\/windows\/windows-7\/default.aspx\"><span style=\"font-size: small\">Windows 7<\/span><\/a><span style=\"font-size: small\">, and Hyper-V, in that order. You will frequently find him hanging out online at <\/span><a href=\"http:\/\/www.powershell.ca\/\"><span style=\"font-size: small\">http:\/\/www.powershell.ca<\/span><\/a><span style=\"font-size: small\">. Here is his post.<\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\">Why do we use computers (or why did we at first)?<\/span><\/p>\n<p><span style=\"font-size: small\">I mean as computer nerds, why?<\/span><\/p>\n<p><span style=\"font-size: small\">They were fun. Today we are going to do something fun and kinda stupid (but mostly fun).<\/span><\/p>\n<p><span style=\"font-size: small\">We will use Windows PowerShell to build a small scrolling marquee &#8211; just because, for no other reason.<\/span><\/p>\n<p><span style=\"font-size: small\">All we will do is take a line of text or data and make it seem to scroll inside a simple marquee, even if the walls of the marquee are invisible for the moment.&nbsp; <\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$TEXT=&rsquo; Steve Ballmer is a cool guy with a cool job.&rsquo;<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">To make it appear the letters are going across, we will get the position of the cursor from <strong>$HOST<\/strong> and keep it on that spot, redrawing the text slightly differently. So part one, remember where the cursor is.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$Position=$HOST.UI.RawUI.CursorPosition<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">Next we will use the <b>substring()<\/b> method to draw one letter, then two, then three from the back to the front.<\/span><\/p>\n<p><span style=\"font-size: small\">If the line has 44 characters, I draw the&nbsp;1st and 1 character, the&nbsp;2nd and two characters, the&nbsp;3rd and 3 characters so that you get this effect.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">S<br \/>St<br \/>Ste<br \/>Stev<br \/>Steve<br \/>Steve <br \/>Steve B<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">Overlaying this onto one spot will make it appear as if&nbsp;they are &ldquo;scrolling&rdquo; to the naked eye.&nbsp; <\/span><\/p>\n<p><span style=\"font-size: small\">To make this occur I will set the <b>CursorPosition<\/b> back to&nbsp;where I started every single time by using this command:<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$HOST.UI.RawUI.CursorPosition=$Position<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">(Remember?&nbsp;We saved that before we started?)<\/span><\/p>\n<p><span style=\"font-size: small\">Now I have to make this into a loop. I will have to repeat this for as many characters as are provided. I can grab this from the <b>.Length<\/b> from the variable <b>$TEXT<\/b>.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$Length=$TEXT.length<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">To simulate a real marquee, I am going to go from left to right. (You can play later and make it do what you want. This is my marquee, nyeah nyeah!)<\/span><\/p>\n<p><span style=\"font-size: small\">To achieve this, I am going to use the&nbsp;<b>PadLeft()<\/b> method to complete the blank space not shown in the word to make my lines seem to come in from the left.&nbsp;To know how many spaces to pad, I just take the length of the string and subtract whatever position I&rsquo;m on. So, you will get this pattern:<\/span><\/p>\n<p><span style=\"font-size: small\"><strong>44 Characters total in my string<\/strong><\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">43 Spaces on the Left&nbsp;&ndash; 1 Letter on the right<br \/>42 Spaces on the Left&nbsp;&ndash;&nbsp;2 Letters on the right<br \/>41 Spaces on the Left&nbsp;&ndash;&nbsp;3 Letters on the right<br \/>40 Spaces on the Left&nbsp;&ndash; 4 Letters on the right<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">The pattern is the number of characters&nbsp;&#8211; the position equals the number of spaces to pad to the left.<\/span><\/p>\n<p><span style=\"font-size: small\">That would produce a loop such as this for a basic marquee.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$TEXT=&rsquo;This is just something I am going to display&rsquo;<br \/>$Position=$HOST.UI.RawUI.CursorPosition<br \/>$Length=$TEXT.length<\/p>\n<p>Foreach ($count in&nbsp;1 .. $Length) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $HOST.UI.RawUI.CursorPosition=$Position<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $text.Substring(0,$count).padleft($Length,&#8217; &#8216;)<br \/>}<br \/><\/span><br \/><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\"><\/span>&nbsp;<\/p>\n<p><span style=\"font-size: small\">Now there are two problems. One, the text scrolled too fast and two, on a real Marquee it would disappear.&nbsp;So we have to have a second loop to make it go away. The count of the letters will not change but we will be doing the reverse, displaying <i>fewer<\/i> instead of more every time, and working our way toward the end, too.&nbsp; Perhaps we&rsquo;ll put in a <b>START-SLEEP<\/b> to slow it down somewhat.<\/span><\/p>\n<p><span style=\"font-size: small\">For those of you running Windows PowerShell on a Commodore 64, you negate the need for a <b>START-SLEEP.<\/b> \ud83d\ude42<\/span><\/p>\n<p><span style=\"font-size: small\">With our line of 44 characters our current process is somewhat different. We will display characters as follows:<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">Steve Ballmer is a cool guy with a cool job.<br \/>teve Ballmer is a cool guy with a cool job.<br \/>eve Ballmer is a cool guy with a cool job.<br \/>ve Ballmer is a cool guy with a cool job.<br \/>e Ballmer is a cool guy with a cool job.<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">&nbsp;<\/span><\/p>\n<p><span style=\"font-size: small\">See the pattern?&nbsp;A <b>substring()<\/b> starting with the following pattern:<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">Position 0&nbsp;&ndash; 44 Characters Shown<br \/>Position 1&nbsp;&ndash; 43 Characters Shown<br \/>Position 2&nbsp;&ndash; 42 Characters Shown<br \/>Position 3&nbsp;&ndash; 41 Characters Shown<br \/>Position 4&nbsp;&ndash; 40 Characters Shown<\/span><\/span><b><i><br \/><\/i><\/b><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\"><\/span>&nbsp;<\/p>\n<p><span style=\"font-size: small\">In addition to all this, I have now put in something to keep track of the position in the substring.&nbsp;Fortunately, the position is relative to the <b>Length<\/b> of the <b>String<\/b> vs. the <b>Counter<\/b> position.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$Characters=$Length-$Counter<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">I can call up and <b>Show<\/b> the <b>$TEXT<\/b>, show those characters, and use a <b>Padright<\/b> like this:<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$TEXT.substring($Characters,$Count).padright($length,&rsquo; &lsquo;)<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">A loop that will do all this will look like the following:<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">Foreach ($count in&nbsp;0 ..$Length) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $characters=$length-$count<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $HOST.UI.RawUI.CursorPosition=$Position<br \/>&nbsp;&nbsp;&nbsp;&nbsp; $text.Substring($characters,$count).padRight($Length,&#8217; &#8216;)<br \/>}<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\"><\/span>&nbsp;<\/p>\n<p><span style=\"font-size: small\">Wait a minute. Didn&rsquo;t I say, &ldquo;I hate to rewrite code that&rsquo;s similar?&rdquo;<\/span><\/p>\n<p><span style=\"font-size: small\">Yes, I did. I guess this means I do not get to take the easy way out do I?&nbsp;Drat.&nbsp;Curses.<\/span><\/p>\n<p><span style=\"font-size: small\">This is not hard. First, define the stuff we are using all the time, even if it is zero sometimes.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$START=1<br \/>$END=$Length<br \/>$ZeroCharacters=0<b><i><\/i><\/b><\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\"><\/span>&nbsp;<\/p>\n<p><span style=\"font-size: small\">Then create a second loop where we &ldquo;flip&rdquo; the positions at the end.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$START=($Length+1)-$START<br \/>$END=$Length-$END<br \/>$ZeroCharacters=1-$ZeroCharacters<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\">Now comes the tricky part.&nbsp;I&rsquo;m going to make sure when I want to do the first loop, the first part of <b>substring(0,$count)<\/b> is always <b>0<\/b>. When I do the second loop, it will always have the&nbsp;<b>$characters<\/b> count.&nbsp;Some multiplication will fix that!<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">$TEXT.Substring(($zerocharacters*$characters),$count)<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">Then we have those pesky <b>padleft()<\/b> and <b>padright()<\/b> methods.&nbsp;Well, that can easily be resolved by using a little <b>boolean<\/b> and mathematical trickery and an already existing variable we are using for the <b>$characters<\/b>.<\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">.padleft(([int]!$zerocharacters*$Length),&#8217; &#8216;).padright(($zerocharacters*$Length),&#8217; &#8216;)<\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">What that nightmarish statement is really doing is giving us a value of <b>(1 x Length)<\/b> on the <b>Padleft()<\/b> method only when <b>$ZeroCharacters<\/b> is making a Zero Value and the reverse for <b>PadRight()<\/b> when it is the opposite.<\/span><\/p>\n<p><span style=\"font-size: small\">*ACK* *UGH!!* *FAINT!!!*<\/span><\/p>\n<p><span style=\"font-size: small\">So boys and girls, sneak in some <b>START-SLEEP&nbsp;&ndash;milliseconds 50<\/b> for some flavor and we <b><i>RELEASE THE KRAKEN<\/i><\/b>!<\/span><\/p>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\"><\/span><\/span><\/p>\n<div>\n<blockquote>\n<p><span style=\"font-size: small\"><span style=\"font-family: courier new,courier\">function global:start-marquee ($text) { <\/p>\n<p># Clear the console of rubbish <br \/>CLEAR-HOST <\/p>\n<p># Are how much information the user keyed in<br \/>$length=$text.Length <\/p>\n<p># Mark our Start end End points for our Marquee loop<br \/>$Start=1<br \/>$End=$Length<br \/>$zerocharacters=0 <\/p>\n<p># Get the position of the Cursor on the screen and move it<br \/>$Position=$HOST.UI.RawUI.CursorPosition<br \/>$Position.X=4<br \/>$Position.Y=5 <\/p>\n<p># Do this over and repeatedly and over&nbsp;&hellip;.<br \/>&nbsp;&nbsp;&nbsp; do {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach ($count in $start .. $end) { <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Keep everthing on the same line<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $HOST.UI.RawUI.CursorPosition=$Position <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Remember how many characters for that OTHER loop<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $characters=($length &#8211; $count) <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Put exactly WHAT we what WHERE we want WHEN we want<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $text.Substring(($zerocharacters*$characters),$count).padleft(([int]!$zerocharacters*$Length),&#8217; &#8216;).padright(($zerocharacters*$Length),&#8217; &#8216;)<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Time&nbsp;a quick&nbsp;&lsquo;POWER Nap&rsquo;&nbsp;&ndash; Oh sorry, was that Bad?<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start-sleep -milliseconds 50 <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Flip the counters around<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $start=($length+1)-$start<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $end=$length-$end<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $zerocharacters=1-$zerocharacters <br \/>&nbsp;&nbsp;&nbsp; } Until ($start -eq -9) # You can change this to wait for a key if you REAAALY want \ud83d\ude42 <br \/>} <\/span><\/span><\/p>\n<\/blockquote>\n<\/div>\n<p><span style=\"font-size: small\">As seen in the following figure, the text now scrolls. <\/span><\/p>\n<p><span style=\"font-size: small\"><img decoding=\"async\" height=\"85\" width=\"601\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1016.WES-10-23-10-02.jpg\" border=\"0\" \/><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\"><\/span><\/p>\n<p><span style=\"font-size: small\">A static screenshot does not really show the picture. I have uploaded <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=BTkJYCMJSsg\"><span style=\"font-size: small\">a video demonstration of the script in action<\/span><\/a><span style=\"font-size: small\">. Check it out. There you have it &#8211; silly, but fun.&nbsp;Thus confirming two key facts; Windows PowerShell is both fun and useful, and Sean really needs to find more to do with his spare time.<\/span><\/p>\n<p><span style=\"font-size: small\">Thanks again to Sean for sharing his script and knowledge with us. Don&#8217;t forget to join us tomorrow for Weekend Scripter.<\/span><\/p>\n<p><span style=\"font-size: small\">We invite you to follow us on <\/span><a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingguystwitter\"><span style=\"font-size: small\">Twitter<\/span><\/a><span style=\"font-size: small\"> or <\/span><a href=\"http:\/\/bit.ly\/scriptingguysfacebook\"><span style=\"font-size: small\">Facebook<\/span><\/a><span style=\"font-size: small\">. If you have any questions, send email to us at <\/span><a target=\"_blank\" href=\"mailto:scripter@microsoft.com\"><span style=\"font-size: small\">scripter@microsoft.com<\/span><\/a><span style=\"font-size: small\"> or post them on the <\/span><a href=\"http:\/\/social.technet.microsoft.com\/Forums\/en\/ITCG\/threads\/\"><span style=\"font-size: small\">Official Scripting Guys Forum<\/span><\/a><span style=\"font-size: small\">. See you tomorrow. Until then, peace.<\/span><\/p>\n<p><span style=\"font-size: small\">&nbsp;<\/span><\/p>\n<p><b><span style=\"font-size: small\">Ed Wilson and Craig Liebendorfer, Scripting Guys<\/span><\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Summary: Learn how to display output as moving text by using Windows PowerShell and easy to use techniques. &nbsp; Microsoft Scripting Guy Ed Wilson here. After a long, hot and oppressive summer, Fall has descended upon Charlotte, North Carolina in the United States. The wife (who also scripts) and I decided to head down [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[25,56,3,4,154,61,45],"class_list":["post-16731","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-displaying-output","tag-guest-blogger","tag-scripting-guy","tag-scripting-techniques","tag-sean-kearney","tag-weekend-scripter","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; Summary: Learn how to display output as moving text by using Windows PowerShell and easy to use techniques. &nbsp; Microsoft Scripting Guy Ed Wilson here. After a long, hot and oppressive summer, Fall has descended upon Charlotte, North Carolina in the United States. The wife (who also scripts) and I decided to head down [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16731","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\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=16731"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16731\/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=16731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=16731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=16731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}