I am trying to build a script that populates a menu using a get command. I have everything working up until the part where when I make my menu selection, I need that menu item to be used in the next command. In this script I am getting VM tag names using:
Get-TagCategory -Name BackUps | Get-Tag | select name | Out-File C:\VMWare-TXTfiles\VeeamTags.txt -force
I then get the content of the file and populate the menu:
$v = get-content 'C:\VMWare-TXTfiles\VeeamTags.txt' | select-object -skip 3
$list = @($v)
# Create blank array to hold menu
$formattedList = @()
# Even Odd Columns
for($i=0;$i -lt $list.Count; $i+=2) {
# Check if even exists
if ($list[$i+1] -ne $null) {
$formattedList += [PSCustomObject]@{
Odd = "$($i+1). $($list[$i])";
Even = "$($i+2). $($list[$i+1])"
}
}
else {
$formattedList += [PSCustomObject]@{
Odd = "$($i+1). $($list[$i])";
Even = ""
}
}
}
# Output menu
$formattedList | Format-Table -HideTableHeaders
So the menu looks like this, it is 86 items in total but you get the point:
1. MGMT-0330 2. STRETCHWLD01-1000
3. CLU01-2330 4. STRETCHWLD01-1530
And I get prompted to choose a tag, When I choose one of the tags. I need it to populate the command: get-vm -tag ""
So if I choose 1 it would do the following: get-vm -tag MGMT-0330
I have this as my next line.
Switch ($input){
'1' {get-vm -tag <tag name from menu>}
I am guessing I need to some how change that 1 to a variable and whats inside the tag name from menu to something? Anyone ever done and thing like this? Thanks for the help...
I'm not sure why write/read via that file?
And I don't think you need a switch-block.
Try something like this
$menu = for ($i = 0; $i -lt $v.Count; $i += 2)
{
$obj = [ordered]@{
Odd = "$($i+1). $($v[$i].Name)"
}
if ($v[$i + 1])
{
$obj.Add('Even', "$($i+2). $($v[$i+1].Name)")
}
New-Object PSObject -Property $obj
}
$menu | Format-Table -HideTableHeaders
$choice = Read-Host -Prompt "Select tag (1..$($v.Count))"
Get-VM -Tag $v[$choice - 1].Name
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
I'm not sure why write/read via that file?
And I don't think you need a switch-block.
Try something like this
$menu = for ($i = 0; $i -lt $v.Count; $i += 2)
{
$obj = [ordered]@{
Odd = "$($i+1). $($v[$i].Name)"
}
if ($v[$i + 1])
{
$obj.Add('Even', "$($i+2). $($v[$i+1].Name)")
}
New-Object PSObject -Property $obj
}
$menu | Format-Table -HideTableHeaders
$choice = Read-Host -Prompt "Select tag (1..$($v.Count))"
Get-VM -Tag $v[$choice - 1].Name
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
AWESOME! Yes thank you this works great. I tried to do it my way because I wasn't sure of the right way! Thanks very much for the help.