github.com/Azure/draft-classic@v0.16.0/cmd/draft/plugin_windows.go (about)

     1  // +build windows
     2  
     3  package main
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"os/exec"
     9  
    10  	"github.com/Azure/draft/pkg/draft/draftpath"
    11  	"github.com/Azure/draft/pkg/plugin"
    12  )
    13  
    14  // runHook will execute a plugin hook.
    15  func runHook(p *plugin.Plugin, event string) error {
    16  	hooks, ok := p.Metadata.PlatformHooks["powershell"]
    17  	if !ok {
    18  		return nil
    19  	}
    20  	hook := hooks.Get(event)
    21  	if hook == "" {
    22  		return nil
    23  	}
    24  
    25  	prog := exec.Command("powershell.exe", "-ExecutionPolicy", "Bypass", "-NoLogo", "-NonInteractive", "-NoProfile", "-Command", hook)
    26  
    27  	debug("running %s hook: %s %v", event, prog.Path, prog.Args)
    28  
    29  	home := draftpath.Home(homePath())
    30  	setupPluginEnv(p.Metadata.Name, p.Metadata.Version, p.Dir, home.Plugins(), home)
    31  	prog.Stdout, prog.Stderr = os.Stdout, os.Stderr
    32  	if err := prog.Run(); err != nil {
    33  		if eerr, ok := err.(*exec.ExitError); ok {
    34  			os.Stderr.Write(eerr.Stderr)
    35  			return fmt.Errorf("plugin %s hook for %q exited with error", event, p.Metadata.Name)
    36  		}
    37  		return err
    38  	}
    39  	return nil
    40  }