gpt4 book ai didi

powershell - 如何解析 Powershell 脚本 block 中的变量

转载 作者:行者123 更新时间:2023-12-03 16:24:54 24 4
gpt4 key购买 nike

鉴于我有:

$a = "world"
$b = { write-host "hello $a" }
如何获取脚本块的解析文本,它应该是包含 write-host 的 entre 字符串:
write-host "hello world"
更新:补充说明
如果您只是打印 $b你得到的是变量而不是解析值
write-host "hello $a"
如果您使用 & $b 执行脚本块你得到的是打印值,而不是脚本块的内容:
hello world
这个问题正在寻找一个字符串,其中包含带有评估变量的脚本块的内容,它是:
write-host "hello world"

最佳答案

与原始问题一样,如果您的整个 scriptblock 内容不是字符串(但您希望它是)并且您需要在 scriptblock 中进行变量替换,则可以使用以下内容:

$ExecutionContext.InvokeCommand.ExpandString($b)

调用 .InvokeCommand.ExpandString($b)在当前执行上下文中将使用 中的变量当前范围 为替代。

以下是创建脚本块并检索其内容的一种方法:
$a = "world"
$b = [ScriptBlock]::create("write-host hello $a")
$b

write-host hello world

您可以使用脚本块表示法 {}也可以完成同样的事情,但您需要使用 &调用运算符(operator):
$a = "world"
$b = {"write-host hello $a"}
& $b

write-host hello world

使用上述方法的一个特点是,如果您更改 $a 的值在任何时候,然后再次调用脚本块,输出将更新如下:
$a = "world"
$b = {"write-host hello $a"}
& $b
write-host hello world
$a = "hi"
& $b
write-host hello hi
GetNewClosure()方法可用于创建上述脚本块的克隆,以获取脚本块当前评估的理论快照。它将不受 $a 更改的影响值后面的代码:
$b = {"write-host hello $a"}.GetNewClosure()
& $b
write-host hello world
$a = "new world"
& $b
write-host hello world
{}符号表示您可能已经知道的脚本块对象。可以传递给 Invoke-Command ,这会打开其他选项。您还可以在脚本块内创建可以稍后传入的参数。见 about_Script_Blocks想要查询更多的信息。

关于powershell - 如何解析 Powershell 脚本 block 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55063570/

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