go - 调用 appcmd 会导致设置错误的密码

标签 go iis appcmd

我正在尝试从 Go 中调用 appcmd。下面的代码显示成功,但密码设置错误。如果我删除内部引号(在 main 的第二行)它可以工作,但是当密码包含空格时它就不起作用了!现在加上引号,如果我在 cmd.exe 中输入与输出完全相同的命令,它就可以工作!那是什么鬼!为什么它可以直接在 cmd 中使用引号而不是从 Go 调用时?
我真的不想成为那个说你不能在密码中使用空格的人,因为我不知道为什么它不起作用!啊!

package main

import (
    "bytes"
    "fmt"
    "os/exec"
    "strconv"
    "strings"
    "syscall"
)

func main() {
    iisPath := "C:\\WINDOWS\\sysWOW64\\inetsrv\\"
    callAppcmd(iisPath, "-processModel.password:\"password\"")
}

func callAppcmd(iisPath string, param string) {
    stdOut, _, _, exitCode := runCommand(
        iisPath+"appcmd.exe",
        "set",
        "apppool",
        "/apppool.name:DefaultAppPool",
        param)

    printOut(stdOut)
    printOut(strconv.Itoa(exitCode))
}

func printOut(text string) {
    fmt.Println(text)
}

func runCommand(commands ...string) (string, string, error, int) {
    printOut(strings.Join(commands, " "))
    cmd := exec.Command(commands[0], commands[1:]...)
    cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()

    exitCode := 0

    if exitError, ok := err.(*exec.ExitError); ok {
        exitCode = exitError.ExitCode()
    }

    return out.String(), stderr.String(), err, exitCode
}
输出:
C:\WINDOWS\sysWOW64\inetsrv\appcmd.exe set apppool /apppool.name:DefaultAppPool -processModel.password:"password"
APPPOOL object "DefaultAppPool" changed

0

最佳答案

似乎用反引号格式化字符串是一种解决方案,它不会自动转义并且可以正确处理引号。

cmd := exec.Command(`find`)
cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt`
请引用以下链接。
exec with double quoted argument

关于go - 调用 appcmd 会导致设置错误的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63293680/

相关文章:

windows - 带有双引号参数的 exec

asp.net - IIS 7.0 给出 503 错误并停止应用程序池

sql-server - 当网站托管在 IIS 中时无法打开数据库

visual-studio-2010 - 从命令行停止由IIS Express托管的网站

iis - 我可以使用 PowerShell 而不是 AppCmd.exe 来监视 IIS 状态吗?

Azure Appcmd启动任务,为所有站点设置 preloadEnabled

google-app-engine - http.DefaultTransport 和 http.DefaultClient 在 AppEngine 中不可用,但库使用它们

go - 如何转储 goroutine 堆栈跟踪?

performance - FizzBu​​zz 程序似乎很慢 : why?

c# - IIS 虚拟文件夹 URL 加密