PowerShell and OpenSSH team investments for 2024

Steve Lee

PowerShell 7.5

We continue to follow our yearly release schedule for PowerShell 7 and the next version will align with .NET 9.

Pseudo-terminal support

PowerShell currently has a design limitation that prevents full capture of output from native commands by PowerShell itself. Native commands (meaning executables you run directly) will write output to STDERR or STDOUT pipes. However, if the output is not redirected, PowerShell will simply have the native command write directly to the console. PowerShell can’t just always redirect the output to capture it because:

  • The order of output from STDERR and STDOUT can be non-deterministic because they are on different pipes, but the order written to the console has meaning to the user.
  • Native commands can use detection of redirection to determine if the command is being run interactive or non-interactively and behave differently such as prompting for input or defaulting to adding text decoration to the output.

To address this, we are working on an experimental feature to leverage pseudoterminals to enable PowerShell to capture the output of native commands while still allowing the native command to seemingly write directly to the console.

This feature can then further be leveraged to:

  • Ensure complete transcription of native commands
  • Proper rendering of PowerShell progress bars in scripts that call native commands
  • Enable feedback providers to act upon native command output
    • For example, it would be possible to write a feedback provider that looked at the output of git commands and provided suggestions for what to do next based on the output.

Once this feature is part of PowerShell 7, there are other interesting scenarios that can be enabled in the future.

Platform support

Operating system versions and distributions are constantly evolving. We want to ensure that a supported platform is a platform that is tested and validated by the team.

During 2024, the engineering team will focus on:

  • Making our tests reliable so we are only spending manual effort investigating real issues when test fails
  • Simplify how we add new platforms to our test matrix so new distro requests can be fulfilled more quickly
  • More actively track the lifecycle of platforms we support
  • Automate publishing the supported platforms list so that our docs are always up to date

Bug fixes and community PRs

The community has been great at opening issues and pull requests to help improve PowerShell. For this release, we will focus on addressing issues and PRs that have been opened by the community. This means less new features from the team, but we hope to make up for that with the community contributions getting merged into the product. We will also be investing in the Working Group application process to expand the reach of those groups.

Please use reactions in GitHub issues and PRs to help us prioritize what to focus our limited time on.

Artifact management

Fundamentals work

Ensure PowerShell Gallery addresses the latest compliance requirements for security, accessibility, and reliability.

Include new types of repositories for PSResourceGet

We plan to introduce integration with container registries, both public and private, which will help enterprise customers create a differentiation between trusted and untrusted content. This change will allow for a Microsoft trusted repository while the PowerShellGallery continues as untrusted by default. By having more options for private galleries, in addition to a Microsoft trusted repository and the PowerShell Gallery, this enables customers to have control over package availability suitable for their environments.

Concurrent installs

To improve performance during long-running installations, we plan to enable parallel operations so multiple module installations can happen at the same time. This change will be particularly impactful in modules with many dependencies, such as the Az module, which currently can take significant time to install.

Local caching of artifact details

Currently the find-psresource cmdlet pulls information about available artifacts from service endpoints and outputs the list locally. We believe there is opportunity to locally cache the metadata about available artifacts to reduce network dependency and improve performance when resolving dependency relationships. This would also help enable implementing a feedback provider to suggest how to install module that is not currently installed. So if a user tries to run a cmdlet that is not installed, the feedback provider will suggest what module to install to get the cmdlet to work.

Intelligence in the shell

We are observing and being thoughtful about what it will mean to integrate the experiences provided by large language models into shell experience. Our current outlook is to think beyond natural language chat to deep integration of learning opportunities.

We also believe there are lots of improvements to the interactivity of PowerShell that does not require a large language model. This includes some more subtle improvements to the interactive experience of PowerShell that would help increase productivity and efficiency at the command line.

Configuration

Desired State Configuration (DSC) helped to enable configuration as code for Windows. With v3, we are focusing on enabling cross-platform use, simplifying resource development, improving experience to integrate with higher level configuration management tools, and improving the experience for end users. Our goal is to be code complete by end of March and work towards a release candidate by middle of the year. This is a complete rewrite of DSC and we welcome feedback during the design and development process.

Remoting

Win32_OpenSSH

We hope to continue bringing new versions of OpenSSH to the Windows Server platform. Another goal is to reduce the complex steps required to install and manage SSH at scale, to enable partners that create automation tools to use the same mechanism when connecting to Windows servers as they use for Linux.

SSHDConfig

Monitoring and management of the sshd_config file at scale across platforms can be challenging. We are working on a DSC v3 resource to enable management of sshd_config using a syntax that is closer aligned to the command line tools used by modern cloud platforms. Initially, we’ll be targeting auditing scenarios but we hope to enable full management of the file in the future.

Help system

platyPS is a module that enables you to write PowerShell help documentation in Markdown and convert it to PowerShell help format. This tool is used by Microsoft teams and the community of module authors to more easily write and maintain help documentation. We hope to continue work in this area to address partner feedback.

Other projects

The projects above will already keep the team very busy, but we will continue to maintain other existing projects. We appreciate the community contributions to these projects and will continue to review issues and PRs:

  • VSCode extension
  • PSScriptAnalyzer module
  • ConsoleGuiTools module
  • TextUtility module
  • PSReadLine module
  • SecretManagement module

Our other projects will continue to be serviced on an as needed basis.

Thanks to the community from Steve Lee and Michael Greene on behalf of our team!

1 comment

Leave a comment

  • Michael Mientus 1

    Thank you.

Feedback usabilla icon