gpt4 book ai didi

powershell - Powershell:具有转义参数(-%)的调用运算符(&)无法与非静态参数一起使用

转载 作者:行者123 更新时间:2023-12-04 13:27:20 26 4
gpt4 key购买 nike

我的Powershell脚本需要使用一组非常复杂的参数来调用EXE。我正在使用Powershell 3.0,并且必须坚持使用该版本。 las,即使是“魔术”转义运算符(--%)也无法帮助我。例如,使用“调用”运算符,请考虑以下因素:

& other.exe --% action /mode fast /path:"location with spaces" /fancyparam { /dothis /dothat:"arg with spaces" } /verbose

现在,只要这么简单,我的脚本就可以轻松正常运行。但这不是那么简单。 “other.exe”的参数可以不同,具体取决于脚本前面的用户选择。因此,我需要提前建立这些参数,也许是这样的:
$commandArgs = 'action /mode ' + $userMode + ' /path:"location with spaces" /fancyparam { /dothis /dothat:"' + $userArgs + " } /verbose'

因此,我将以这种方式调用:
& other.exe --% $commandArgs

...好吧,希望 --%意味着它只是传递了 $commandArgs的原始字符串。但是,如果没有 --%,powershell会自动为$ commandArgs的内容加引号,这实际上弄乱了内部引号(更不用说打破了other.exe首先需要在前面的'action'参数)。换句话说,我已经尝试将 --%嵌入我的$ commandArgs字符串中,但是在解析该损坏时已经造成了损害(而且我什至认为这种方式也不起作用)。

请注意,此示例仅是我需要执行的实际命令的1/4左右-其中包括更多的用户参数,引号和其他有趣的字符,这些字符会使我急忙转义!我也已经在使用echoargs.exe工具,这就是我看到自己遇到的麻烦的方式。哦,我的示例中也需要所有空格(即,大括号字符周围也需要空格)。

因此,在寻找答案之后,我求助于您。提前致谢。

最佳答案

好的,可能很奇怪,正在回答我自己的问题,但是昨天在这个问题上待了一天之后,我自己可能已经意识到了答案。至少,这是我发现可行的方法。但是我在这里发布以获得更多反馈,以防万一我确实在做一些不建议的事情……使用Invoke-Expression :-)

我很早就意识到了这一点,有些人在您的回复中证实了这一点,即--%阻止了所有进一步的扩展(包括我的$ variables)。我的问题是,在尝试使用Call操作符(&)时,我仍然需要扩展很多内容。如果在使用--%之前我的命令行已经准备就绪,那么将可以解决我的问题,这就是我所做的。

我创建了一个新字符串,该字符串包括:

$fullCommand = '& "other.exe" --% ' + $commandArgs

(EXE路径中实际上有空格,因此带有引号。)然后,将其全部构建(包括需要的 --%),作为新脚本调用它:
Invoke-Expression $fullCommand

到目前为止,我取得了很好的成绩。但是我在搜索中知道到目前为止,Invoke-Expression听起来像是人们不应该使用的不好的东西。大家好吗?

关于powershell - Powershell:具有转义参数(-%)的调用运算符(&)无法与非静态参数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386643/

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