登录
首页 >  Golang >  Go问答

是否可以执行内存映射的 PowerShell 脚本文件?

来源:stackoverflow

时间:2024-04-16 21:48:31 383浏览 收藏

你在学习Golang相关的知识吗?本文《是否可以执行内存映射的 PowerShell 脚本文件?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我有一个 Go 应用程序,它接受 PowerShell 命令作为输入,创建一个新的 ps1 文件,将命令写入该文件,然后执行脚本文件。

如果该文件对用户不可见,那就太好了。

如果有某种方法可以将脚本文件创建为内存映射文件,然后执行该内存映射文件,那将是一个很好的解决方案。

使用 CGo,我可以从 Go 应用程序调用 C 或 C++。由于 PowerShell 可以使用 C# 对象,我想也许我们可以以某种方式调用 C# 代码(来自 C/C++ 或 Go)并创建一个 C# 内存映射文件对象,然后 PowerShell 可以使用该对象作为脚本执行。

诚然,我对如何从非托管代码调用托管代码的工作原理一无所知。

那么,是否有某种方法可以获取包含 PowerShell 命令的字符串并将其作为脚本执行,而无需创建磁盘文件?


解决方案


要使 powershell.exe 将脚本输入读取为标准输入,请将 - 作为命令行参数传递:

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
    "strings"
)

func main() {
    cmd := exec.command("powershell", "-")
    cmd.stdin = strings.newreader("write-output 'hello, world!'")
    var out bytes.buffer
    cmd.stdout = &out
    err := cmd.run()
    if err != nil {
        log.fatal(err)
    }
    fmt.printf("pwsh out: %q\n", out.string())
}

使用 Go 1.16 you can embed 构建时可执行文件中的脚本:

package main

import (
    "bytes"
    _ "embed"
    "fmt"
    "log"
    "os/exec"
    "strings"
)

//go:embed script.ps1
var scriptBytes []byte

func main() {
    cmd := exec.Command("powershell", "-")
    cmd.Stdin = strings.NewReader(string(scriptBytes))
    var out bytes.Buffer
    cmd.Stdout = &out
    err := cmd.Run()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("pwsh out: %q\n", out.String())
}

终于介绍完啦!小伙伴们,这篇关于《是否可以执行内存映射的 PowerShell 脚本文件?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>