Как можно дописать этот код на GO?

помогите пожалуйста допилить скрипт до ума. Этот скрипт написанный на GO позволяет подключиться по Remote Desktop Shadow к пользователям в домене. Так вот, вот этот фрагмент кода выводит таблицу активных сессий пользователя. Она выглядит вот таким образом.

 СЕАНС             ПОЛЬЗОВАТЕЛЬ             ID  СТАТУС  ТИП         УСТР-ВО
 services                                    0  Диск
 console                                     8  Подключено
 rdp-tcp#52        Administrator             9  Активно
 rdp-tcp                                 65536  Прием

Можно ли дописать код так, чтобы он автоматически считывал эту таблицу, и если он находит в ней ячейку "Активно" по столбцу "Статус", он брал напротив этой строки ID, и помещал этот ID в самую последнюю строку скрипта. Модифицировать этот скрипт таким образом, чтобы избежать ручного ввода ID сессии пользователя.

cmd1 := exec.Command("query", "session", "/server:" + rcomp)

cmd1.Stdout = os.Stdout

cmd1.Run()

Основной код

package main
import (
    "fmt"
    "os"
    "os/exec"
    )
    
    func main() {
    var rcomp string
    fmt.Print("Введите IP-адрес или название ПК: ")
    fmt.Scanln(&rcomp)
    
    cmd1 := exec.Command("query", "session", "/server:" + rcomp)
    cmd1.Stdout = os.Stdout
    cmd1.Run()
    
    var rid string
    fmt.Print("Введите ID сессии: ")
    fmt.Scanln(&rid)
    
    cmd2 := exec.Command("mstsc", "/shadow:" + rid, "/v:" + rcomp, "/control")
    cmd2.Run()
    }

Ответы (1 шт):

Автор решения: Алексей

Написал небольшой парсер который возвращает список id активных сессий.

func GetActive(sessionsStr string) []int {
    var activesId []int

SessionsLoop:
    for _, sessionStr := range strings.Split(sessionsStr, "\n") {
        session := strings.Split(sessionStr, " ")

        isFindingStatus := false
        foundId := 0

        for _, v := range session {
            if v == " " || len(v) == 0 {
                continue
            }
            if isFindingStatus {
                isFindingStatus = false
                if v == "Активно" {
                    activesId = append(activesId, foundId)
                } else {
                    continue SessionsLoop
                }
                continue
            }
            if id, err := strconv.Atoi(v); err == nil {
                foundId = id
                isFindingStatus = true
            }
        }

    }
    return activesId
}
→ Ссылка