Functions/Remove-MenuItem.ps1

function Remove-MenuItem
{
<#
.Synopsis
   Remove a Menu Item from a menu.
.DESCRIPTION
   Remove a Menu Item from a menu by specifying the menu name and item name.
.EXAMPLE
   C:> Remove-MenuItem -MenuName main -ItemName "UnlockUser"
    
   This will remove the UnlockUser menu item from the main menu.
.EXAMPLE
   C:> Remove-MenuItem -MenuName subMenu -ItemName "Item1"
    
   This will remove the Item1 menu item from the subMenu.
.NOTES
   NAME: Remove-MenuItem
   AUTHOR: Thomas Edward
   KEYWORDS: General scripting Controller Menu
#>

[cmdletbinding()]
Param
(
    [Parameter(Mandatory)]
    [string]
    $MenuName
    ,
    [Parameter(Mandatory)]
    [string]
    $ItemName
)

BEGIN
{
    $f = $MyInvocation.InvocationName
    Write-Verbose -Message "$f - START"
}

PROCESS
{
    Write-Verbose "Getting menu: $MenuName"
    $menuObject = Get-Menu -Name "$MenuName"
    
    if ($menuObject)
    {
        Write-Verbose "Found menu: $($menuObject.Name)"
        $itemToRemove = $null
        
        foreach ($item in $menuObject.MenuItems)
        {
            if ($item.Name -eq $ItemName)
            {
                $itemToRemove = $item
                break
            }
        }
        
        if ($itemToRemove)
        {
            $menuIndex = $script:Menus.IndexOf($menuObject)
            Write-Verbose "Menu index: $menuIndex"
            if ($menuIndex -ge 0)
            {
                $null = $script:Menus[$menuIndex].MenuItems.Remove($itemToRemove)
                Write-Verbose "Successfully removed item: $ItemName"
            }
        }
        else
        {
            Write-Warning -Message "$f - Menu item [$ItemName] not found in menu [$MenuName]"
        }
    }
    else
    {
        Write-Error -Message "$f - Menu [$MenuName] not found"
    }
}

END
{
    Write-Verbose -Message "$f - END"
}
}