gpt4 book ai didi

Powershell模板

转载 作者:行者123 更新时间:2023-12-04 01:57:03 28 4
gpt4 key购买 nike

我有一个应用配置文件,其中包含两种类型的模板化变量。第一组将在构建时由一些 powershell 脚本填充。第二个保留在配置文件中,但在运行时使用。

因此,在源代码管理下,文件可能如下所示:

<property name="$($settings.elementName)" value="${valueThatIsSubstitutedAtRuntime}" />

构建后我希望它是:

<property name="settingFromPosh" value="${valueThatIsSubstitutedAtRuntime}" />

但不幸的是它出来了

<property name="settingFromPosh" value="" />

我使用的是 Powershell for Developers 中描述的模板方法的略微修改版本。基本上,我正在使用要替换的变量填充 ScriptBlock,读取模板并使用模板内容调用 Invoke-Expression。该脚本成功地替换了它能找到的值,但也清除了它不能找到的任何值。

我不愿意使用正则表达式标记替换,因为我想在模板中使用 ps 的全部功能。此外,我不想为构建期间不想填充的值引入不同的变量标记。

有没有办法将无法替换的变量留在原地,或者可能将它们转义以便忽略它们?

最佳答案

将您的字符串放在单引号中,这样 PowerShell 就不会尝试扩展其中的任何变量,例如:

<property name="$($settings.elementName)" value='${valueThatIsSubstitutedAtRuntime}' />

然后您可以使用 $ExecutionContext.InvokeCommand.ExpandString(...) 在运行时扩展字符串,例如:

$foo = 'bar'
$str = '$foo'
$ExecutionContext.InvokeCommand.ExpandString($str)

关于Powershell模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917276/

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