отсутствует стандартный вывод при использовании psexec в golang - PullRequest
0 голосов
/ 13 октября 2018

На удаленном компьютере я просто использовал psexec.exe для запуска определенной команды, вывод команды cmd не поврежден при тестировании в оболочке.

При отправке команды cmd в Golang была напечатана только первая строка.

Я пытался использовать winexe на платформе Linux, но антивирус Symantec рассматривает его как PUA, затем я вернулся к платформе Windows.

func main() {
  cmd := exec.Command("C:\\Users\\v\\go\\src\\asys\\ss\\psexec.exe", "\\\\192.168.0.64",  "-nobanner", "-accepteula", "-u", "vz", "-p", "1",  "-s", "cmd", "/c", "ipconfig")
  var out bytes.Buffer
  multi := io.MultiWriter(os.Stdout, &out)
  cmd.Stdout = multi
  if err := cmd.Run(); err != nil {
    log.Fatalln(err)
  }
  fmt.Printf("\n*** FULL OUTPUT *** %s\n", out.String())
}

вывод:

Windows IP Configuration
*** FULL OUTPUT ***
Windows IP Configuration
Process finished with exit code 0

1 Ответ

0 голосов
/ 13 октября 2018

Не отвечать на ваш вопрос напрямую, но, боюсь, вы можете стать жертвой так называемой проблемы XY : нет смысла прыгать через такое количество обручей, чтобы просто собрать информацию оконфигурация стека IP целевого хоста - Windows предоставляет специальные средства, называемые WMI , для выполнения таких задач.

Таким образом, вместо вызова psexec.exe для вызова - на целихост - cmd.exe для вызова ipconfig.exe, вы можете просто отложить эту задачу до одного из запросов, поддерживаемых WMI.

Я бы предложил использовать либо Win32_NetworkAdapter, либо Win32_IP4RouteTable (или оба) -в зависимости от того, какой тип данных вам действительно нужен (конфигурация сетевых карт или данных маршрутизации).

Рабочий образец, использующий github.com/StackExchange/wmi:

package main

import (
    "log"
    "os"
    "time"

    "github.com/StackExchange/wmi"
)

type win32_NetworkAdapter struct {
    AdapterType string
    AdapterTypeID uint16
    AutoSense bool
    Availability uint16
    Caption string
    ConfigManagerErrorCode uint32
    ConfigManagerUserConfig bool
    CreationClassName string
    Description string
    DeviceID string
    ErrorCleared bool
    ErrorDescription string
    GUID string
    Index uint32
    InstallDate time.Time
    Installed bool
    InterfaceIndex uint32
    LastErrorCode uint32
    MACAddress string
    Manufacturer string
    MaxNumberControlled uint32
    MaxSpeed uint64
    Name string
    NetConnectionID string
    NetConnectionStatus uint16
    NetEnabled bool
    NetworkAddresses []string
    PermanentAddress string
    PhysicalAdapter bool
    PNPDeviceID string
    PowerManagementCapabilities []uint16
    PowerManagementSupported bool
    ProductName string
    ServiceName string
    Speed uint64
    Status string
    StatusInfo uint16
    SystemCreationClassName string
    SystemName string
    TimeOfLastReset time.Time
}

type win32_IP4RouteTable struct {
    Age int32
    Caption string
    Description string
    Destination string
    Information string
    InstallDate time.Time
    InterfaceIndex int32
    Mask string
    Metric1 int32
    Metric2 int32
    Metric3 int32
    Metric4 int32
    Metric5 int32
    Name string
    NextHop string
    Protocol uint32
    Status string
    Type uint32
}

func main() {
    var compName string
    switch len(os.Args) {
    case 1:
        compName = "."
    case 2:
        compName = os.Args[1]
    default:
        log.Fatalf("usage: %s [COMPUTER]", os.Args[0])
    }

    var dst []win32_NetworkAdapter
    //var dst []win32_IP4RouteTable
    q := wmi.CreateQuery(&dst, "")
    err := wmi.Query(q, &dst, compName)
    if err != nil {
        log.Fatalf("%#v\n", err)
    }

    for _, v := range dst {
        log.Printf("%#v\n", v)
    }
}

Asпредставлен, он запрашивает хост, имя которого передается в командной строке (или, если его не хватает, localhost), для конфигурации NIC.

Чтобы вместо этого получить данные маршрутизации, закомментируйте первый оператор var dst ... и раскомментируйтевторой.Надеюсь, вы поймете идею.

Соответствующие отправные точки: это и то .

...