2015-10-28 3 views
0

Я программирую сценарий GUI Powershell, который показывает список всех имен процессов, запущенных в системе, с помощью combobox.Использование combobox графического интерфейса Powershell GUI

Я хотел бы показать имя процесса, за которым следует идентификатор процесса в скобках. т.е.

Internet explorer (4) 
Chrome (100) 
Skype (33) 

Это код, который я получил. Пока я могу просто показать имя процесса, я не знаю, как показать идентификатор процесса, какие-либо рекомендации?

$MainForm_Load={ 
#TODO: Initialize Form Controls here 
$processes = Get-Process 
foreach ($process in $processes) 
{ 
    Load-ComboBox $combobox1 $process.ProcessName -Append 
} 

}

ответ

1

Вы можете использовать формат строки (-f)

$MainForm_Load={ 
#TODO: Initialize Form Controls here 
$processes = Get-Process 
foreach ($process in $processes) 
{ 
$CurrentProcess = "{0} ({1})" -f $process.Name,$process.id 
Load-ComboBox $combobox1 $CurrentProcess -Append 
} 

Что касается вашего вопроса Комментарий,

первым должно быть: get-process $combobox1.selecteditem.text, но он все равно не будет работать потому что, например, имя «Chrome (100)» не является допустимым именем процесса, поэтому вам нужно сначала разбить его, чтобы удалить идентификатор процесса (100),

вы можете попробовать это

$ProcessName = ($combobox1.selecteditem.text) -replace "\(.*\)" 

затем использовать

$textbox1.text = (get-process $ProcessName) | Out-String 
+0

Brilliant !, Есть ли определенный веб-сайт, где я могу проверить этот вид синтаксиса? Я знаю, что это очень простой материал, но я смотрю на сценарии GUI Powershell ... Теперь проблема в том, что я хочу показать информацию об определенном процессе, и это больше не работает ... $ buttonView_Click = { \t #TODO: Поместите пользовательский скрипт здесь \t если ($ combobox1.SelectedIndex -gt -1) \t { \t \t $ TextBox1.Text = Get-Process ($ combobox1.SelectedItem) | Из-строк \t} \t } – miticoluis

+1

Я обновил ответ ... – Avshalom

+0

Если я использую «$ combobox1.selecteditem.text» он говорит, что имя является недействительным. Где бы я ни старался, он отлично работает: $ ProcessName = ($ combobox1.SelectedItem) -replace "\ (. * \)" \t \t $ textbox1.Text = (Get-Process $ ProcessName) | Out-String Заметьте, что мне также пришлось добавить пустое место для -ремени «\ (. * \)« Спасибо большое снова – miticoluis

0

Простое решение:

get-process | %{$combobox.items.add("$($_.name)($($_.id))")} 
Смежные вопросы