Repository navigation
Description
This is a preliminary, WIP roadmap/plan for what we on the @PowerShell/powershell-committee believe needs to be in a PowerShell 6.0 release. We will be iterating on this significantly based on your feedback, as well as potentially shifting internal priorities. The goal is for all line items here to eventually be represented by issues attached to either the 6.0.0 or 6.0.0-beta milestones, so that you anyone can look in and see how far along we are towards a 6.0 release.
I also plan on publishing a blog to break down our plans in more detail sometime soon. In the meantime, please join us on the PowerShell Core Community Call tomorrow @ 9am PST where we'll be talking about this in more detail.
If you believe we're missing something here that's absolutely critical for the 6.0 release, please let us know below in the comments or on our monthly Community Call. Thanks!
[cut] means something we've decided is not required to ship 6.0.0 final and we'll address in a future release (not that it's cut forever)
- Everything in the 6.0.0-HighPriority milestone
- Test coverage
- Identified test gaps fixed
- Un-hit code coverage analyzed and understood
- start here
- Cross-platform, cross-machine remoting tests Cross-plat remoting tests need to be available for PowerShell Core #2436
- https://httpbin.org/ is unreliable for web requests testing Tests should not rely on external websites which lead to random failures #2504
- sudo support
-
sudo <native command>should work from within PowerShell - [cut]
sudo <PowerShell cmdlet>should work from within PowerShell Support sudo <PowerShell cmdlet> #3232 - [cut] Misc
sudobugfixes- [cut] sudo command does not work in remote session to Linux machine sudo command does not work in remote session to Linux machine #1527
-
- Native globbing support Implement shell globbing #954
- Jobs
-
Start-JobInvestigate why Start-Job fails #452 - Other
*-Jobcmdlets Provide additional tests for the *-Job cmdlets #3110 - [cut] Job control (bg, fg with
&) Implement the use of&to background a command #716- [cut] Ctrl+Z support Support for Ctrl+Z #3229
- bg jobs Fix Background Jobs in *nix and Windows #1972
-
- Native/binary pipeline support Improve pipeline for native commands #559 Native pipe #2450
- Figure out aliases Figure out aliases #929
- Other cross-platform usability issues
- Filesystem-specific case sensitivity File extension and path checks need to take into account case-sensitive file systems #3218
- Cross-platform encoding usability Resolve UTF-8, UTF-16, ASCII inconsistencies #707
- Fix
screenissues 'screen' is incompatible with PowerShell #2364
- "Cloud-ready"
- awesome
ConvertFrom/To-Json- ConvertFrom-Json does not respect -ErrorAction ConvertFrom-Json does not respect -ErrorAction #2860
- Use prettier formatting for ConvertTo-Json Use prettier formatting for ConvertTo-Json #2736
- Convertto-Json and url encoding ConvertTo-Json and URL encoding #2632
- ConvertFrom-Json and ConvertTo-Json eat the one object array ConvertFrom-Json and ConvertTo-Json eat the one object array #2448
- [cut] ConvertFrom-Json fails to parse project.lock.json ConvertFrom-Json fails to parse project.lock.json #1755
- ConvertFrom-Json keys collision: behavior difference between Core and Full ConvertFrom-Json keys collision: behavior difference between Core and Full #1567
- awesome
Invoke-RestMethod/Invoke-WebRequest- Fix IE dependency for
Invoke-WebRequestInvoke-WebRequest errors if Internet Explorer is not installed #3042 - Invoke-WebRequest: Vague error thrown, resulting from TLS issue Invoke-WebRequest: Vague error thrown, resulting from TLS issue #2942
- [cut] Invoke-WebRequest / Invoke-RestMethod fails to follow HTTP redirects Invoke-WebRequest / Invoke-RestMethod fails to follow HTTP redirects from HTTPS #2896
- invoke-webrequest and invoke-restmethod -headers parameter is more restrictive ... invoke-webrequest and invoke-restmethod -headers parameter is more restrictive on PowerShell Core than on PowerShell Native #2895
- [cut] Invoke-Webrequest is missing some properties, like .ParsedHtml and .AllElements Invoke-Webrequest is missing some properties, like .ParsedHtml and .AllElements #2867?
- Invoke-WebRequest throw TypeInitializationException On Linux Invoke-WebRequest throw TypeInitializationException On Linux #2801
- InFile parameter of Invoke-WebRequest doesn't work InFile parameter of Invoke-WebRequest doesn't work #2754
- Invoke-RestMethod does not count on
Content-Typefield. Broken compared to PS 5.0. Invoke-RestMethod does not count onContent-Typefield. Broken compared to PS 5.0. #2245 - Invoke-RestMethod does not strip Authorization Headers Invoke-RestMethod does not strip Authorization Headers #2227
- Invoke-RestMethod should return the full error response from the remote endpoint Invoke-RestMethod should return the full error response from the remote endpoint #2193
- WebRequestPSCmdlets do not contain Response object in Exception on Mac OS X WebRequestPSCmdlets do not contain Response object in Exception on Mac OS X #2113
- Invoke-Webrequest accepts bad TLS certificates / crypto on MacOS Invoke-Webrequest accepts bad TLS certificates / crypto on MacOS #1942
- Missing command alias: iwr Missing command alias: iwr #1778
- Invoke-WebRequest does not support -TransferEncoding deflate Invoke-WebRequest does not support -TransferEncoding deflate #1753
- Add tests case for invoke-restmethod/webrequest, and move the rest of the tests ... Add a couple of simple tests case for invoke-restmethod/webrequest, and move the rest of the tests for feature. #1532
- Fix IE dependency for
- awesome
- Remoting
- PSRP over OpenSSH
- RFC on user experience closed
- Implemented in PowerShell Core 6.0
- SSH remoting slower than WSMan remoting SSH remoting is measureably slower than WSMan remoting #2852
- PSRP over SSH from Linux to Windows fails after password PSRP over SSH from Linux to Windows fails after password #2473
-
Enter-PSHostProcesswhile in a PSRP/SSH session Enter-PSHostProcess does not work within an SSH remoting session. #2453 - Fix Ctrl+Break hang SSH interactive remoting Ctrl+Break causes hang in running script #2323
- Fix Ctrl+C Ctrl+C doesn't work as expected with SSH Remoting #2321
- WinRM client (
New/Enter-PSSession,Invoke-Command -Session) on macOS/Linux- Basic auth works on macOS (TODO: done?)
- Basic auth works on Linux
- NTLM auth works on macOS
- NTLM auth works on Linux
- TODO: generate more demos/tasks here
- Misc.
*-PSSession*- Implicit remoting between PS Core and Windows PS Need way to interop between PSCore and PSFull on Windows #2592
- Fix
Register-PSSessionConfigurationerror Register-PSSessionConfiguration throws error when running in PS Core on Windows desktop #2555
- PSRP over OpenSSH
- Existing cmdlet coverage ported
- TODO: list? Start from this
- Telemetry
- Close on this RFC on implementing basic census telemetry
- Implement telemetry
- Progress bar
- Progress bar can significantly impact cmdlet performance Progress bar can significantly impact cmdlet performance #2138
- Write-Progress bar does not go away after operation is finished Write-Progress bar does not go away after operation is finished #1625
Documentation
- Stand up 6.0 reference docset on PowerShell-Docs
- Figure out story/location for conceptual x-plat content
- Create a changelog workflow
- SDK docs via docfx TODO
Packaging, Installation, and Deployment
-
Install-Package PowerShell- Windows
- Nano
- Linux?
- macOS?
-
Update-Package PowerShell? - Universal Windows packages for each bitness Get to single Windows package #2608
- Onboard to Microsoft Linux package repositories Repositories #3056
- RPM
- DEB
- Get into major package repositories
- Ubuntu
- Red Hat
- TODO: who else? SLES?
- Fully automate package building for all platforms
Script/Module Development Experience
- VS Code features
- .NET Standard 2.0 story
- I can write binary modules that target Windows PowerShell and PowerShell Core
- Timeline public for .NET Standard 2.0
- Move to .NET Core vNext that supports .NET Standard 2.0
- Validate that .NET Standard 2.0 supplants the need for a Windows Powershell 6.0 (i.e. based on the FullCLR .NET Framework)
- Does .NET Framework 4.6.1 work on Windows 7?
- Move to csproj build? Move build to csproj/msbuild #3140
- Semantic versioning Complete the SemanticVersion work #2983
- PSVersionTable/PSEdition story
- Transformation parameter attribute to convert semantic version to parameter
- TODO: spec needed
- Invoke-Command -Session $s -Command {$PSVerionTable} Fails Due to SemanticVersion Invoke-Command -Session $s -Command {$PSVersionTable} Fails Due to SemanticVersion #1819
- Artifact Sharing
- Gallery supports filtration by platform
- PowerShellGet supports filtration by platform
- Gallery supports filtration by Windows PowerShell vs. PowerShell Core
- PowerShellGet supports filtration by Windows PowerShell vs. PowerShell Core
- ScriptAnalyzer rules
- Enumerate rules for supported features/cmdlets on Linux
- Enumerate rules for supported features/cmdlets on .NET Core
- Analysis based on
using assembly,Add-Type, etc.
- Analysis based on
Scenarios
- I can use PowerShell on major Linux distros, macOS and Windows
- I can know how many people are using PowerShell (incl. version and platform) and how the Community is growing
- I can use PowerShell on any platform to manage Azure
- I can develop cmdlets for both Windows PowerShell and PowerShell Core using .NET Standard 2.0
- I can remote between all OS platforms using any supported remoting protocol (PSRP over SSH or WSMan)
- I can install/upgrade PowerShell using native package management utilities on any Mac/Linux platform
- I can use semantic versioning for modules with PowerShellGet and the Gallery
- I can develop a CLI experience using PowerShell on any platform to manage cloud instances
- Finish top UserVoice delighters (SemVer, Build verb, Get-Service improvements, loose manifest validation)
Activity
Jaykul commentedon Jan 26, 2017
This works already -- targeting .NET Standard 1.6. The hard part is loading OS-specific assemblies -- do we need
/lib/{OS}/*.dllautomatic loading ofRequiredAssemblies?pcgeek86 commentedon Jan 26, 2017
WinRM client with Kerberos and client certificate authentication, from Linux and Mac OS X is something I'd consider essential. We're looking for the ability to deploy remote PowerShell code to Windows systems from non-Windows systems, via Docker containers.
Would NTLM cover this scenario in a secure manner? I'm not clear on the pros / cons of NTLM vs. Kerberos, but either way, I think client certificate authentication would be a separate topic.
LMK
Cheers,
Trevor Sullivan
fabiendibot commentedon Jan 26, 2017
I totally agree what Trevor Sullivan (@pcgeek86) is saying, targetting WinRM from Linux is a totally unfriendly scenario and NTLM isn't possible with many customers.
There is a community YAML module but could it be possible to integrate YAML cmdlets the same ways as ConvertTo/ConvertFrom-* exists already for CSV/XML/JSON ?
joeyaiello commentedon Jan 26, 2017
Trevor Sullivan (@pcgeek86) Fabien Dibot (@fabiendibot) good to hear. I then pose the question: are you okay AD-joining your Linux (or Mac) boxes? Or do you expect to be manually handling the certs?
Better yet, what's the blocker for you using PSRP over SSH from Mac/Linux to Windows? Do you have some sort of cert solution that's simpler than public/private key pairs?
pcgeek86 commentedon Jan 27, 2017
We've got a separate certificate publishing system in place already, so that's taken care of.
I'll have to see how PowerShell Remoting over SSH works before I can comment further on that scenario. As of this point, I'm not aware of any functional implementation of it. The solution would need to work on down-level Windows operating systems though.
pcgeek86 commentedon Jan 27, 2017
I'd also add some emphasis around building binary modules surrounding .NET Standard. I'm glad to see this was added in there. Perhaps we should add something around loading .NET assemblies into PowerShell, and calling into them? I know a lot has changed in .NET Core, with respect to AppDomains, reflection, and so on ... I think this area could use some attention.
whatevergeek commentedon Jan 27, 2017
i agree to both Joel Bennett (@Jaykul) and Trevor Sullivan (@pcgeek86)
a powershell gac or library folder sort of would be good...
this will help us manage assemblies that our corresponding modules are using/installing...
i think node/python also have this concept...
fabiendibot commentedon Jan 27, 2017
Joey Aiello (@joeyaiello) We configure kerberos with our Linux boxes for some scenarios (SQL Server connections mostly). For me Win32-SSH is not production ready so i haven't looked at it for now.
iSazonov commentedon Jan 29, 2017
Yes
https://www.microsoft.com/en-us/download/details.aspx?id=49981&e6b34bbe-475b-1abd-2c51-b5034bcdd6d2=True
fMichaleczek commentedon Feb 1, 2017
What's about the Class Features ?
Interface implementation is still missing.
This was the roadmap at the end of 2014 :

PowerShell need to be SOLID at 6.0 (https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) )
Language area need more attention, particularly these issues :
#2223
#2642
#2225
#2217
Thank you !
iSazonov commentedon Feb 1, 2017
Perhaps it would be useful to draw up this roadmap by using the GitHub Project(s).
SteveL-MSFT commentedon Feb 1, 2017
Ilya (@iSazonov) we considered using GitHub Projects, but decided (for now) it would be easier to track progress as checkboxes in an issue
At this time, our thinking is to invest in the developer experience (class improvements as well as things like bindings to other languages, authoring cmdlets in other languages, etc...) post 6.0 rather than continuing to add features into 6.0.
45 remaining items
SteveL-MSFT commentedon Sep 6, 2017
Did some updates to the list above on what is closed/completed and what was cut out of 6.0.0 and will likely land in 6.1.0 instead
erichiller commentedon Nov 11, 2017
Are there plans to add comment support (or at least ignore them) in the list for
ConvertFrom-Json?SteveL-MSFT commentedon Nov 11, 2017
Eric Hiller (@erichiller) please open a new issue, we can consider for 6.1.0
VGerris commentedon Mar 15, 2018
Just include Kerberos support please (and WinRM perhaps too) then we look at this again.
SteveL-MSFT commentedon Mar 16, 2018
OpenMinded (@VGerris) if by WinRM you mean WSMan, that support is already included. There is experimental Kerberos support for WSMan on non-Windows, although it's overly complex currently to get it working.
VGerris commentedon Mar 19, 2018
No I mean Kerberos and WinRM just like I wrote. Please focus on getting that supported, so one doesn't have to rely on third party scripts. What we basically want is a way to efficiently monitor a Windows machine via an agentless solution and to be able to run remote commands in a secure manner. It's clear from the thread this is a main feature on the rank of interests, right? Thank you.
SteveL-MSFT commentedon Mar 19, 2018
OpenMinded (@VGerris) I don't understand what you mean by
WinRMthen since that is supported on Windows (and works already with PSCore6) andWinRMis a Windows-only feature (Windows Remote Management). WSMan is the protocol that WinRM implements.bergmeister commentedon Mar 20, 2018
The following architecture diagram from here might help to understand WinRm-WSMan:

joeyaiello commentedon Mar 29, 2018
I understand a little better why this diagram is drawn the way it is when I looked at the blog for it, but it's a little misleading. Basic way to think about it is that WSMan is the protocol/standard (short for WS-Management) and WinRM is the implementation of that protocol as a service in Windows.
OpenMinded (@VGerris) as Steve Lee (@SteveL-MSFT) said, what you're talking about can technically work, but it's extremely difficult to configure and it requires that your Linux machine is AD domain-joined (which is also difficult to pull off). For those reasons, we don't currently formally support that scenario.
However, WSMan based remoting is not agentless. You still have to run the WinRM service on your Windows machine: that's an agent. In the next release of Windows 10 and Windows Server, OpenSSH itself will be available as a supported feature-on-demand, so you'll have first-party, inbox support for SSH-based remoting as a peer to WSMan-based remoting.
joeyaiello commentedon Mar 29, 2018
I'm also closing this issue due to it having outlived it's usefulness. We should continue tracking this work in the issues that have been created. If you're passionate about something here that doesn't have an issue, please open one so we can track it there.
I also plan on fixing up Projects at some point, I know that's in somewhat of a busted state right now. Sorry about that, folks....