Как я могу иметь родительский скрипт, но поддерживать разделение задач с помощью скриптов Powershell? - PullRequest
1 голос
/ 20 декабря 2011

Поэтому я работаю над некоторыми сценариями управления IIS для конкретной настройки сайта IIS, предназначенной исключительно для продукта, для выполнения таких задач, как:

- Create Site
- Create App Pool
- Create Virtual directories

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

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

ПРИМЕЧАНИЕ. Я знаю, что могу поместить их в модули и запустить отдельные функции «Экспортировано в среду», но этот сценарий будет перенесен в среду, которая требует настройки и установки модулей вручную ( psm1) файлы в соответствующие папки модуля PowerShell только для запуска сценариев - это маршрут, который мне не особенно нравится.

Я новичок в написании сценариев с Powershell, какие-либо мысли или рекомендации?

Возможный ответ *

Возможно, это (а) решение: но я обнаружил, что могу импортировать модули из рабочего каталога и оттуда иметь доступ к этим экспортированным функциям.

Меня интересуют и другие предложения.

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

То, как я бы обратился, это реализовать блок param в верхней части каждого вспомогательного скрипта, который будет собирать информацию, необходимую для запуска. Если отдельный сценарий запускается отдельно, блок param запрашивает у пользователя данные, необходимые для запуска этого отдельного сценария. Это также позволяет родительскому сценарию передавать данные, необходимые для запуска индексов, так как родительский сценарий вызывает вспомогательный сценарий. Необходимые данные могут быть жестко запрограммированы в родительском скрипте, или могут быть запрошены, или их комбинация. Таким образом, вы можете настроить запуск сценариев либо без вывода сообщений, либо с помощью взаимодействия с пользователем. Вы получаете взаимодействие с пользователем бесплатно от механизма обработки параметров Powershell. В индексах добавьте атрибут параметра, чтобы указать, что Powershell будет запрашивать эти конкретные значения параметров у пользователя, если они еще не предоставлены вызывающим сценарием.

В верхней части ваших подпрограмм используйте блок параметров для сбора необходимых данных.

param
(
    [parameter(Mandatory=$true, HelpMessage="This is required, please enter a value.")]
    [string] $SomeParameter
)
2 голосов
/ 20 декабря 2011

Вы можете иметь сценарий deploy.ps1, который ставит точки для отдельных сценариев, а затем вызывает необходимые функции внутри них:

. $scriptDir\create-site.ps1
. $scriptDir\create-apppool.ps1
. $scriptDir\create-virtualdirectories.ps1

Prompt-Values

Create-Site -site test
Create-AppPool -pool test
Create-VirtualDirectories -vd test

В отдельных функциях вы можете видеть, передаются ли необходимые значения виз вызывающей стороны (deploy.ps1 или из командной строки)

Например, create-site.ps1 будет выглядеть так:

function Create-Site($site){
    if(-not $site){
         Prompt-Values
    }
}
1 голос
/ 21 декабря 2011

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

Т.е.

Напишите Set-SiteInfo -Name -Pool -VirtualDirectory и сохраните значения в реестре или в локальном каталоге модуля ($ psScriptRoot), а затем используйте другие команды в модуле.

Если модуль помещается в место, где нет прав на запись в файл для пользователей с ограниченными правами (т. Е. Каталог веб-сайта или $ psHome), то лучше хранить значения в реестре..

Надеюсь, это поможет

...