我可以拥有一个包含在运行时评估的委托的字符串吗?

时间:2016-05-25 13:37:16

标签: powershell powershell-v4.0

我是否可以拥有一个包含在运行时期间不同时间展开的委托的字符串?

$pattern = "(?m)^INFO\:(?:\s|\t)*$({script:$marker})\:(?:\s|\t)*(?<url>.*)$"
$marker = "Some marker value"
:
#Do something with the resulting pattern containing the marker value
:
$marker = "Some other marker value"
:
#Do something with the pattern having the new marker value

等等......我不想继续重新定义字符串...或者有一个构建它的函数。如果我可以在字符串中有几个字符,当需要字符串时与在设置$ pattern值时进行评估,这似乎更简洁。

1 个答案:

答案 0 :(得分:2)

你可以做到

$pattern = {"(?m)^INFO\:(?:\s|\t)*($script:marker)\:(?:\s|\t)*(?<url>.*)$"}

然后再使用

$pattern.invoke()

(假设你想要$ script:marker是稍后设置的字符,你原来的例子有$({script:$ marker}),但是如果它应该做的话我就不会工作认为应该;))

一般情况下:使用{}及更高版本.invoke()将术语定义为Scriptblock以对其进行评估。

请确保大括号内的类型没有混淆,否则您可能会得到一些奇怪的结果......