我喜歡在 1 Go 二進制檔案中嵌入一些 powershell 腳本。我如何嵌入它們并執行來自 GO 的命令。目前我是通過運行外部腳本獲得的
//
out,err := exec.Command("Powershell", "-file" , "C:\\test\\go\\my.ps1").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Data from powershell script is: %s", out)
//
my.ps1 內容
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
//
我還有一些 powershell 腳本,我喜歡將 powershell 腳本添加到我的 go 二進制檔案中。嘗試了一些我在互聯網上找到但失敗的東西。
uj5u.com熱心網友回復:
嵌入您的資產:
import (
_ "embed"
)
//go:embed my.ps1
var shellBody []byte
然后當您需要主機作業系統訪問它時,通過臨時檔案將其顯示出來:
tmp, err := ioutil.TempFile("/tmp", "powershell.*.ps1")
if err != nil {
log.Fatal(err)
}
defer os.Remove(tmp.Name()) // clean-up when done
f, err := os.OpenFile(tmp.Name(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
log.Fatal(err)
}
_, err = f.Write(shellBody)
if err != nil {
log.Fatal(err)
}
err = f.Close()
if err != nil {
log.Fatal(err)
}
然后你可以呼叫Powershell:
out, err := exec.Command("Powershell", "-file" , tmp.Name()).Output()
if err != nil {
log.Fatal(err)
}
uj5u.com熱心網友回復:
您可以使用 go1.16 和embed,您應該創建一個單獨的檔案夾來保存嵌入檔案定義,然后使用另一個函式回傳 string 或 byte[] 檔案參考。
package main
import (
"embed"
"text/template"
)
var (
// file.txt resides in a separated folder
//go:embed file.txt
myfile string
)
func main() {
fmt.Printf("File %q\n", myfile)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370377.html
上一篇:如何將1個以上的注釋檢索到CSV
