Announcing PowerShell Crescendo Preview.4

This post was originally published on this site

Announcing Crescendo 0.7.0-Preview.4

We are pleased to announce the fourth preview of PowerShell Crescendo, a framework to rapidly
develop PowerShell cmdlets for native commands, regardless of platform.

The updated preview release is now available for download on the PowerShell Gallery:

To install Microsoft.PowerShell.Crescendo:

Install-Module Microsoft.PowerShell.Crescendo -AllowPrerelease

Crescendo Preview 4 Updates

Crescendo 0.7.0-Preview.4 adds global schema support and experimental help parsing for modern
native commands. Read the full list of changes below:

  • Added global schema support
  • Added experimental native command help parser. Issue #99
  • New-CrescendoCommand should include an OriginalName parameter.
    Issue #82
  • Added Export-CrescendoCommand to create a configuration file.
    Issue #80
  • Added support for the ConfirmImpact CmdletBinding() argument.
  • Default parameter values are not used.
    Issue #101

Global Schema support

In preview 4, we’ve published the authoring schema for PowerShell Crescendo at a well-known URL.
This URL can be referenced instead of a local file path as in previous preview versions. The schema
works with supported tools like Visual Studio Code to provide
intellisense and tooltips during the authoring experience.

URL location of the always-available Crescendo schema:

{
   "$schema": "https://aka.ms/Crescendo/Schema.json",
   "Commands": []
}

Experimental native command Help parsers

Modern commands that produce structured help output may be parsed for parameter and argument
information to build a PowerShell Crescendo configuration file. This reduces the time to
discover and handle changes, making maintaining Crescendo modules that contain complex native
commands easier to maintain.

The Preview 4 release includes several help parsers for native commands. These parsers are
experimental and have limitations. For a full discussion about the design and limitations of help
parsers as well as how to use them, see the help parser
README
file.

The experimental help parsers can be found in the
HelpParsers
folder in the GitHub repository.

The experimental help parsers may also be found locally in the module folder <PathToModule>/Microsoft.PowerShell.Crescendo/src/experimental/HelpParsers/.

New-CrescendoCommand now includes the OriginalName parameter

The cmdlet New-CrescendoCommand includes the OriginalName parameter that specifies the name
and location of the native command to be wrapped by Crescendo.

New-CrescendoCommand -Verb Get -Noun MyFeature -OriginalName "<Path><Command>"

Creating a command configuration with Export-CrescendoCommand

PowerShell Crescendo users may choose to start a configuration file with a partially populated
template. New-CrescendoCommand can create the command object that can be converted to JSON using
the Export-CrescendoCommand cmdlet.

To create a JSON configuration file for a single command:

New-CrescendoCommand -Verb Get -Noun MyFeature -OriginalName MYCommand.exe |
    Export-CrescendoCommand -TargetDirectory C:MyConfig

For this example, Export-CrescendoCommand creates the file C:MyConfigGet-MyFeature.config.json.

Support for the ConfirmImpact argument

When you define a cmdlet that alters the system state you should include the
SupportsShouldProcess argument in the CmdletBinding() attribute for the cmdlet. The Crescendo
JSON schema includes SupportsShouldProcess. Preview 4 adds the ConfirmImpact argument.
Supported values for ConfirmImpact are: Low, Medium, or High.

Default parameter values are not used

In previous previews, specifying the default value of a parameter was not recognized and respected
in the generated Crescendo module. This resulted in a cmdlet parameter without the expected default
value. Starting in Preview 4, parameters defined with default values will now use those default
values unless overridden by the user.

{
  "ParameterSetName": ["Default"],
  "Name":"ProductName",
  "OriginalName": "-pn",
  "ParameterType": "string",
  "DefaultValue": "WinGet",
  "Description": "This switch provides product name for display"
}

In the example above, the argument default value “WinGet” will be applied to the parameter
ProductName when the user executes the cmdlet.

More information about Microsoft.PowerShell.Crescendo

For more information about Microsoft.PowerShell.Crescendo, check out these previous blog posts:

For more information using Microsoft.PowerShell.Crescendo, check out this excellent blog series
by Sean Wheeler posted to the
PowerShell Community.

Future plans

The plans for the general release will be based on community feedback and include improved tooling
and guidance for Crescendo cmdlets. Our goal is to make it easier to convert your native commands to
PowerShell cmdlets and receive the benefits that PowerShell provides.

We value your ideas and feedback and hope you will give Crescendo a try. Stop by our
GitHub repository and let us know of any issues you find
or features you would like added.

The post Announcing PowerShell Crescendo Preview.4 appeared first on PowerShell Team.