{"id":74311,"date":"2015-11-01T00:01:00","date_gmt":"2015-11-01T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2015\/11\/01\/weekend-scripter-exploring-powershell-arrays\/"},"modified":"2019-02-18T09:34:42","modified_gmt":"2019-02-18T16:34:42","slug":"weekend-scripter-exploring-powershell-arrays","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/weekend-scripter-exploring-powershell-arrays\/","title":{"rendered":"Weekend Scripter: Exploring PowerShell Arrays"},"content":{"rendered":"<p><b style=\"font-size:12px\">Summary<\/b><span style=\"font-size:12px\">: Ed Wilson, Microsoft Scripting Guy, talks about Exploring Windows PowerShell arrays.<\/span><\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. One of the problems I had with Windows PowerShell when I first learned it was handling arrays. Why? Because they were so easy. Well, they are easy, but they are also a bit confusing. Why? Because <b>Get-Member<\/b> seems to hide the type, so I may have an array, and it will report string. But that is something I will talk about in a minute. First, let&#039;s look at creating an array.<\/p>\n<h2>Create an array in PowerShell<\/h2>\n<p>The easiest way to create an array is to simply create a variable and assign more than one item to it. Here is an example:<\/p>\n<p style=\"margin-left:30px\">$a = 1,2,3,4,5<\/p>\n<p>As shown here, if I pipe the <b>$a<\/b> variable to the <b>Get-Member<\/b> (<b>gm<\/b> is an alias) cmdlet, it reports that it is a System.Int32:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $a | gm<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp; TypeName: System.Int32<\/p>\n<p style=\"margin-left:30px\">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MemberType Definition<\/p>\n<p style=\"margin-left:30px\">&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<\/p>\n<p style=\"margin-left:30px\">CompareTo&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; int CompareTo(System.Object value), int CompareTo(int valu&#8230;<\/p>\n<p style=\"margin-left:30px\">Equals&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; bool Equals(System.Object obj), bool Equals(int obj), bool&#8230;<\/p>\n<p style=\"margin-left:30px\">GetHashCode Method&nbsp;&nbsp;&nbsp;&nbsp; int GetHashCode()<\/p>\n<p style=\"margin-left:30px\">GetType&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; type GetType()<\/p>\n<p style=\"margin-left:30px\">GetTypeCode Method&nbsp;&nbsp;&nbsp;&nbsp; System.TypeCode GetTypeCode(), System.TypeCode IConvertibl&#8230;<\/p>\n<p style=\"margin-left:30px\">ToBoolean&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; bool IConvertible.ToBoolean(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToByte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; byte IConvertible.ToByte(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToChar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; char IConvertible.ToChar(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToDateTime&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; datetime IConvertible.ToDateTime(System.IFormatProvider pr&#8230;<\/p>\n<p style=\"margin-left:30px\">ToDecimal&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; decimal IConvertible.ToDecimal(System.IFormatProvider prov&#8230;<\/p>\n<p style=\"margin-left:30px\">ToDouble&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; double IConvertible.ToDouble(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToInt16&nbsp;&nbsp; &nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp; int16 IConvertible.ToInt16(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToInt32&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; int IConvertible.ToInt32(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToInt64&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; long IConvertible.ToInt64(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToSByte&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp; &nbsp;&nbsp;&nbsp;sbyte IConvertible.ToSByte(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToSingle&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; float IConvertible.ToSingle(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToString&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; string ToString(), string ToString(string format), string &#8230;<\/p>\n<p style=\"margin-left:30px\">ToType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; System.Object IConvertible.ToType(type conversionType, Sys&#8230;<\/p>\n<p style=\"margin-left:30px\">ToUInt16&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; uint16 IConvertible.ToUInt16(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToUInt32&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; uint32 IConvertible.ToUInt32(System.IFormatProvider provider)<\/p>\n<p style=\"margin-left:30px\">ToUInt64&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; uint64 IConvertible.ToUInt64(System.IFormatProvider provider)<\/p>\n<p>But if I use <b>$a<\/b> as an input object to <b>Get-Member<\/b>, it reports <b>system.object[]<\/b>. The <b>[] <\/b>means an array. This is shown here:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-11-1-15-01.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-11-1-15-01.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>It is also interesting to look at the <b>.psbase<\/b> property. This is basically a hidden property, meaning that it does not readily appear and Tab expansion does not seem to show it. It is pretty cool. As shown here, it tells me the length, the rank, and other stuff.<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $a.psbase<\/p>\n<p style=\"margin-left:30px\">Length &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 5<\/p>\n<p style=\"margin-left:30px\">LongLength&nbsp;&nbsp;&nbsp;&nbsp; : 5<\/p>\n<p style=\"margin-left:30px\">Rank&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1<\/p>\n<p style=\"margin-left:30px\">SyncRoot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {1, 2, 3, 4&#8230;}<\/p>\n<p style=\"margin-left:30px\">IsReadOnly&nbsp;&nbsp;&nbsp;&nbsp; : False<\/p>\n<p style=\"margin-left:30px\">IsFixedSize&nbsp;&nbsp;&nbsp; : True<\/p>\n<p style=\"margin-left:30px\">IsSynchronized : False<\/p>\n<p style=\"margin-left:30px\">Count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5<\/p>\n<p>Also cool is the <b>PSObject<\/b> property. Note especially, that at the bottom of the output, it says we have three types&mdash;one of which is <b>System.Array<\/b>:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $a.psobject<\/p>\n<p style=\"margin-left:30px\">Members&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {Count = Length, int Length {get;}, long LongLength {get;},<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int Rank {get;}&#8230;}<\/p>\n<p style=\"margin-left:30px\">Properties&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {Count = Length, int Length {get;}, long LongLength {get;},<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int Rank {get;}&#8230;}<\/p>\n<p style=\"margin-left:30px\">Methods&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {void Set(int , System.Object ), System.Object&amp;, mscorlib,<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version=4.0.0.0, Culture=neutral,<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089 Address(int ), System.Object<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get(int ), System.Object GetValue(Params int[] indices),<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Object GetValue(int index), System.Object GetValue(int<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index1, int index2), System.Object GetValue(int index1, int<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index2, int index3), System.Object GetValue(long index),<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Object GetValue(long index1, long index2),<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Object GetValue(long index1, long index2, long<\/p>\n<p style=\"margin-left:30px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index3), System.Object GetValue(Params long[] indices)&#8230;}<\/p>\n<p style=\"margin-left:30px\">ImmediateBaseObject : {1, 2, 3, 4&#8230;}<\/p>\n<p style=\"margin-left:30px\">BaseObject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {1, 2, 3, 4&#8230;}<\/p>\n<p style=\"margin-left:30px\">TypeNames&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {System.Object[], System.Array, System.Object}<\/p>\n<p>If I use the <b>GetType()<\/b> method that is automatically created, it tells me that I have an <b>object[]<\/b> (note the square brackets again) and that my BaseType is an array:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $a.GetType()<\/p>\n<p style=\"margin-left:30px\">IsPublic IsSerial Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BaseType<\/p>\n<p style=\"margin-left:30px\">&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#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; &#8212;&#8212;&#8211;<\/p>\n<p style=\"margin-left:30px\">True&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp; Object[] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.Array<\/p>\n<h2>Use the range operator to save typing<\/h2>\n<p>One of my absolutely positively favorite operators is the range operator. It is simply a couple of dots. It will create an array with the numbers in the range. The reason it is so cool is that I can easily create an array with 2 or with 2,000,000 elements in it. It really doesn&rsquo;t matter. Here is an example:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $b = 1..2000000<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $b.Count<\/p>\n<p style=\"margin-left:30px\">2000000<\/p>\n<p style=\"margin-left:30px\">Is it an array? Well, when I use <b>GetType()<\/b>, it says, yep, it is an array:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; $b.GetType()<\/p>\n<p style=\"margin-left:30px\">IsPublic IsSerial Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BaseType<\/p>\n<p style=\"margin-left:30px\">&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#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; &#8212;&#8212;&#8211;<\/p>\n<p style=\"margin-left:30px\">True&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp; Object[] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.Array<\/p>\n<h2>Create a strongly typed array<\/h2>\n<p>One of the things that is way cool about Windows PowerShell is that it is a strongly typed language, but it behaves as if it were typeless. What this means is that everything is an object, and every object is a type of something. For instance, in the previous array, the type was <b>System.Array<\/b>, but the array held. An <b>int32<\/b> holds numbers from -2147483648 to 2147483647 in size. This is shown here:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; [int32]::MaxValue<\/p>\n<p style=\"margin-left:30px\">2147483647<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; [int32]::MinValue<\/p>\n<p style=\"margin-left:30px\">-2147483648<\/p>\n<p><b>int32 <\/b>is the default. But what if I don&rsquo;t need a number that big? Well, I can change to <b>int16<\/b>. As you can see here, <b>int16<\/b> has a maximum value of 32767:<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; [int16]<\/p>\n<p style=\"margin-left:30px\">IsPublic IsSerial Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BaseType<\/p>\n<p style=\"margin-left:30px\">&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#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; &#8212;&#8212;&#8211;<\/p>\n<p style=\"margin-left:30px\">True&nbsp;&nbsp;&nbsp;&nbsp; True&nbsp;&nbsp;&nbsp;&nbsp; Int16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.ValueType<\/p>\n<p style=\"margin-left:30px\">PS C:\\&gt; [int16]::MaxValue<\/p>\n<p style=\"margin-left:30px\">32767<\/p>\n<p>If I want to ensure that my array does not change, I can use <b>[int16[]]<\/b> to constrain the type or to keep it from changing. If I try to assign a number that is too large, it generates the following error message:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-11-1-15-02.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/hsg-11-1-15-02.png\" alt=\"Image of message\" title=\"Image of message\" \/><\/a><\/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><span style=\"font-size:12px\">&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Ed Wilson, Microsoft Scripting Guy, talks about Exploring Windows PowerShell arrays. Microsoft Scripting Guy, Ed Wilson, is here. One of the problems I had with Windows PowerShell when I first learned it was handling arrays. Why? Because they were so easy. Well, they are easy, but they are also a bit confusing. Why? Because [&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":[442,51,3,61,45],"class_list":["post-74311","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-arrays","tag-getting-started","tag-scripting-guy","tag-weekend-scripter","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Ed Wilson, Microsoft Scripting Guy, talks about Exploring Windows PowerShell arrays. Microsoft Scripting Guy, Ed Wilson, is here. One of the problems I had with Windows PowerShell when I first learned it was handling arrays. Why? Because they were so easy. Well, they are easy, but they are also a bit confusing. Why? Because [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/74311","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=74311"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/74311\/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=74311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=74311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=74311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}