exports/Set-SysManMenu.ps1

<#
.Synopsis
Saves the menu based on the provided information
.Description
Saves the menu based on the provided information
.Link
https://docs.microsoft.com/en-us/powershell/module/sysman.webapi/set-sysmanmenu
#>

function Set-SysManMenu {
[OutputType('System.Boolean')]
[CmdletBinding(DefaultParameterSetName='Put', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')]
[SysMan.Powershell.Description('Saves the menu based on the provided information')]
param(
    [Parameter(ParameterSetName='Put', ValueFromPipeline, HelpMessage='The command that contains the required information to save the menu')]
    [SysMan.Powershell.Category('Body')]
    [SysMan.Powershell.Models.ISaveMenuCommand]
    ${Cmd},

    [Parameter(HelpMessage='When specified, PassThru will force the cmdlet return a ''bool'' given that there isn''t a return type by default.')]
    [SysMan.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    ${PassThru},

    [Parameter(ParameterSetName='PutExpanded', HelpMessage='The configuration of each context menu item. The menu will be saved based on the state in the list. If only one item ispresent in the list the menu will be saved with only one menu item.Therefore always use the save command when the whole menu state is present.')]
    [SysMan.Powershell.Category('Body')]
    [SysMan.Powershell.Models.IContextMenuItemMetaData[]]
    ${ContextItems},

    [Parameter(ParameterSetName='PutExpanded', HelpMessage='The configuration of each menu item. The menu will be saved based on the state in the list. If only one item ispresent in the list the menu will be saved with only one menu item.Therefore always use the save command when the whole menu state is present.')]
    [SysMan.Powershell.Category('Body')]
    [SysMan.Powershell.Models.IMenuItemMetaData[]]
    ${Items},

    [Parameter(DontShow, HelpMessage='Wait for .NET debugger to attach')]
    [SysMan.Powershell.Category('Runtime')]
    [System.Management.Automation.SwitchParameter]
    ${Break},

    [Parameter(DontShow, HelpMessage='SendAsync Pipeline Steps to be appended to the front of the pipeline')]
    [ValidateNotNull()]
    [SysMan.Powershell.Category('Runtime')]
    [SysMan.Powershell.Runtime.SendAsyncStep[]]
    ${HttpPipelineAppend},

    [Parameter(DontShow, HelpMessage='SendAsync Pipeline Steps to be prepended to the front of the pipeline')]
    [ValidateNotNull()]
    [SysMan.Powershell.Category('Runtime')]
    [SysMan.Powershell.Runtime.SendAsyncStep[]]
    ${HttpPipelinePrepend},

    [Parameter(DontShow, HelpMessage='The URI for the proxy server to use')]
    [SysMan.Powershell.Category('Runtime')]
    [System.Uri]
    ${Proxy},

    [Parameter(DontShow, HelpMessage='Credentials for a proxy server to use for the remote call')]
    [ValidateNotNull()]
    [SysMan.Powershell.Category('Runtime')]
    [System.Management.Automation.PSCredential]
    ${ProxyCredential},

    [Parameter(DontShow, HelpMessage='Use the default credentials for the proxy')]
    [SysMan.Powershell.Category('Runtime')]
    [System.Management.Automation.SwitchParameter]
    ${ProxyUseDefaultCredentials}
)

begin {
    try {
        $outBuffer = $null
        if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
            $PSBoundParameters['OutBuffer'] = 1
        }
        $parameterSet = $PsCmdlet.ParameterSetName
        $mapping = @{
            Put = 'SysMan.WebApi.private\Set-SysManMenu_Put';
            PutExpanded = 'SysMan.WebApi.private\Set-SysManMenu_PutExpanded';
        }
        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(($mapping[$parameterSet]), [System.Management.Automation.CommandTypes]::Cmdlet)
        $scriptCmd = {& $wrappedCmd @PSBoundParameters}
        $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
        $steppablePipeline.Begin($PSCmdlet)
    } catch {
        throw
    }
}

process {
    try {
        $steppablePipeline.Process($_)
    } catch {
        throw
    }
}

end {
    try {
        $steppablePipeline.End()
    } catch {
        throw
    }
}
}