Как можно дописать этот код на 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
}