我有一个 powershell 脚本来搜索字符串,当我直接从 powershell 命令提示符运行它时,该脚本可以工作,但当我将其放入 heat 模板的用户数据中时无法运行:脚本为:
$regex = [regex]"(?<=>)(d+)(.*)SNAPSHOT(?=/<)"
$allsnapshot=$regex.Matches($testcode1) | % { $_.matches } | % { $_.value } |get-unique |sort -descending
错误是:
execute_user_data_script C:Program Files (x86)Cloudbase SolutionsCloudbase-InitPython27libsite-packagescloudbaseinitpluginswindowsuserdatautils.py:58
2015-04-25 12:11:45.140 1796 DEBUG cloudbaseinit.plugins.windows.userdatautils [-] User_data stderr:
The term '?<=>' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:Userscloudbase-initappdatalocaltemp835603b2-b3dc-4a9b-a156-029c75322
a8f.ps1:26 char:24
+ $regex = [regex]"(?<=> <<<< )(d+)(.*)SNAPSHOT(?=/<)"
+ CategoryInfo : ObjectNotFound: (?<=>:String) [], CommandNotFou
ndException
+ FullyQualifiedErrorId : CommandNotFoundException
我认为这是一个解析问题。 但不知道如何解决它。那么我怎样才能避免Python来解析它呢?
我为此挣扎了好几天。我感谢任何建议。
Python 可能不允许你使用 PowerShell v3 对象强制转换,当你隐式键入变量(如 [xml](Get-Content .\SomeXml.xml)或在本例中为正则表达式时,就是这样做的。
我建议尝试使用久经考验的 PowerShell v1 及更高版本的对象强制转换语法,如下所示:
$regex = New-Object -TypeName Regex -ArgumentList "(?<=>)(d+)(.*)SNAPSHOT(?=/<)"
我经常遇到问题,就像您在将工具从较新版本的PowerShell和WMF移植到旧版本时遇到的问题一样。 错误可能难以破译!
如果这没有帮助,请告诉我,我们可以尝试一起制定解决方案。
尝试使用 here-string,下面是一个示例:
"""This is a multiline string
with more than one line
in the source code."""
如图所示: 如何在 python 中编写字符串文字而不必转义它们?