{"id":4189,"date":"2013-02-09T00:01:00","date_gmt":"2013-02-09T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2013\/02\/09\/weekend-scripter-playing-around-with-powershell-namespace-apartmentstate\/"},"modified":"2013-02-09T00:01:00","modified_gmt":"2013-02-09T00:01:00","slug":"weekend-scripter-playing-around-with-powershell-namespace-apartmentstate","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/weekend-scripter-playing-around-with-powershell-namespace-apartmentstate\/","title":{"rendered":"Weekend Scripter: Playing Around with PowerShell Namespace ApartmentState"},"content":{"rendered":"<p><strong style=\"font-size: 12px\">Summary:<\/strong><span style=\"font-size: 12px\"> Microsoft Scripting Guy, Ed Wilson, talks about exploring the Windows PowerShell namespace ApartmentState property.<\/span><\/p>\n<p>Microsoft Scripting Guy, Ed Wilson, is here. Ah, it is the weekend. It is not that I &ldquo;live for weekends&rdquo; or anything like that. It is just that weekends are different. I generally spend more time preparing my breakfast&mdash;Irish steel-cut oats are not out of the question (and it takes me a good 45 minutes to cool steel-cut oats). I take extra care in preparing just the right pot of tea to suit my mood, and I spend long hours playing around with Windows PowerShell&mdash;often with no preconceived results in mind. I just want to play, explore, and learn. During the week, I always have a plan&mdash;I know what the next 20 Hey, Scripting Guy! Blog posts will be. I always work towards a plan. No so on the weekend.&nbsp;<\/p>\n<h2>Windows PowerShell&nbsp;3.0 console<\/h2>\n<p>Did you know that in Windows PowerShell 3.0, we changed the Windows PowerShell console from multi-threaded apartment (MTA) to single-threaded apartment (STA)? If you did not notice the change, you are probably not doing anything that requires MTA mode. If all of a sudden, you have some Windows PowerShell&nbsp;2.0 or even Windows PowerShell&nbsp;1.0 scripts that no longer work, now you know why.<\/p>\n<p style=\"padding-left: 30px\"><strong>Note<\/strong> &nbsp;&nbsp;If you need a refresher on apartment models, refer to <a href=\"http:\/\/blogs.msdn.com\/b\/cbrumme\/archive\/2004\/02\/02\/66219.aspx\" target=\"_blank\">Apartments and Pumping in the CLR<\/a><em> <\/em>on Chris Brumme&rsquo;s blog.<\/p>\n<p>The Windows PowerShell&nbsp;2.0 defaults were the Windows PowerShell ISE opened in STA mode, and the Windows PowerShell console opened in MTA mode. In Windows PowerShell&nbsp;3.0, both the Windows PowerShell console and the Windows PowerShell ISE open in STA mode. By returning the <strong>Runspace<\/strong> property from the <strong>$host<\/strong> automatic variable, I obtained useful information about the <strong>Runspace<\/strong>. The following command shows this.<\/p>\n<p style=\"padding-left: 30px\">$host.Runspace<\/p>\n<p>The command and associated output from the command are shown in the following image.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2450.hsg-2-9-13-01.png\"><img decoding=\"async\" title=\"Image of command output\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2450.hsg-2-9-13-01.png\" alt=\"Image of command output\" \/><\/a><\/p>\n<p>I can pick up the host name as well as the ApartmentState directly. This technique is shown here.<\/p>\n<p style=\"padding-left: 30px\">15:42 C:\\&gt; $host.name<\/p>\n<p style=\"padding-left: 30px\">ConsoleHost<\/p>\n<p style=\"padding-left: 30px\">15:42 C:\\&gt; $host.Runspace.ApartmentState<\/p>\n<p style=\"padding-left: 30px\">STA<\/p>\n<p>In the Windows PowerShell ISE, the following results are shown.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; $host.Name<\/p>\n<p style=\"padding-left: 30px\">Windows PowerShell ISE Host<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; $host.Runspace.ApartmentState<\/p>\n<p style=\"padding-left: 30px\">STA<\/p>\n<p>The <strong>Runspace<\/strong><em> <\/em>property returns a <strong>LocalRunSpace<\/strong> object. The members of this object are shown here.<\/p>\n<p style=\"padding-left: 30px\">15:45 C:\\&gt; $host.Runspace | gm<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; TypeName: System.Management.Automation.Runspaces.LocalRunspace<\/p>\n<p style=\"padding-left: 30px\">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; MemberType Definition<\/p>\n<p style=\"padding-left: 30px\">&#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; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">AvailabilityChanged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.EventHandler`1[System.Management.A&#8230;<\/p>\n<p style=\"padding-left: 30px\">StateChanged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.EventHandler`1[System.Management.A&#8230;<\/p>\n<p style=\"padding-left: 30px\">ClearBaseTransaction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void ClearBaseTransaction()<\/p>\n<p style=\"padding-left: 30px\">Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp; &nbsp;&nbsp;&nbsp;void Close()<\/p>\n<p style=\"padding-left: 30px\">CloseAsync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void CloseAsync()<\/p>\n<p style=\"padding-left: 30px\">Connect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void Connect()<\/p>\n<p style=\"padding-left: 30px\">ConnectAsync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void ConnectAsync()<\/p>\n<p style=\"padding-left: 30px\">CreateDisconnectedPipeline&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; System.Management.Automation.Runspaces.Pi&#8230;<\/p>\n<p style=\"padding-left: 30px\">CreateDisconnectedPowerShell Method&nbsp;&nbsp;&nbsp;&nbsp; powershell CreateDisconnectedPowerShell()<\/p>\n<p style=\"padding-left: 30px\">CreateNestedPipeline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; System.Management.Automation.Runspaces.Pi&#8230;<\/p>\n<p style=\"padding-left: 30px\">CreatePipeline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; System.Management.Automation.Runspaces.Pi&#8230;<\/p>\n<p style=\"padding-left: 30px\">Disconnect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void Disconnect()<\/p>\n<p style=\"padding-left: 30px\">DisconnectAsync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void DisconnectAsync()<\/p>\n<p style=\"padding-left: 30px\">Dispose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void Dispose(), void IDisposable.Dispose()<\/p>\n<p style=\"padding-left: 30px\">Equals&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp; &nbsp;&nbsp;bool Equals(System.Object obj)<\/p>\n<p style=\"padding-left: 30px\">GetApplicationPrivateData&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; psprimitivedictionary GetApplicationPriva&#8230;<\/p>\n<p style=\"padding-left: 30px\">GetCapabilities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">GetHashCode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; int GetHashCode()<\/p>\n<p style=\"padding-left: 30px\">GetType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; type GetType()<\/p>\n<p style=\"padding-left: 30px\">Open&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void Open()<\/p>\n<p style=\"padding-left: 30px\">OpenAsync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void OpenAsync()<\/p>\n<p style=\"padding-left: 30px\">ResetRunspaceState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void ResetRunspaceState()<\/p>\n<p style=\"padding-left: 30px\">SetBaseTransaction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; void SetBaseTransaction(System.Transactio&#8230;<\/p>\n<p style=\"padding-left: 30px\">ToString&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method&nbsp;&nbsp;&nbsp;&nbsp; string ToString()<\/p>\n<p style=\"padding-left: 30px\">ApartmentState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Threading.ApartmentState Apartment&#8230;<\/p>\n<p style=\"padding-left: 30px\">ConnectionInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">Debugger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Debugger Deb&#8230;<\/p>\n<p style=\"padding-left: 30px\">Events&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.PSEventManag&#8230;<\/p>\n<p style=\"padding-left: 30px\">InitialSessionState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.In&#8230;<\/p>\n<p style=\"padding-left: 30px\">InstanceId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; guid InstanceId {get;}<\/p>\n<p style=\"padding-left: 30px\">JobManager&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.JobManager J&#8230;<\/p>\n<p style=\"padding-left: 30px\">LanguageMode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.PSLanguageMo&#8230;<\/p>\n<p style=\"padding-left: 30px\">OriginalConnectionInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">RunspaceAvailability&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">RunspaceConfiguration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">RunspaceStateInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Ru&#8230;<\/p>\n<p style=\"padding-left: 30px\">SessionStateProxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.Se&#8230;<\/p>\n<p style=\"padding-left: 30px\">ThreadOptions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; System.Management.Automation.Runspaces.PS&#8230;<\/p>\n<p style=\"padding-left: 30px\">Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; version Version {get;}<\/p>\n<p>The <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.management.automation.runspaces.runspace(v=vs.85).aspx\" target=\"_blank\">Runspace object is documented on MSDN<\/a>. This means, that if I wish, I can access the same information via the .NET Framework. This technique is shown here.<\/p>\n<p style=\"padding-left: 30px\">15:48 C:\\&gt; [System.Management.Automation.Runspaces.runspace]::DefaultRunspace.Apartme<\/p>\n<p style=\"padding-left: 30px\">ntState<\/p>\n<p style=\"padding-left: 30px\">STA<\/p>\n<p>Hey, I don&rsquo;t know about you, but for me, I prefer to access the information via <strong>$host<\/strong> (although keep in mind that tab expansion does work for these types of things now).<\/p>\n<p>Oh well, I am off to do some other stuff on this fine PowerShell day. Join me tomorrow for an article from the Scripting Wife about the Winter 2013 Scripting Games. Yes, if you don&rsquo;t know, they are going on right now.<\/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 exploring the Windows PowerShell namespace ApartmentState property. Microsoft Scripting Guy, Ed Wilson, is here. Ah, it is the weekend. It is not that I &ldquo;live for weekends&rdquo; or anything like that. It is just that weekends are different. I generally spend more time preparing my breakfast&mdash;Irish steel-cut [&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,61,45],"class_list":["post-4189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-powershell-3","tag-scripting-guy","tag-weekend-scripter","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, talks about exploring the Windows PowerShell namespace ApartmentState property. Microsoft Scripting Guy, Ed Wilson, is here. Ah, it is the weekend. It is not that I &ldquo;live for weekends&rdquo; or anything like that. It is just that weekends are different. I generally spend more time preparing my breakfast&mdash;Irish steel-cut [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/4189","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=4189"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/4189\/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=4189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=4189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=4189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}