Тестирование скриптов Powershell на правильность - PullRequest
5 голосов
/ 16 апреля 2009

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

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

Спасибо.

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

Я думаю, что способ сделать это - использовать это, это v2 lib.

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

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

Спасибо.

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

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

Ответы [ 4 ]

4 голосов
/ 16 апреля 2009

То, что вы хотите, это просто whatif / Подтвердить . Это прямой порт из мира Unix.

1 голос
/ 16 апреля 2009

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

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

Синтаксически вы ищете статическую проверку кода для powershell.

0 голосов
/ 16 апреля 2009

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

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

В описании, которое вы даете, звучит так, будто вы хотите чего-то большего, чем просто синтаксис / проверка типа "будет ли он выполняться". Как говорит @JoHannes Rossell, это не тривиально и очень специфично для того, что вы делаете.

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

1009 * Джеймс *

0 голосов
/ 16 апреля 2009

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

...