{"id":17970,"date":"2019-08-20T15:02:43","date_gmt":"2019-08-20T23:02:43","guid":{"rendered":"http:\/\/devblogs.microsoft.com\/powershell\/?p=17970"},"modified":"2019-11-18T19:02:44","modified_gmt":"2019-11-19T03:02:44","slug":"powershell-7-preview-3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/powershell-7-preview-3\/","title":{"rendered":"PowerShell 7 Preview 3"},"content":{"rendered":"<div class=\"markdown-body\">\n<h2><a id=\"user-content-powershell-7-preview-3\" class=\"anchor\" href=\"#powershell-7-preview-3\" aria-hidden=\"true\"><\/a>PowerShell 7 Preview 3<\/h2>\n<p>In May, we published our <a href=\"https:\/\/devblogs.microsoft.com\/powershell\/powershell-7-road-map\/\" rel=\"nofollow\">PowerShell 7 Roadmap<\/a>. We have been making progress on our roadmap and are currently on track to have a Generally Available (GA) release by end of this calendar year.<\/p>\n<h2><a id=\"user-content-long-term-servicing\" class=\"anchor\" href=\"#long-term-servicing\" aria-hidden=\"true\"><\/a>Long Term Servicing<\/h2>\n<p>PowerShell 7 GA will also be our first Long Term Servicing (LTS) release which is a change from our current <a href=\"https:\/\/docs.microsoft.com\/powershell\/scripting\/powershell-support-lifecycle\" rel=\"nofollow\">Modern Lifecycle support <\/a>for PowerShell Core 6.\nWe will support PowerShell 7 GA for <a href=\"https:\/\/dotnet.microsoft.com\/platform\/support\/policy\/dotnet-core\" rel=\"nofollow\">as long as .NET Core 3.1 is supported<\/a> before you must upgrade to a newer version to continue to be supported by Microsoft.<\/p>\n<h2><a id=\"user-content-windows-powershell-compatibility\" class=\"anchor\" href=\"#windows-powershell-compatibility\" aria-hidden=\"true\"><\/a>Windows PowerShell compatibility<\/h2>\n<p>One of the main goals of PowerShell 7 is to have a viable replacement for Windows PowerShell 5.1 in production and we&#8217;ve made significant progress towards that goal.<\/p>\n<p>PowerShell 7 Preview 3 is built on <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-net-core-3-0-preview-8\/\" rel=\"nofollow\">.NET Core 3.0 Preview 8<\/a> and leverages the work from the <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/\" rel=\"nofollow\">.NET Team <\/a>to close the gap between .NET Core and .NET Framework. .NET Core 3.0 reintroduces a large number of .NET Framework APIs, opening up a large number of PowerShell modules shipped with Windows to be validated and marked as compatible by our team. Because the compatibility changes to the modules come as part of Windows, the latest version of Windows 10\/Windows Server is required for full module compatibility.<\/p>\n<p>However, on older versions of Windows, some modules may just work if you use:<\/p>\n<div class=\"highlight highlight-source-powershell\">\n<pre>Import-Module &lt;moduleName&gt; -SkipEditionCheck<\/pre>\n<\/div>\n<p>If you have issues with a Microsoft PowerShell module, please open an issue in the <a href=\"https:\/\/github.com\/PowerShell\/PowerShellModuleCoverage\">PowerShellModuleCoverage<\/a> repository!<\/p>\n<p>Expect more content on this specific topic from <a href=\"https:\/\/twitter.com\/joeyaiello\" rel=\"nofollow\">Joey Aiello<\/a> in the near future with more detail on which modules are compatible and where they&#8217;re marked as such.<\/p>\n<h2><a id=\"user-content-new-features-in-preview-3\" class=\"anchor\" href=\"#new-features-in-preview-3\" aria-hidden=\"true\"><\/a>New Features in Preview 3<\/h2>\n<p>This is just a small part of the entire <a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/releases\">changelog<\/a>.\nNew features in this preview from the community and also the PowerShell team:<\/p>\n<h3><a id=\"user-content-experimental-features-on-by-default-in-preview-builds\" class=\"anchor\" href=\"#experimental-features-on-by-default-in-preview-builds\" aria-hidden=\"true\"><\/a>Experimental Features on by default in Preview builds<\/h3>\n<p>We decided to enable all <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.core\/about\/about_experimental_features\" rel=\"nofollow\">Experimental Features <\/a>by default in order to solicit more feedback for the <a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/blob\/master\/docs\/community\/governance.md#powershell-committee\">PowerShell Committee<\/a> to determine if a feature should continue as experimental, move from experimental to stable (non-experimental), or be withdrawn. On Stable builds (as well as Release Candidates), experimental features will continue to be disabled by default.<\/p>\n<p>Note that if you had previously manually <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.core\/enable-experimentalfeature\" rel=\"nofollow\">enabled experimental features<\/a>, your <code>powershell.config.json<\/code>settings file will take precedence and only experimental features listed within that file will be enabled. You can delete that file or run <code>Get-ExperimentalFeature | Enable-ExperimentalFeature<\/code> to ensure all experimental features are enabled. However, if you use the pipeline, you&#8217;ll have to do it again with a future Preview release that has new experimental features.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/53911e3eada7e787ce96fb877059c31b454a7120\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f6578702d666561747572652e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/53911e3eada7e787ce96fb877059c31b454a7120\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f6578702d666561747572652e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/exp-feature.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-single-apartment-thread-as-default\" class=\"anchor\" href=\"#single-apartment-thread-as-default\" aria-hidden=\"true\"><\/a>Single Apartment Thread as default<\/h3>\n<p>In general, you don&#8217;t need to worry about a concept called <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.threading.thread.apartmentstate?view=netcore-3.0\" rel=\"nofollow\">ApartmentState<\/a> which only applies to Windows.<\/p>\n<p>Prior to this release <code>pwsh<\/code> would run as a multi-threaded apartment by default. However, graphical user interface (GUI) APIs such as <a href=\"https:\/\/docs.microsoft.com\/dotnet\/framework\/winforms\/\" rel=\"nofollow\">WinForms<\/a> and <a href=\"https:\/\/docs.microsoft.com\/dotnet\/framework\/wpf\/\" rel=\"nofollow\">WPF<\/a> require a single-threaded apartment. What is important here is that <code>pwsh<\/code> is now the same as <code>powershell.exe<\/code> in regards to apartment state and as such support calling WinForms and WPF APIs from PowerShell script.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/a2871df34513cb80556ad3aeac3e79687c46ec45\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f7374612d7770662e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/a2871df34513cb80556ad3aeac3e79687c46ec45\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f7374612d7770662e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/sta-wpf.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-display-com-method-signature-argument-names\" class=\"anchor\" href=\"#display-com-method-signature-argument-names\" aria-hidden=\"true\"><\/a>Display COM Method Signature Argument Names<\/h3>\n<p>On Windows, if you happen to call COM APIs from PowerShell, a new capability by <a href=\"https:\/\/github.com\/nbkalex\">nbkalex<\/a> will now show the argument names of COM methods instead of just the type information which can be used as simple documentation indicating what arguments should be passed.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/d885e3f7f29b38864213cb3d473390f02da80e58\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393835382d446973706c6179434f4d4d6574686f645369676e61747572654172674e616d65732e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/d885e3f7f29b38864213cb3d473390f02da80e58\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393835382d446973706c6179434f4d4d6574686f645369676e61747572654172674e616d65732e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/9858-DisplayCOMMethodSignatureArgNames.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-consider-dbnull-and-nullstring-as-null\" class=\"anchor\" href=\"#consider-dbnull-and-nullstring-as-null\" aria-hidden=\"true\"><\/a>Consider DBNull and NullString as $null<\/h3>\n<p>If you work with database types, you may get back a <code>[dbnull]::Value<\/code> which is equivalent to <code>$null<\/code> within the database, but in PowerShell, this was not equal to <code>$null<\/code> so you can&#8217;t compare it directly. This change from <a href=\"https:\/\/twitter.com\/vexx32\" rel=\"nofollow\">Joel Sallow<\/a> allows you to compare both <code>[dbnull]::Value<\/code> and <code>[nullstring]::Value<\/code> to <code>$null<\/code> and get <code>$true<\/code>.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/272747792232009141a455852579c8154f5473f9\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393739342d436f6e73696465722d44424e756c6c2d616e642d4e756c6c537472696e672d61732d6e756c6c2e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/272747792232009141a455852579c8154f5473f9\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393739342d436f6e73696465722d44424e756c6c2d616e642d4e756c6c537472696e672d61732d6e756c6c2e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/9794-Consider-DBNull-and-NullString-as-null.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-read-host--prompt-works-for-all-input\" class=\"anchor\" href=\"#read-host--prompt-works-for-all-input\" aria-hidden=\"true\"><\/a>Read-Host -Prompt works for all input<\/h3>\n<p>Due to how <code>Read-Host<\/code> calls into the console host and how the console host prompts for input (such as mandatory parameters that are given a value), you might encounter a situation where using <code>Read-Host<\/code> to prompt for input in your script exhibits unintended behavior when certain characters are used. This has been fixed so <code>Read-Host<\/code> will accept input as expected.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/cadd5fab553390e2baf0024dcac2d36e0228bb3b\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393734332d52656164486f737450726f6d70744e6f74456e746572696e67436f6d6d616e644d6f64652e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/cadd5fab553390e2baf0024dcac2d36e0228bb3b\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f393734332d52656164486f737450726f6d70744e6f74456e746572696e67436f6d6d616e644d6f64652e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/9743-ReadHostPromptNotEnteringCommandMode.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-support-negative-numbers-with--split-operator\" class=\"anchor\" href=\"#support-negative-numbers-with--split-operator\" aria-hidden=\"true\"><\/a>Support negative numbers with -Split operator<\/h3>\n<p>The <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.core\/about\/about_split\" rel=\"nofollow\">-Split operator<\/a> splits one or more strings into substrings. You can optionally specify a value to indicate the maximum number of substrings you want returned.<\/p>\n<p>This new capability by <a href=\"https:\/\/github.com\/ece-jacob-scott\">Jacob Scott<\/a> now allows you to specify the maximum number of substrings as a negative value signifying that the split should happen right to left instead of the usual left to right.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/0f8229ea5730998f7bd3630c47682febf6c7f736\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f383936302d537570706f72744e656761746976654e756d62657273496e53706c69744f70657261746f722e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/0f8229ea5730998f7bd3630c47682febf6c7f736\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f383936302d537570706f72744e656761746976654e756d62657273496e53706c69744f70657261746f722e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/8960-SupportNegativeNumbersInSplitOperator.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-foreach-object--parallel\" class=\"anchor\" href=\"#foreach-object--parallel\" aria-hidden=\"true\"><\/a>ForEach-Object -Parallel<\/h3>\n<p>We&#8217;ve received consistent feedback that PowerShell users use<a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/psworkflow\/?view=powershell-5.1\" rel=\"nofollow\"> PSWorkflow<\/a> primarily to easily run scriptblocks in parallel.<\/p>\n<p>We&#8217;ve added a <code>-Parallel<\/code> parameter to <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.core\/foreach-object\" rel=\"nofollow\"><code>ForEach-Object<\/code><\/a> that accepts a scriptblock to execute in parallel. There is an optional <code>-ThrottleLimit<\/code> parameter to set the maximum threads to use in parallel where it defaults to 5.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/bf7e803f73264390eb0781d768ff770f63406a95\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f666f72656163682d706172616c6c656c2e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/bf7e803f73264390eb0781d768ff770f63406a95\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f666f72656163682d706172616c6c656c2e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/foreach-parallel.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-resolve-appx-reparse-points\" class=\"anchor\" href=\"#resolve-appx-reparse-points\" aria-hidden=\"true\"><\/a>Resolve AppX reparse points<\/h3>\n<p>On Windows 10, if you have apps installed from the <a href=\"https:\/\/www.microsoft.com\/store\/apps\/windows\" rel=\"nofollow\">Windows Store<\/a> and list them in the command line, they show up as 0 byte files. These files are actually a different type of link to the actual executable. With this change, the target executable will now show up when using <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.management\/get-childitem\" rel=\"nofollow\"><code>Get-ChildItem<\/code><\/a>.<\/p>\n<p><a href=\"https:\/\/camo.githubusercontent.com\/8070a92ff559d8eb8d82562bffd22d90998be9e1\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f617070782d726570617273652e676966\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/camo.githubusercontent.com\/8070a92ff559d8eb8d82562bffd22d90998be9e1\/687474703a2f2f646576626c6f67732e6d6963726f736f66742e636f6d2f706f7765727368656c6c2f77702d636f6e74656e742f75706c6f6164732f73697465732f33302f323031392f30382f617070782d726570617273652e676966\" alt=\"gif\" data-canonical-src=\"http:\/\/devblogs.microsoft.com\/powershell\/wp-content\/uploads\/sites\/30\/2019\/08\/appx-reparse.gif\" \/><\/a><\/p>\n<h3><a id=\"user-content-pwsh-as-a-login-shell\" class=\"anchor\" href=\"#pwsh-as-a-login-shell\" aria-hidden=\"true\"><\/a>pwsh as a login shell<\/h3>\n<p>On Linux and macOS systems, there is a concept of a login shell which sets up the environment from which other apps and shells inherit. Prior to this release if you used <a href=\"https:\/\/docs.microsoft.com\/powershell\/module\/microsoft.powershell.core\/about\/about_pwsh\" rel=\"nofollow\"><code>pwsh<\/code><\/a> as your default login shell, you may have noticed that some environment variables are missing or incomplete.<\/p>\n<p>With this change, <code>pwsh<\/code> will work the same as <code>sh<\/code> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bourne_shell\" rel=\"nofollow\">Bourne Shell<\/a> in how it sets up the login environment so that everything works correctly.<\/p>\n<h3><a id=\"user-content-additional-telemetry\" class=\"anchor\" href=\"#additional-telemetry\" aria-hidden=\"true\"><\/a>Additional Telemetry<\/h3>\n<p>In this Preview release, we&#8217;ve added more <a href=\"https:\/\/github.com\/PowerShell\/PowerShell-RFC\/blob\/master\/2-Draft-Accepted\/RFC0036-AdditionalTelemetry.md\">telemetry<\/a>. Please see <a href=\"https:\/\/twitter.com\/sydneysmithreal\" rel=\"nofollow\">Sydney Smith<\/a>&#8216;s blog post on <a href=\"https:\/\/devblogs.microsoft.com\/powershell\/New-Telemetry-in-PowerShell-7-Preview-3\" rel=\"nofollow\">New Telemetry in PowerShell 7 Preview 3<\/a>.<\/p>\n<h2><a id=\"user-content-closing\" class=\"anchor\" href=\"#closing\" aria-hidden=\"true\"><\/a>Closing<\/h2>\n<p>Although this blog post focuses on new features, this release also contains many bug fixes as well as targeted performance improvements.<\/p>\n<p>You can always get the latest version of PowerShell from <a href=\"https:\/\/aka.ms\/get-powershell\" rel=\"nofollow\">https:\/\/aka.ms\/get-powershell<\/a>.<\/p>\n<p>Expect more new features from the community and the PowerShell team in future Preview releases!<\/p>\n<p>Steve Lee\nPowerShell Team<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>PowerShell 7 Preview 3 In May, we published our PowerShell 7 Roadmap. We have been making progress on our roadmap and are currently on track to have a Generally Available (GA) release by end of this calendar year. Long Term Servicing PowerShell 7 GA will also be our first Long Term Servicing (LTS) release which [&hellip;]<\/p>\n","protected":false},"author":685,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-17970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>PowerShell 7 Preview 3 In May, we published our PowerShell 7 Roadmap. We have been making progress on our roadmap and are currently on track to have a Generally Available (GA) release by end of this calendar year. Long Term Servicing PowerShell 7 GA will also be our first Long Term Servicing (LTS) release which [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/17970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/685"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=17970"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/17970\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=17970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=17970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=17970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}