{"id":13975,"date":"2018-01-24T17:09:05","date_gmt":"2018-01-25T01:09:05","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/?p=13975"},"modified":"2023-04-04T08:19:46","modified_gmt":"2023-04-04T16:19:46","slug":"powershell-core-6-1-roadmap","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/powershell-core-6-1-roadmap\/","title":{"rendered":"PowerShell Core 6.1 Roadmap"},"content":{"rendered":"<p>The release of<span>\u00a0<\/span><a href=\"https:\/\/blogs.msdn.microsoft.com\/powershell\/2018\/01\/10\/powershell-core-6-0-generally-available-ga-and-supported\/\" rel=\"nofollow\">PowerShell Core 6.0<\/a><span>\u00a0<\/span>is only the beginning and we are already thinking about the next leg of our journey.<\/p>\n<p>Most of the effort of the team with PowerShell Core 6.0 was in these areas:<\/p>\n<ul>\n<li>Learning how to work in an Open Source project (and we are still learning)<\/li>\n<li>Complete the port of PowerShell to CoreCLR<\/li>\n<li>Add test coverage for PowerShell Core<\/li>\n<li>Build\/integrate tooling for automating builds, packaging, test execution, and releases<\/li>\n<\/ul>\n<p>The community did some amazing work to add new capabilities in both the engine as well as cmdlets!<\/p>\n<p>If you participated in the January 2018<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PowerShell\/PowerShell-RFC\/tree\/master\/CommunityCall\">Community Call<\/a><span>\u00a0<\/span>you already got an early preview of this content.<\/p>\n<h2>Timeline<\/h2>\n<p>First, we&#8217;re publishing PowerShell Core 6.0.1 as a servicing release by the end of January in order to update to .NET Core 2.0.5.\u00a0 There are no other changes in the 6.0.1 release.<\/p>\n<p>After that, the plan going forward is to have new supported minor releases every 6 months.\u00a0 This means that we&#8217;re targeting a late June,\u00a0 early July 2018 release for PSCore 6.1.<\/p>\n<p>We will continue to have preview releases approximately every 3 weeks.<\/p>\n<p><a href=\"https:\/\/github.com\/powershell\/powershell-rfc\">RFCs<\/a><span>\u00a0<\/span>for new features we plan to deliver will be published in February.<\/p>\n<h2>Milestone Quality<\/h2>\n<p>There&#8217;s some work that we deferred and will be a focus to be completed in February:<\/p>\n<ul>\n<li>Complete PowerShell Standard SDK &#8211; including guidance on converting Windows PowerShell modules to portable modules that are also PowerShell Core compatible<\/li>\n<li>Author documentation in the<span>\u00a0<\/span><a href=\"https:\/\/github.com\/powershell\/powershell-docs\">Docs Repo<\/a><span>\u00a0<\/span>for issues\/PRs labeled with<span>\u00a0<\/span><a href=\"https:\/\/github.com\/powershell\/powershell\/issues?utf8=%E2%9C%93&amp;q=label%3A%22Documentation+Needed%22+\"><code>Documentation Needed<\/code><\/a><\/li>\n<li>Backport changes in PowerShell Core 6.0 to Windows PowerShell 5.1 for issues\/PRs labeled with<span>\u00a0<\/span><a href=\"https:\/\/github.com\/powershell\/powershell\/issues?utf8=%E2%9C%93&amp;q=label%3AConsider-WindowsPowerShell51+\"><code>Consider-WindowsPowerShell51<\/code><\/a>\n<ul>\n<li>Note that depending on the risk of the change,\neven if an issue\/PR has this labeled,\nit doesn&#8217;t guarantee it&#8217;ll be backported<\/li>\n<\/ul>\n<\/li>\n<li>Enable automated test runs for all supported distros\/platforms<\/li>\n<li>Build infrastructure and tooling for cross system remoting tests<\/li>\n<li>Have consistency and meet compliance requirements for the following repos:\n<ul>\n<li><a href=\"https:\/\/github.com\/powershell\/powershelleditorservices\">PSEditorServices<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/powershell\/vscode-powershell\">VSCode-PowerShell<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/PowerShell\/PSScriptAnalyzer\">PSScriptAnalyzer<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/PowerShell\/Microsoft.PowerShell.Archive\">Archive Module<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/PowerShell\/psl-omi-provider\">PSRP WSMan Client for non-Windows<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>New Features<\/h2>\n<p>Being an open source project means that different people can invest in different priorities and submit their changes via pull requests,\u00a0 these are the areas that the PowerShell team will be focusing on.\u00a0 Some of these will be complete while others may be just the start of something bigger.<\/p>\n<h3>Security Parity with Windows PowerShell<\/h3>\n<p>The original port of PowerShell stubbed out support for<span>\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/device-security\/device-guard\/introduction-to-device-guard-virtualization-based-security-and-code-integrity-policies\" rel=\"nofollow\">DeviceGuard<\/a>\/<a href=\"https:\/\/docs.microsoft.com\/en-us\/previous-versions\/windows\/it-pro\/windows-server-2008-R2-and-2008\/dd759117(v=ws.11)\" rel=\"nofollow\">AppLocker<\/a><span>\u00a0<\/span>because those APIs were not available on<span>\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/get-started\/getting-started-with-nano-server\" rel=\"nofollow\">Nano Server<\/a>.\u00a0 This work will ensure that DeviceGuard\/AppLocker policies are enforced in PowerShell Core 6.0 on Windows systems.<\/p>\n<h3>Run Signed Script Blocks Remotely<\/h3>\n<p>PowerShell supports restricting access using<span>\u00a0<\/span><a href=\"https:\/\/blogs.msdn.microsoft.com\/powershell\/2017\/11\/02\/powershell-constrained-language-mode\/\" rel=\"nofollow\">constrained language mode<\/a><span>\u00a0<\/span>and only allowing signed scripts with a trusted certificate to run with<span>\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.core\/about\/about_language_modes?view=powershell-6\" rel=\"nofollow\">Full Language mode<\/a>.\u00a0 This new capability will allow using<span>\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.core\/invoke-command?view=powershell-6\" rel=\"nofollow\"><code>Invoke-Command<\/code><\/a><span>\u00a0<\/span>to remotely execute a signed script block on a target locked down system with Full Language mode.<\/p>\n<h3>Windows PowerShell Compatibility Pack<\/h3>\n<p>With the announcement of the<span>\u00a0<\/span><a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/11\/16\/announcing-the-windows-compatibility-pack-for-net-core\/\" rel=\"nofollow\">Windows Compatibility Pack for .NET Core<\/a> for .NET Core, PowerShell Core will regain some APIs that had been dropped in the transition to .NET Core.\u00a0 This means we can re-enable some cmdlets that weren&#8217;t part of the PowerShell Core 6.0 release: WMI, EventLog, and PerfCounters.\u00a0 In addition, some highly requested APIs will be available which means that some existing Windows PowerShell modules might just work in PowerShell Core 6.0.\u00a0 This module will replace the<span>\u00a0<\/span><a href=\"https:\/\/www.powershellgallery.com\/packages\/WindowsPSModulePath\/1.0.0\" rel=\"nofollow\">WindowsPSModulePath<\/a><span>\u00a0<\/span>module to add the Windows PowerShell<span>\u00a0<\/span><code>$env:PSModulePath<\/code><span>\u00a0<\/span>to PowerShell Core 6.0.\u00a0 Finally, we can use this module to optionally add back some aliases that we removed from PowerShell Core 6.0 that exist in Windows PowerShell.<\/p>\n<h3>Concurrency in PowerShell Script<\/h3>\n<p>You can do threading today in PowerShell using<span>\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/api\/system.management.automation.runspaces.runspace?view=pscore-6.0.0\" rel=\"nofollow\">runspaces<\/a>, however, it may be complex for some users.\u00a0 Rather than spend time creating something from scratch, we&#8217;re evaluating two existing modules that might already meet our needs:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/PaulHigin\/PSThreadJob\">PSThreadJob<\/a><span>\u00a0<\/span>created by one of engineers on my team,<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PaulHigin\">Paul<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/proxb\/PoshRSJob\">PoshRSJob<\/a><span>\u00a0<\/span>created by a PowerShell MVP,<span>\u00a0<\/span><a href=\"https:\/\/github.com\/proxb\">Boe<\/a><\/li>\n<\/ul>\n<h3>PSReadLine 2.0 GA<\/h3>\n<p><a href=\"https:\/\/www.powershellgallery.com\/packages\/PSReadLine\" rel=\"nofollow\">PSReadLine<\/a><span>\u00a0<\/span>is our default interactive experience on Windows PowerShell 5.1 and PowerShell Core 6.0.\u00a0 This is a side project by<span>\u00a0<\/span><a href=\"https:\/\/github.com\/lzybkr\">Jason Shirk<\/a><span>\u00a0<\/span>who recently put out a<span>\u00a0<\/span><a href=\"https:\/\/github.com\/lzybkr\/PSReadLine\/releases\/tag\/v2.0.0-beta1\">Beta1<\/a><span>\u00a0<\/span>release of 2.0. Some of my engineers will be spending time contributing to this project to get it to production quality so we can include it in PowerShell Core 6.0.<\/p>\n<h3>Machine Learning and PowerShell<\/h3>\n<p>A new area that we want to explore is leveraging the cloud and machine learning to provide inline suggestions at the interactive command-line.\u00a0 The two primary scenarios I want to target is to support both local and cloud based suggestions. This is a completely new area for the team so expect the initial release to be limited, but something we can build upon going forward.<\/p>\n<p>An RFC will be published for this feature.<\/p>\n<h3>Experimental Feature Flags<\/h3>\n<p>As we build new capabilities, some features may not be fully complete where we don&#8217;t have sufficient community feedback. Being experimental, we may make large design changes that would not be backwards compatible. Users can choose to not use these features by not opting into turning on these feature flags.\u00a0 Feature flags can also allow us to have two different implementations of the same feature (that could not work side-by-side) and collect feedback that way.<\/p>\n<p>An RFC will be published for this feature.<\/p>\n<h3>HelpSystem as a Module<\/h3>\n<p>This is the start of a bigger work item to componentize PowerShell so that we can have a smaller distribution of PowerShell Core for managed targets that don&#8217;t need all of the interactive experience components.<\/p>\n<p>PowerShell help content today is written in XML.\u00a0 However, our<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PowerShell\/PowerShell-Docs\">docs<\/a><span>\u00a0<\/span>are maintained as<span>\u00a0<\/span><a href=\"https:\/\/guides.github.com\/features\/mastering-markdown\/\">Markdown<\/a> and we have<span>\u00a0<\/span><a href=\"https:\/\/github.com\/powershell\/platyps\">platyPS<\/a><span>\u00a0<\/span>that converts the Markdown to XML.\u00a0 We want to remove the need to convert to XML and have the HelpSystem use Markdown natively.\u00a0 After this work is done, the help system would still be included with the general distribution of PowerShell Core as an independent module.<\/p>\n<p>An RFC for this has already been<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PowerShell\/PowerShell-RFC\/pull\/102\">published<\/a>.<\/p>\n<h3>Markdown Rendering Support<\/h3>\n<p>In addition to help being in Markdown natively, we would like to be able to render in the console any Markdown.\u00a0 For example, error messages or script output can leverage Markdown to provide emphasis.\u00a0 Initially there will be limited rendering support, but this is something we can improve over time.\u00a0 For example, eventually supporting plug-able syntax highlighting for code fencing.<\/p>\n<p>An RFC will be published for this feature.<\/p>\n<h3>Enable<span>\u00a0<\/span><code>sudo<\/code><span>\u00a0<\/span>to Work Over PowerShell Remoting (for non-Windows)<\/h3>\n<p>On Unix-based systems, administrators use<span>\u00a0<\/span><code>sudo<\/code><span>\u00a0<\/span>to elevate themselves to run administrator tasks requiring higher privilege.\u00a0 Due to how<span>\u00a0<\/span><code>sudo<\/code><span>\u00a0<\/span>works, PowerShell remoting is not able to pass the request for the administrator password prompt from<span>\u00a0<\/span><code>sudo<\/code>.\u00a0 Note that<span>\u00a0<\/span><code>sudo<\/code><span>\u00a0<\/span>works perfectly fine locally in PowerShell Core 6.0.<\/p>\n<h3>Enable-SSHRemoting<\/h3>\n<p>PowerShell includes a<span>\u00a0<\/span><code>Enable-PSRemoting<\/code><span>\u00a0<\/span>command on Windows to make it easy to enable PowerShell remoting over WSMan using WinRM.\u00a0 This feature adds a new<span>\u00a0<\/span><code>Enable-SSHRemoting<\/code><span>\u00a0<\/span>command that would initially identify missing dependencies (like OpenSSH) and also configure sshd_config to enable PowerShell remoting over SSH.<\/p>\n<p>An RFC for this has already been<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PowerShell\/PowerShell-RFC\/blob\/master\/1-Draft\/RFC0012-Enable-SSH-Remoting.md\">published<\/a>.<\/p>\n<h3>PowerShell Module for IoT (Internet of Things)<\/h3>\n<p>PowerShell Core 6.0 has experimental support for ARM systems running<span>\u00a0<\/span><a href=\"https:\/\/developer.microsoft.com\/en-us\/windows\/iot\" rel=\"nofollow\">Windows 10 IoT<\/a><span>\u00a0<\/span>or<span>\u00a0<\/span><a href=\"https:\/\/www.raspberrypi.org\/blog\/raspbian-stretch\/\" rel=\"nofollow\">Raspbian (Stretch)<\/a>.<\/p>\n<p>To help bootstrap the community to develop more interesting uses for IoT using PowerShell, we want to provide the start of a module to enable using PowerShell script to interact with sensors attached to your IoT device.\u00a0 We would then work with the community to increase capability of this module over time.<\/p>\n<p>An RFC will be published for this feature.<\/p>\n<h2>Closing<\/h2>\n<p>As you can see, we have a large set of work ahead of us for the 6.1 release.<\/p>\n<p>The feature set was decided based on:<\/p>\n<ul>\n<li>Existing customer feedback or known customer pain points<\/li>\n<li>Driving towards longer goals through strategic investments<\/li>\n<li>Specific partner\/customer asks<\/li>\n<li>Interests within the PSCore engineering team<\/li>\n<\/ul>\n<p>The next 6 months will be lots of work, but it&#8217;ll also be fun.\u00a0 I also expect the community to continue to contribute new features beyond this list for 6.1.\u00a0 My team will continue to fix bugs, respond to issues, review PRs, and merge PRs while working on 6.1.<\/p>\n<p>Please feel free to provide<span>\u00a0<\/span><a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/issues\/6015\">feedback<\/a><span>\u00a0<\/span>on the PowerShell Core 6.1 Roadmap via GitHub!<\/p>\n<p>Steve Lee\nPrincipal Engineering Manager\nPowerShell<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The release of\u00a0PowerShell Core 6.0\u00a0is only the beginning and we are already thinking about the next leg of our journey. Most of the effort of the team with PowerShell Core 6.0 was in these areas: Learning how to work in an Open Source project (and we are still learning) Complete the port of PowerShell to [&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":[3187],"class_list":["post-13975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-roadmap"],"acf":[],"blog_post_summary":"<p>The release of\u00a0PowerShell Core 6.0\u00a0is only the beginning and we are already thinking about the next leg of our journey. Most of the effort of the team with PowerShell Core 6.0 was in these areas: Learning how to work in an Open Source project (and we are still learning) Complete the port of PowerShell to [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/13975","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=13975"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/13975\/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=13975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=13975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=13975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}