gpt4 book ai didi

powershell - 建立一个要传递给调用运算符(operator)的字符串

转载 作者:行者123 更新时间:2023-12-03 00:37:48 25 4
gpt4 key购买 nike

我需要构建一个实际上是命令行的字符串,然后执行该命令行的内容。我希望 call 运算符(&)会有所帮助,但似乎没有帮助。这是一个简单的示例。以下工作正常,可对网站执行ping操作:

$command = "ping"
$website = "www.bbc.co.uk"
& $command $website

但是,如果我将其更改为:
$command = "ping"
$website = "www.bbc.co.uk"
$cmd = "$command $website"
& $cmd

我收到一个错误:

The term 'ping www.bbc.co.uk' is not recognized as the name of a cmdlet, function, script file, or operable program.



有没有办法将命令行作为字符串动态构建,然后执行?

最佳答案

是的,但是您需要使用Invoke-Expression(就像eval一样),而不是调用运算符。请注意,在这种情况下,您还需要确保所有报价均正确。例如。

$cmd = "'$command' '$website'"

除非 $command$website包含单引号,否则将在您的琐碎示例中起作用。这里的问题本质上是,您放入字符串中的所有内容都必须遵守PowerShell的常规解析规则。

通常,如果可以的话,请尽量远离 Invoke-Expression。有一些问题需要它,但是调用外部程序……不是很多。

更好的替代方法是,仅将参数收集在数组中并使用splat运算符(请注意下面的代码示例中的 @),尤其是在参数数量任意的情况下:
$command = 'ping'
$arguments = '-t','www.bbc.co.uk'
&$command @arguments

这样可以确保在必要时正确引用参数,并且通常避免了 Invoke-Expression会引起的很多麻烦。

(旁注:每当您在PowerShell中遇到问题并认为»“噢,我只想使用字符串”时,通常需要重新考虑这一点。这包括处理文件名或命令行。PowerShell具有对象,可以减少它早期Shell的功能所带来的痛苦,与您在其他地方所遭受的痛苦相同,例如,多级转义,有时使用不同的语法等。大多数时候,有更好的方法来解决问题。)

关于powershell - 建立一个要传递给调用运算符(operator)的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453133/

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