Вопрос

В любом случае они могут проверить правильность сценария PowerShell, не выполняя его.Я знаю, что вы могли бы сделать что-то подобное в Unix, но не можете найти эквивалент для PowerShell.

По сути, у меня есть репозиторий сценариев, где каждый сценарий привязан к правилу.Если правило срабатывает, сценарий выполняется, но мне нужно убедиться, что сценарий действителен, прежде чем его помещать в репозиторий.

Спасибо.

Привет, к сожалению, команды -Whatif недостаточно.Это синтаксис сценариев, которые я хочу проверить с помощью механизма выполнения C#, который запускает сценарий, если срабатывает правило механизма.Перед запуском сценария я записываю в него значения IList из правила, а затем запускаю его.Но мне нужно убедиться, что это синтаксически правильно, иначе мне придется полагаться на автора правил, чтобы гарантировать их правильность, чего я не могу сделать, так как многие люди будут писать правила, только один сценарий duff принесет двигатель выключен.Я не могу этого сделать, поскольку этот движок представляет собой продукт корпоративного класса, рассчитанный на бесперебойную работу по принципу шести сигм.

Я думаю, что можно сделать это, используя библиотеку v2.

http://msdn.microsoft.com/en-us/library/system.management.automation.parseeException(VS.85).aspx

Я думаю, что есть способ создать ScriptBlock и обойти его, чтобы перехватить ParseException.Может кто-нибудь сказать мне, как это сделать.Это становится настоящим вызовом.

Спасибо.

Эй, я поговорил с парнем в MS (он SharePoint PM), и он поговорил с одним из парней PowerShell, и сообщил мне, что в PowerShell V1 нет реального способа проверить синтаксис сценария без выполнения.Так что я думаю, что флаг -whatif является наиболее близким, но, к сожалению, это не статическая проверка.Хорошей новостью является то, что в версии 2 есть способ токенизировать входной поток с помощью класса Automation.PsParser, члена Tokenize.Это токенизирует скрипт в соответствии с граммами PS, так что если он выйдет из строя, то это дерьмовый скрипт.Вопрос в том, что у v2 пока нет даты выпуска.

Спасибо за помощь.Боб.

Это было полезно?

Решение

То, что вы хотите, вероятно, что если / подтвердим.Это прямой порт из мира Unix.

Другие советы

Итак, вы спрашиваете о функциональной правильности или синтаксической правильности?

Функционально вам необходимо создать тестовый пример и среду для тестирования.

Синтаксически вы ищете средство проверки статического кода для PowerShell.

Многие команды PowerShell предлагают -что, если параметр.

Я думаю, вам нужно количественно оценить, что для вас значит «действительный».Это неоднозначный термин и может означать много вещей.

Если вы имеете в виду что-то вроде проверки синтаксиса Perl, то для сценария PowerShell не существует точного эквивалента с PowerShell V1.Я не уверен, что в V2 есть что-нибудь для этого.

Описание, которое вы даете, звучит так, будто вам нужно нечто большее, чем просто проверка синтаксиса/типа «запустится ли оно».Как говорит @JoHannes Rossell, это нетривиально и очень зависит от того, что вы делаете.

Упомянутые ранее методы «whatif/confirm» в других ответах работают только для командлетов PowerShell, а не для сценариев.Они показывают, что будет делать этот командлет, а не проверку синтаксиса.

Джеймс

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top