gpt4 book ai didi

powershell - 以管理员身份运行的 PowerShell 脚本 block 中的变量替换

转载 作者:行者123 更新时间:2023-12-02 02:50:06 24 4
gpt4 key购买 nike

我正在用 PowerShell 编写代码。我想以管理员身份更改配置文件中的端口,但它不起作用。

这是我的代码:

$port=8888

$ScriptBlock = {
function bar($port) {
$config = Get-Content -Path "c:\Users\Me\foo.xml"
$NewConfig = $Config -replace 'httpPort=[0-9]*\s',"httpPort=$port "
Set-Content -Path c:\ProgramFiles(x86)\foo.xml -Value $NewConfig -Force
}
};
Start-Process -FilePath powershell.exe -ArgumentList $ScriptBlock,"bar('$port')" -Verb RunAs -Wait

我认为 -replace ("httpPort=$port ") 的第二部分有问题。

我错过了什么?

最佳答案

您可以尝试以下方法:

Start-Process -Verb RunAs -Wait -FilePath powershell.exe -ArgumentList '-Command',
"$($ScriptBlock -replace '"', '\"'); bar $port"

顺便说一句:
* 您用于匹配端口号的正则表达式表明它是一个未加引号 的属性值,虽然在 HTML 中可接受,但格式不正确 XML.
* 不要使用方法语法 (bar($port)) 调用您的函数 - PowerShell 函数的调用方式类似于 shell 命令,没有括号,参数由空格分隔,而不是,: bar $port

至于你尝试了什么:

  • Start-Process 总是将传递给 -ArgumentList 的参数解释为 strings,而脚本 block 可以方便地对其进行字符串化文字字符串内容,您需要将嵌入的 " 字符转义为 \"(原文如此),以便目标 PowerShell 实例能够正确识别它们(在 Windows 中暗示) PowerShell) -Command 选项。

  • 由于 -Command 只是简单地将所有后续参数与一个空格作为分隔符连接起来,将结果字符串解释为一段 PowerShell 源代码之前,通常为了概念清晰,最好传递单个字符串。

关于powershell - 以管理员身份运行的 PowerShell 脚本 block 中的变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52616177/

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