Сценарий powershell не удалось запустить из теплового шаблона из-за ошибки разбора
У меня есть сценарий 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 Solutions\Cloudbase-Init\Python27\lib\site-packages\cloudbaseinit\plugins\windows\userdatautils.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:\Users\cloudbase-init\appdata\local\temp\835603b2-b3dc-4a9b-a156-029c75322
a8f.ps1:26 char:24
+ $regex = [regex]"(?<=\> <<<< )(\d+)(.*)SNAPSHOT(?=\/\<)"
+ CategoryInfo : ObjectNotFound: (?<=\>:String) [], CommandNotFou
ndException
+ FullyQualifiedErrorId : CommandNotFoundException
Я думаю, что это проблема разбора. но не знаю, как это исправить. Так как я могу избежать разбора Python?
Я боролся с этим в течение нескольких дней. Я ценю любые советы.
1 ответ
Вполне возможно, что Python может не позволить вам использовать приведение объектов PowerShell v3, что вы и делаете, когда вы неявно вводите переменную, например [xml](Get-Content .\SomeXml.xml) или в этом случае ваше регулярное выражение,
Я бы порекомендовал попробовать проверенный синтаксис PowerShell v1 и выше, который выглядит следующим образом:
$regex = New-Object -TypeName Regex -ArgumentList "(?<=\>)(\d+)(.*)SNAPSHOT(?=\/\<)"
Я часто сталкиваюсь с такими же проблемами, как и вы, когда я переносил свои инструменты с более новых версий PowerShell и WMF на более старые версии. Ошибки могут быть неразборчивы!
Если это не поможет, пожалуйста, дайте мне знать, и мы можем попытаться выработать решение вместе.
Попробуйте использовать здесь-строку, вот пример одного:
"""This is a multiline string
with more than one line
in the source code."""
как видно здесь: Как писать строковые литералы в Python без необходимости избегать их?,