PowerShell - это интерактивная оболочка, такая как KornShell, Bash и er CMD.exe. Как и эти оболочки, он поддерживает язык сценариев (KSH, Bash, Batch). Однако PowerShell построен на основе .NET и предоставляет типы .NET и позволяет создавать и манипулировать многими типами .NET. Таким образом, вы можете использовать PowerShell для создания сценариев, которые могут делать то же, что и обычное консольное приложение .NET.
При написании небольших утилит консольных приложений необходимо учитывать, сколько усилий вы тратите на написание кода анализа и использования по сравнению с кодом, необходимым для достижения основной цели exe. Я перешел на написание множества утилит в виде скриптов PowerShell, потому что PowerShell предоставляет механизм синтаксического анализа параметров с множеством полезных функций: именованные / позиционные параметры, обязательные / необязательные параметры, значения по умолчанию для параметров, частичная спецификация имен параметров и т. Д.
PowerShell 2.0 добавляет еще больше функций в этой области (атрибуты проверки и т. Д.) С расширенными функциями. Вы можете легко написать «справочные страницы» в качестве комментариев для ваших скриптов или расширенных функций. Если раньше я тратил 50-80% своего времени, балуясь нестабильным нестандартным (или - или / и тем, и другим) кодом разбора параметров в консольном приложении C #, я позволил PowerShell справиться с этим самостоятельно. Тем не менее, я верю, что Джейкоб прав, говоря, что сложные задачи, требующие низкоуровневого кода .NET, было бы легче сделать правильно (статические проверки времени компиляции) и отладить в C # / VB / Visual Studio.
Мне бы очень хотелось, чтобы функциональность синтаксического анализа параметров PowerShell предоставлялась через набор типов .NET в BCL, чтобы вы могли написать консольное приложение и получить функциональность синтаксического анализа PowerShell. Давным-давно я использовал компонент с открытым исходным кодом под названием Genghis, но я думаю, что он был заброшен. В какой-то момент во время бета-версий .NET 4.0 в инфраструктуре появился анализатор командной строки, но он был удален до RTM. Я не думаю, что этот анализатор командной строки имел какое-либо соединение с PowerShell - и он должен иметь IMO. Так что, наверное, хорошо, что его вытащили.