С выпуском SQL Server 2008 R2 начались обсуждения о полезной программе sqlps и ее связи с версиями PowerShell. Хотя sqlps не является ни PowerShell V1, ни V2, важно понимать, как она реализована и в чем отличие от других продуктов Microsoft, предоставляющих интеграцию с PowerShell.
Продукты Microsoft, предоставляющие интеграцию с PowerShell, обычно используют один из двух методов: файлы консоли или сценарии запуска. Файлы консоли – это XML-файлы, в которых хранится информация о конфигурации сеанса PowerShell, включая пользовательские Snapin. С другой стороны, сценарии запуска – это обычные сценарии PowerShell, которые выполняются при запуске.
Однако sqlps использует другой подход и реализована в виде мини-оболочки. Это делает sqlps уникальной среди продуктов Microsoft. Мини-оболочка – это, по сути, пользовательская оболочка PowerShell, которая реализует свой собственный класс RunspaceConfiguration. Это позволяет разработчику оболочки явно определить доступные командлеты для мини-оболочки.
Создание мини-оболочки включает использование устаревшего инструмента под названием make-shell. Этот инструмент не рекомендуется для создания решений PowerShell в рамках распределенного продукта. Однако он предоставляет представление о том, как создается sqlps. Утилита make-shell генерирует исполняемый файл и исходный код для автоматического создания списка командлетов для разработчика оболочки PowerShell.
Важно отметить, что sqlps была создана с использованием make-shell и сборок PowerShell V1. Поэтому в sqlps доступны только командлеты PowerShell V1. Чтобы продемонстрировать это, мы можем создать собственную мини-оболочку с помощью утилиты make-shell.
Для создания мини-оболочки нам необходимо установить SQL Server 2008 или SQL Server 2008 R2 и настроить каталог сборки. Каталог сборки должен содержать необходимые файлы из установки SQL Server и Windows SDK. После настройки каталога сборки мы можем использовать утилиту make-shell для создания нашей мини-оболочки.
После создания мини-оболочки мы можем протестировать ее, запустив некоторые команды. Результат покажет, что мини-оболочка функционально эквивалентна sqlps и содержит тот же набор командлетов.
В заключение, sqlps – это мини-оболочка, которая работает как в PowerShell V1, так и в V2. Она не является ни PowerShell V1, ни V2 сама по себе. Мини-оболочки реализуют класс RunspaceConfiguration, который требует от разработчика оболочки явно определить доступные командлеты. Поскольку sqlps была создана с использованием make-shell и сборок PowerShell V1, в sqlps доступны только командлеты PowerShell V1.
Важно понимать различия между sqlps и другими продуктами Microsoft, предоставляющими интеграцию с PowerShell. Изучая детали реализации sqlps, мы можем лучше понять, как она работает и в чем отличие от других пользовательских оболочек.