Сохранить выходные данные команды, выполненной на удаленной системе, и составить список в правильном формате и выбрать параметр из этого списка в powershell? - PullRequest
1 голос
/ 18 марта 2020

Я запускаю приведенную ниже команду в одной из моих функций powershell, чтобы получить список служб с удаленного компьютера

Get-WmiObject -Class Win32_Service -filter "name like '$envlist%'" -Impersonation 3 -Credential abcdomain\PXXXX -ComputerName $server  | Format-List -Property Name

Приведенная выше команда дает мне приведенный ниже вывод, и я хочу сохранить его в переменной и перечислите его в правильном формате

Name : ABC_xx02_TT_xcedf_1.0.00.0101

Name : ABC_xx02_TT_nghk_2.1.0.99999

Name : ABC_xx02_TT_nmk_3_1.0.3.7890

Name : ABC_xx02_TT_pnp_4.0.0.123

Я ожидаю вывод следующим образом: (ниже услуг может быть больше, поэтому нужно использовать что-то вроде счетчика). Как только я выбираю любой вариант из ниже, я хочу сохранить Например, если я выбрал «3», его следует хранить в переменной $ serivcename = ABC_LA02_TT_nmk_3_1.0.3.7890

1. Press 1 to select ABC_xx02_TT_xcedf_1.0.00.0101

2. Press 2 select ABC_xx02_TT_nghk_2.1.0.99999

3. Press 3 to select ABC_xx02_TT_nmk_3_1.0.3.7890

4. Press 4 to select ABC_xx02_TT_pnp_4.0.0.123

Пожалуйста, сделайте выбор:

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Я, конечно, понятия не имею, что может быть в '$envlist%', но, очевидно, это дает вам нужный вам результат. Прямо сейчас ваш код использует Format-List, но это не отображает консольное меню, которое можно использовать.

Я бы сделал это так:

$collection = (Get-WmiObject -Class Win32_Service -Filter "name like '$envlist%'" -Impersonation 3 -Credential abcdomain\PXXXX -ComputerName $server).Name
while ($true) {
    Clear-Host
    for ($i = 1; $i -le $collection.Count; $i++) {
        # build your menu
        "{0}. Press {0} to select {1}" -f $i, $collection[$i - 1]
    }
    $answer = Read-Host "Please make a selection. Press Q to quit"

    # test if the (string) answer is in range, or if the user wants to quit
    # if so, break the while loop
    if ($answer -match "[1-$($collection.Count)Q]") { break }

    # when you reach this point, the user made an invalid choice
    Write-Host "Invalid input, please try again" -ForegroundColor Red
    Start-Sleep -Seconds 3
}

# do whatever you need with the selected option
if ($answer -ne 'Q') {
    Write-Host "User selected '{0}'" -f $collection[[int]$answer - 1]
    # DoStuff $collection[[int]$answer - 1]
}
1 голос
/ 18 марта 2020

Попробуйте:

$i = 0
Get-WmiObject -Class Win32_Service -filter "name like '$envlist%'" -Impersonation 3 -Credential abcdomain\PXXXX -ComputerName $server  | Foreach {
  $i++
 Write-host "$($i). Press $($i) to select $($_.name.split('=')[1])"
}
$input = read-host "Please make a selection"

Теперь выделение будет сохранено в $ input.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...