gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:11:32 53 4
gpt4 key购买 nike

我正在尝试从 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/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com