{"id":20251,"date":"2024-02-05T11:08:41","date_gmt":"2024-02-05T19:08:41","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/powershell\/?p=20251"},"modified":"2024-02-05T13:07:53","modified_gmt":"2024-02-05T21:07:53","slug":"powershell-and-openssh-team-investments-for-2024","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/powershell-and-openssh-team-investments-for-2024\/","title":{"rendered":"PowerShell and OpenSSH team investments for 2024"},"content":{"rendered":"<h2>PowerShell 7.5<\/h2>\n<p>We continue to follow our yearly release schedule for PowerShell 7 and the next version will align with .NET 9.<\/p>\n<h3>Pseudo-terminal support<\/h3>\n<p>PowerShell currently has a design limitation that prevents full capture of output from native commands by PowerShell itself.\nNative commands (meaning executables you run directly) will write output to STDERR or STDOUT pipes.\nHowever, if the output is not redirected, PowerShell will simply have the native command write directly to the console.\nPowerShell can&#8217;t just always redirect the output to capture it because:<\/p>\n<ul>\n<li>The order of output from STDERR and STDOUT can be non-deterministic because they are on different pipes,\nbut the order written to the console has meaning to the user.<\/li>\n<li>Native commands can use detection of redirection to determine if the command is being run interactive or non-interactively\nand behave differently such as prompting for input or defaulting to adding text decoration to the output.<\/li>\n<\/ul>\n<p>To address this, we are working on an experimental feature to leverage <a href=\"https:\/\/en.wikipedia.org\/wiki\/Pseudoterminal\">pseudoterminals<\/a>\nto enable PowerShell to capture the output of native commands while still allowing the native command to seemingly write directly to the console.<\/p>\n<p>This feature can then further be leveraged to:<\/p>\n<ul>\n<li>Ensure complete transcription of native commands<\/li>\n<li>Proper rendering of PowerShell progress bars in scripts that call native commands<\/li>\n<li>Enable feedback providers to act upon native command output\n<ul>\n<li>For example, it would be possible to write a feedback provider that looked at the output of <code>git<\/code> commands\nand provided suggestions for what to do next based on the output.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Once this feature is part of PowerShell 7, there are other interesting scenarios that can be enabled in the future.<\/p>\n<h3>Platform support<\/h3>\n<p>Operating system versions and distributions are constantly evolving.\nWe want to ensure that a supported platform is a platform that is tested and validated by the team.<\/p>\n<p>During 2024, the engineering team will focus on:<\/p>\n<ul>\n<li>Making our tests reliable so we are only spending manual effort investigating real issues when test fails<\/li>\n<li>Simplify how we add new platforms to our test matrix so new distro requests can be fulfilled more quickly<\/li>\n<li>More actively track the lifecycle of platforms we support<\/li>\n<li>Automate publishing the supported platforms list so that our docs are always up to date<\/li>\n<\/ul>\n<h3>Bug fixes and community PRs<\/h3>\n<p>The community has been great at opening issues and pull requests to help improve PowerShell.\nFor this release, we will focus on addressing issues and PRs that have been opened by the community.\nThis means less new features from the team, but we hope to make up for that with the community contributions\ngetting merged into the product. We will also be investing in the Working Group application process to expand the reach of those groups.<\/p>\n<p>Please use reactions in GitHub issues and PRs to help us prioritize what to focus our limited time on.<\/p>\n<h2>Artifact management<\/h2>\n<h3>Fundamentals work<\/h3>\n<p>Ensure PowerShell Gallery addresses the latest compliance requirements for security, accessibility, and reliability.<\/p>\n<h3>Include new types of repositories for PSResourceGet<\/h3>\n<p>We plan to introduce integration with container registries, both public and private, which will\nhelp enterprise customers create a differentiation between trusted and untrusted content.\nThis change will allow for a Microsoft trusted repository while the PowerShellGallery continues as untrusted by default.\nBy having more options for private galleries, in addition to a Microsoft trusted repository and the PowerShell Gallery,\nthis enables customers to have control over package availability suitable for their environments.<\/p>\n<h3>Concurrent installs<\/h3>\n<p>To improve performance during long-running installations, we plan to enable parallel operations\nso multiple module installations can happen at the same time.\nThis change will be particularly impactful in modules with many dependencies, such as the Az module,\nwhich currently can take significant time to install.<\/p>\n<h3>Local caching of artifact details<\/h3>\n<p>Currently the <code>find-psresource<\/code> cmdlet pulls information about available artifacts from service endpoints\nand outputs the list locally. We believe there is opportunity to locally cache the metadata about available\nartifacts to reduce network dependency and improve performance when resolving dependency relationships.\nThis would also help enable implementing a feedback provider to suggest how to install module that is not currently installed.\nSo 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.<\/p>\n<h2>Intelligence in the shell<\/h2>\n<p>We are observing and being thoughtful about what it will mean to integrate the experiences\nprovided by large language models into shell experience.\nOur current outlook is to think beyond natural language chat to deep integration of learning opportunities.<\/p>\n<p>We also believe there are lots of improvements to the interactivity of PowerShell that does not require a large language model.\nThis includes some more subtle improvements to the interactive experience of PowerShell that would help increase productivity\nand efficiency at the command line.<\/p>\n<h2>Configuration<\/h2>\n<p>Desired State Configuration (DSC) helped to enable configuration as code for Windows.\nWith v3, we are focusing on enabling cross-platform use, simplifying resource development, improving experience\nto integrate with higher level configuration management tools, and improving the experience for end users.\nOur goal is to be code complete by end of March and work towards a release candidate by middle of the year.\nThis is a complete rewrite of DSC and we welcome feedback during the design and development process.<\/p>\n<h2>Remoting<\/h2>\n<h3>Win32_OpenSSH<\/h3>\n<p>We hope to continue bringing new versions of OpenSSH to the Windows Server platform. Another goal\nis to reduce the complex steps required to install and manage SSH at scale, to enable\npartners that create automation tools to use the same mechanism when connecting to Windows servers\nas they use for Linux.<\/p>\n<h3>SSHDConfig<\/h3>\n<p>Monitoring and management of the <code>sshd_config<\/code> file at scale across platforms can be challenging.\nWe are working on a DSC v3 resource to enable management of <code>sshd_config<\/code> using a syntax that is\ncloser aligned to the command line tools used by modern cloud platforms.\nInitially, we&#8217;ll be targeting auditing scenarios but we hope to enable full management of the file in the future.<\/p>\n<h2>Help system<\/h2>\n<p><a href=\"https:\/\/www.powershellgallery.com\/packages\/platyPS\/\">platyPS<\/a> is a module that enables you to write PowerShell help\ndocumentation in Markdown and convert it to PowerShell help format.\nThis tool is used by Microsoft teams and the community of module authors to more easily write and maintain help documentation.\nWe hope to continue work in this area to address partner feedback.<\/p>\n<h2>Other projects<\/h2>\n<p>The projects above will already keep the team very busy, but we will continue to maintain other existing projects.\nWe appreciate the community contributions to these projects and will continue to review issues and PRs:<\/p>\n<ul>\n<li>VSCode extension<\/li>\n<li>PSScriptAnalyzer module<\/li>\n<li>ConsoleGuiTools module<\/li>\n<li>TextUtility module<\/li>\n<li>PSReadLine module<\/li>\n<li>SecretManagement module<\/li>\n<\/ul>\n<p>Our other projects will continue to be serviced on an as needed basis.<\/p>\n<p>Thanks to the community from Steve Lee and Michael Greene on behalf of our team!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Planned team investments for 2024 for PowerShell, OpenSSH, and related tooling.<\/p>\n","protected":false},"author":66121,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[231,248],"class_list":["post-20251","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-openssh","tag-powershell"],"acf":[],"blog_post_summary":"<p>Planned team investments for 2024 for PowerShell, OpenSSH, and related tooling.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/20251","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\/66121"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=20251"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/20251\/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=20251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=20251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=20251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}