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 }