Microsoft.PowerShell.Crescendo.Schema.json

{
  "definitions": {
    "parameter": {
      "definition": "The description of a parameter.",
      "required": ["ParameterType","Name","OriginalName" ],
      "properties": {
        "ParameterType": {
          "type": "string",
          "description": "This the type of the parameter. It should represent an actual type."
        },
        "Position": {
          "type": "integer",
          "description": "The position of the parameter."
        },
        "Name": {
          "type": "string",
          "description": "The name of the parameter that PowerShell will use. If NoGap is used, include the separator in the name. 'parameter=' for parameter=value"
        },
        "OriginalName": {
          "type": "string",
          "description": "The original parameter name used by the negative command."
        },
        "OriginalText": {
          "type": "string",
          "description": "The original help text for the native command parameter."
        },
        "Description": {
          "type": "string",
          "description": "The description of the parameter, this will be used by help."
        },
        "DefaultValue": {
          "type": "string",
          "description": "The default value for the parameter."
        },
        "DefaultMissingValue": {
          "type": "string",
          "description": "The default value provided if the parameter is not used"
        },
        "AdditionalParameterAttributes": {
          "type": "array",
          "description": "Additional parameter attributes used by PowerShell. This will take the form of a standard script parameter attribute.",
          "items": {
            "type": "string"
          }
        },
        "Mandatory": {
          "type": "boolean",
          "description": "A boolean indicating whether this parameter is mandatory."
        },
        "ParameterSetName": {
          "type": "array",
          "description": "The names of the parameter set for this parameter.",
          "items": {
            "type": "string"
          }
        },
        "Aliases": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "A list of aliases for the cmdlet."
        },
        "OriginalPosition": {
          "type": "integer",
          "description": "The original parameter position for the native executable. This is used to properly order parameters when calling the native command."
        },
        "ValueFromPipeline": {
          "type": "boolean",
          "description": "The value for this parameter is taken from the pipeline."
        },
        "NoGap": {
          "type": "boolean",
          "description": "When constructing the native parameter and value do not separate with a space. Used for native parameters that look like parameter=value"
        },
        "ValueFromPipelineByPropertyName": {
          "type": "boolean",
          "description": "When are assigning a value to the parameter from a piped object, use the same property as the parameter name."
        },
        "ValueFromRemainingArguments": {
          "type": "boolean",
          "description": "Assign the remaining values to the parameter."
        }
      }
    },
    "command": {
      "description": "A collection of Crescendo configurations",
      "required": [ "Verb", "Noun", "OriginalName" ],
      "properties": {
        "Verb": {
          "type": "string",
          "enum": [
            "Add","Approve","Assert",
            "Backup","Block","Build",
            "Checkpoint","Clear","Close","Compare","Complete","Compress","Confirm","Connect","Convert","ConvertFrom","ConvertTo","Copy",
            "Debug","Deny","Deploy","Disable","Disconnect","Dismount",
            "Edit","Enable","Enter","Exit","Expand","Export",
            "Find","Format",
            "Get","Grant","Group",
            "Hide",
            "Import","Initialize","Install","Invoke",
            "Join",
            "Limit","Lock",
            "Measure","Merge","Mount","Move",
            "New",
            "Open","Optimize","Out",
            "Ping","Pop","Protect","Publish","Push",
            "Read","Receive","Redo","Register","Remove","Rename","Repair","Request","Reset","Resize","Resolve","Restart","Restore","Resume","Revoke",
            "Save","Search","Select","Send","Set","Show","Skip","Split","Start","Step","Stop","Submit","Suspend","Switch","Sync",
            "Test","Trace",
            "Unblock","Undo","Uninstall","Unlock","Unprotect","Unpublish","Unregister","Update","Use",
            "Wait","Watch","Write"
          ],
          "description" : "The verb of the cmdlet."
        },
        "Elevation": {
          "type": "object",
          "description": "When privilege elevation is required to run the command. Provide ElevationCommand and optional arguments.",
          "required": ["Command"],
          "properties": {
            "Command": {
              "type": "string",
              "description": "The command which performs the elevation. Windows elevation may be done with the built-in function Invoke-WindowsNativeAppWithElevation."
            },
            "Arguments": {
              "type": "array",
              "items": { "$ref": "#/definitions/parameter" },
              "description": "Additional arguments required by the elevation command."
            }
          }
        },
        "Noun": {
          "type": "string",
          "description" : "The noun of the cmdlet"
        },
        "Platform": {
          "type": "array",
          "minItems": 1,
          "maxItems": 3,
          "uniqueItems": true,
          "items": {
            "type": "string",
            "enum": [ "Windows", "Linux", "MacOS" ]
          },
          "description" : "The platform where the function will run, this may be 'Windows','Linux', or 'MacOS' in any combination. The default is all three values."
        },
        "OriginalName": {
          "type": "string",
          "description" : "The native command to be called by the function."
        },
 
        "OutputHandlers": {
          "type": "array",
          "description": "Converts the text output of the native command into an object. Each output handler is associated with a parameter set name.",
          "items": {
            "type": "object",
            "required": ["ParameterSetName", "Handler" ],
            "properties": {
              "ParameterSetName": {
                "type": "string",
                "description": "The name of the parameter set which will use the handler."
              },
              "Handler": {
                "type": "string",
                "description": "This is the code which converts the output to objects"
              },
              "HandlerType": {
                "type": "string",
                "enum": ["Inline", "Function","Script"],
                "description": "The type of handler, by default this is 'Inline'"
 
              },
              "StreamOutput": {
                "type": "boolean",
                "description": "When used, output will be piped as a stream to the output handler."
              }
            }
          }
        },
 
        "OriginalCommandElements": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Additional elements to be added to the invocation. This is for arguments provided to a Native application which are not part of the parameters."
        },
        "Aliases": {
          "type": "array",
          "description" : "Aliases to the function that will be created",
          "items": {
            "type": "string"
          }
        },
        "DefaultParameterSetName": {
          "type": "string",
          "description": "The default parameter set name for the function"
 
        },
        "ConfirmImpact": {
          "type": "string",
          "enum": ["None", "Low","Medium","High"],
          "description": "A string indicating the value of Confirm Impact. If not present, this attribute will not be added to the cmdlet declaration."
        },
        "SupportsShouldProcess": {
          "type": "boolean",
          "description": "A boolean indicating whether this command supports ShouldProcess."
        },
        "SupportsTransactions": {
          "type": "boolean",
          "description": "A boolean indicating whether this command supports transactions."
        },
        "Description": {
          "description": "The description of the cmdlet.",
          "type": "string"
        },
        "Usage": {
          "description": "Information which explains how to use this command.",
          "type": "object",
          "required": [ "Synopsis" ],
          "properties": {
            "Synopsis": {
              "description": "The synopsis on how to use this command.",
              "type": "string"
            },
            "SupportsFlags": {
              "description": "Unused",
              "type": "boolean"
            },
            "HasOptions": {
              "description": "Unused",
              "type": "boolean"
            },
            "OriginalText": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The original text for the command help. Usually generated by command -?"
            }
          }
        },
        "Parameters": {
          "type": "array",
          "description": "The parameters for the function.",
          "items": {
            "type": "object",
            "required": ["ParameterType", "Name", "OriginalName" ],
            "properties": {
              "ParameterType": {
                "type": "string",
                "description": "This the type of the parameter. It should represent an actual type."
              },
              "Position": {
                "type": "integer",
                "description": "The position of the parameter."
              },
              "Name": {
                "description": "The name of the parameter.",
                "type": "string"
              },
              "OriginalName": {
                "description": "The name of the parameter used by the native executable. This can be null.",
                "type": "string"
              },
              "OriginalText": {
                "description": "The original text for the native parameter",
                "type": "string"
              },
              "Description": {
                "description": "The description of the parameter to be used in help.",
                "type": "string"
              },
              "DefaultValue": {
                "type": "string",
                "description": "The default value for this parameter."
              },
              "DefaultMissingValue": {
                "type": "string",
                "description": "The default value for this parameter if the parameter is not present (or is a switch parameter)."
              },
              "AdditionalParameterAttributes": {
                "description": "Additional parameter attributes. These should take the form of [ValidateNotNullOrEmpty()], etc.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "Mandatory": {
                "description": "A boolean indicating whether this parameter is mandatory.",
                "type": "boolean"
              },
              "ParameterSetName": {
                "description": "The parameter set name for this parameter.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "Aliases": {
                "description": "The parameter alias.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "OriginalPosition": {
                "description": "The position of the parameter for the native executable.",
                "type": "integer"
              },
              "ValueFromPipeline": {
                "description": "A boolean indicating whether this parameter accepts piped input.",
                "type": "boolean"
              },
              "NoGap": {
                "description": "A boolean indicating whether the constructed parameter should have a gap. This is for parameters which have the shape of parameter=value",
                "type": "boolean"
              },
              "ValueFromPipelineByPropertyName": {
                "description": "A boolean indicating whether this parameter accepts piped input which binds to a property name.",
                "type": "boolean"
              },
              "ValueFromRemainingArguments": {
                "description": "A boolean indicating whether this parameter gets its value from the remaining arguments.",
                "type": "boolean"
              }
            }
          }
        },
        "Examples": {
          "description": "Examples for the command.",
          "type": "array",
          "items": {
            "type": "object",
            "required": [ "Command", "Description" ],
            "properties": {
              "Command": {
                "description": "The command for the example.",
                "type": "string"
              },
              "OriginalCommand": {
                "description": "The original command for the example.",
                "type": "string"
              },
              "Description": {
                "description": "The description of the example.",
                "type": "string"
              }
            }
          }
        },
        "OriginalText": {
          "description": "The original help text of the native command",
          "type": "string"
        },
        "HelpLinks": {
          "description": "Help links for the command",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "NoInvocation": {
          "type":"boolean",
          "description": "This option returns the arguments which would be sent to the native executable. If used, the native application will not be invoked."
        }
      },
      "additionalProperties": false
    }
  },
  "type": "object",
  "$id": "https://microsoft.com/powershell/crescendo",
  "title": "JSON schema for PowerShell Crescendo files",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "Commands":{
      "description": "The Crescendo command definitions.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/command"
      }
    }
  }
}