Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Examples/AdvancedMenu.md
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
2 changes: 1 addition & 1 deletion Examples/AdvancedMenu.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
2 changes: 1 addition & 1 deletion Examples/AppxPackages.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Examples/AppxPackages.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 2 additions & 2 deletions Examples/CustomMenu.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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'
Expand Down
2 changes: 1 addition & 1 deletion Examples/CustomMenu.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#>

# Include
. ..\Write-Menu.ps1
Import-Module ..\Write-Menu.psm1

$menuReturn = Write-Menu -Title 'Custom Menu' -Entries @(
'Menu Option 1'
Expand Down
27 changes: 22 additions & 5 deletions Write-Menu.ps1 → Write-Menu.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -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
)

<#
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand All @@ -610,3 +625,5 @@ function Write-Menu {
}
} while ($inputLoop)
}

Export-ModuleMember -Function Write-Menu