diff --git a/Examples/AdvancedMenu.md b/Examples/AdvancedMenu.md index 57e22b0..470d360 100644 --- a/Examples/AdvancedMenu.md +++ b/Examples/AdvancedMenu.md @@ -12,7 +12,7 @@ Array Entry Opened as a nested menu ## Input ```powershell -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'Advanced Menu' -Sort -Entries @{ 'Command Entry' = '(Get-AppxPackage).Name' diff --git a/Examples/AdvancedMenu.ps1 b/Examples/AdvancedMenu.ps1 index 3a55524..a6dbb0e 100644 --- a/Examples/AdvancedMenu.ps1 +++ b/Examples/AdvancedMenu.ps1 @@ -2,7 +2,7 @@ Example: AdvancedMenu #> -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'Advanced Menu' -Sort -Entries @{ 'Command Entry' = '(Get-AppxPackage).Name' diff --git a/Examples/AppxPackages.md b/Examples/AppxPackages.md index 291f650..4c86585 100644 --- a/Examples/AppxPackages.md +++ b/Examples/AppxPackages.md @@ -8,7 +8,7 @@ This example uses Write-Menu to list the app packages (Windows Store/Modern Apps ```powershell # Include -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'AppxPackages' -Entries (Get-AppxPackage).Name Write-Host $menuReturn diff --git a/Examples/AppxPackages.ps1 b/Examples/AppxPackages.ps1 index 2f68c65..83d28ee 100644 --- a/Examples/AppxPackages.ps1 +++ b/Examples/AppxPackages.ps1 @@ -3,7 +3,7 @@ #> # Include -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'AppxPackages' -Entries (Get-AppxPackage).Name Write-Host $menuReturn diff --git a/Examples/CustomMenu.md b/Examples/CustomMenu.md index 18dd855..c488da1 100644 --- a/Examples/CustomMenu.md +++ b/Examples/CustomMenu.md @@ -8,7 +8,7 @@ This example generates a custom menu by manually specifying each entry. ```powershell # Include -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'Custom Menu' -Entries @('Menu Option 1', 'Menu Option 2', 'Menu Option 3', 'Menu Option 4') Write-Host $menuReturn @@ -18,7 +18,7 @@ Write-Host $menuReturn ```powershell # Include -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'Custom Menu' -Entries @( 'Menu Option 1' diff --git a/Examples/CustomMenu.ps1 b/Examples/CustomMenu.ps1 index 343ff53..3d87995 100644 --- a/Examples/CustomMenu.ps1 +++ b/Examples/CustomMenu.ps1 @@ -3,7 +3,7 @@ #> # Include -. ..\Write-Menu.ps1 +Import-Module ..\Write-Menu.psm1 $menuReturn = Write-Menu -Title 'Custom Menu' -Entries @( 'Menu Option 1' diff --git a/Write-Menu.ps1 b/Write-Menu.psm1 similarity index 96% rename from Write-Menu.ps1 rename to Write-Menu.psm1 index 45b0f01..9e48682 100644 --- a/Write-Menu.ps1 +++ b/Write-Menu.psm1 @@ -122,7 +122,12 @@ function Write-Menu { # Select multiple menu entries using space, each selected entry will then get invoked (this will disable nested menu's). [Parameter()] [switch] - $MultiSelect + $MultiSelect, + + # Return entry index in $Entries, instead of entry names. Compatible with -MultiSelect. + [Parameter()] + [switch] + $ReturnIndex ) <# @@ -437,7 +442,8 @@ function Write-Menu { $menuInput = [System.Console]::ReadKey($false) # Define selected entry - $entrySelected = $menuEntries[($pageEntryFirst + $lineSelected)] + $entryIndex = ($pageEntryFirst + $lineSelected) + $entrySelected = $menuEntries[$entryIndex] # Check if key has function attached to it switch ($menuInput.Key) { @@ -554,14 +560,19 @@ function Write-Menu { if ($MultiSelect) { Clear-Host # Process checked/selected entries - $menuEntries | ForEach-Object { + $menuEntries | ForEach-Object {$i = 0}{ # Entry contains command, invoke it if (($_.Selected) -and ($_.Command -notlike $null) -and ($entrySelected.Command.GetType().Name -ne 'Hashtable')) { Invoke-Expression -Command $_.Command # Return name, entry does not contain command } elseif ($_.Selected) { - return $_.Name + if ($ReturnIndex) { + return $i + } else { + return $_.Name + } } + $i++ } # Exit and re-enable cursor $inputLoop = $false @@ -601,7 +612,11 @@ function Write-Menu { # Return name and exit 'Name' { Clear-Host - return $entrySelected.Name + if ($ReturnIndex) { + return $entryIndex + } else { + return $entrySelected.Name + } $inputLoop = $false [System.Console]::CursorVisible = $true } @@ -610,3 +625,5 @@ function Write-Menu { } } while ($inputLoop) } + +Export-ModuleMember -Function Write-Menu