Обожаю запах новых машин по утрам.
Я автоматизирую рабочий процесс создания машины, который включает в себя несколько отдельных систем в моей инфраструктуре, некоторые из которых включают скрипты Perl 15-летней давности на хостах Solaris, системы Linux с загрузкой PXE и Powershell на Windows Server 2008.
Я могу создать сценарий для каждой из отдельных частей, и интегрировать автоматизацию Linux и Unix довольно просто, но я не понимаю, как надежно связать сценарии Powershell с остальными процессами.
Я бы предпочел, чтобы процесс начинался на хосте Linux, поскольку я предполагаю, что он закончится как веб-приложение, живущее на сервере Apache, но если ему нужно начать в Windows, я нерешительно соглашусь с этим.
В идеале я бы хотел что-то вроде psexec для Linux, чтобы работать с Windows, но ответ в этом направлении кажется Cygwin, и как бы я ни ценил их усердную работу, она никогда не чувствовал себя хорошо, если вы понимаете, о чем я. Он отлично подходит для настольного компьютера и предоставляет множество функций, но я чувствую, что с серверами Windows следует обращаться как с серверами Windows, а не с убогими Unix-машинами (что, кстати, является моим аргументом против серверов OSX, и они фактически Unix). В любом случае, я не хочу использовать Cygwin, если это не последний и единственный вариант.
Итак, я предполагаю, что я спрашиваю, есть ли способ выполнять задания на машинах Windows из Linux. Без Cygwin. Я открыт для идей и предложений, в том числе «Смотри, идиот, все используют Cygwin, так что не торопись и разберись с этим». Заранее спасибо!
Я часами ломал голову над этой самой проблемой, и в конце концов она свелась к двум жизнеспособный варианты (есть много нежизнеспособных вариантов):
Со вторым вариантом вы застряли на своем пути через слой абстракции GNU / Posix, чтобы добраться до фактических битов Windows. Что ограничивает то, что вы можете с ним делать.
Первый вариант в значительной степени создает веб-слой абстракции, который вы пишете сами, поверх установленной Windows с полным собственным стеком. Если вы готовы поработать, главному серверу Linux нужно всего лишь выполнить несколько вызовов curl, чтобы сделать то, что нужно. Это лучше всего работает, когда сценарии запущены и забыты, поскольку создание системы обратного вызова требует гораздо больше усилий.
Я бы использовал функцию Powershell Web Access, представленную в Powershell v3.0. Это позволяет использовать сценарии Powershell с хоста Linux.
Вы также можете купить кроссплатформенное программное обеспечение для планирования или автоматизации рабочих процессов, которое может запускать собственные сценарии на многих хостах в зависимости от предыдущих действий или даже их результатов. Крупные предприятия используют программное обеспечение, такое как Tivoli, UC4, Espresso (сейчас CA dSeries), которое делает это, и я использовал его на крупных предприятиях, которым требовалось делать такие вещи. К вашему сведению, они часто имеют встроенную поддержку для таких вещей, как рабочие места Oracle, чтобы дать вам представление о ценовом теге, на который вы, возможно, смотрите.
(На моей прошлой работе они также использовали Cygwin тем не мение, чтобы они могли использовать одни и те же сценарии Perl без изменений при перемещении рабочих нагрузок между платформами. Много веселья.)
Вы также можете попробовать создать свой собственный, как предлагает @ sysadmin1138; это был бы забавный проект, и он мог бы даже оказаться достаточно надежным, чтобы его можно было использовать, и не вывести вас на страницы в 2 часа ночи, когда финансовый экспорт не удастся с первой попытки.
Сервер PowerShell позволяет подключиться к серверу Windows по SSH и получить консоль PowerShell. Я не использовал его после бесплатной пробной версии, но мое неформальное использование доказало мне, что это довольно надежный продукт.
Каким гадким вы хотите себя чувствовать после этого, ведь всегда есть телнет :)
А если серьезно, зачем вам сервер Linux для вызова сценария PowerShell? Можете ли вы изменить свой рабочий процесс так, чтобы сервер Linux просто доставлял правильный образ boot.wim через tftp на хост, загружаемый с помощью PXE? В прошлом мне повезло с хранением образа Windows с разными файлами ответов на файловом сервере Windows и доставкой пользовательского загрузочного образа WinPE с помощью tftpd с хоста Linux. Затем у вас может быть файл ответов, вызывающий правильный сценарий PowerShell, и вам не придется иметь дело с кросс-платформенной мерзостью, такой как Cygwin.
Вы можете использовать что-то вроде nrpe для удаленного выполнения сценария powershell на хосте Windows. Возможно, вы захотите изменить свои сценарии PowerShell, чтобы они возвращали коды выхода, как ожидается от nrpe, но нет причин, по которым вы не можете вызвать check_nrpe из своих сценариев на вашем хосте Linux.
По теме нелогичные хакиРассматривали ли вы злоупотребление программным обеспечением непрерывной интеграции в качестве инструмента межплатформенной оркестровки?
Установите мастер CI там, где вам удобнее, установите агент на свой компьютер с Windows (либо этот или этот), настройте задание для выполнения вашего сценария PowerShell (либо напрямую вызывая его с помощью конфигурации Windows Batch Command, либо используя плагин если вы хотите написать / сохранить свой скрипт внутри приложения CI) на вашем агенте Windows и запускать задание удаленно через curl или аналогичный.
Я работаю на большом предприятии, где эта проблема встречается часто. Для процессов, которые мы в настоящее время поддерживаем, наш подход заключается в том, чтобы системы Unix выполняли веб-вызовы «административного» сервера Windows, на котором работает ColdFusion на IIS. У нас есть классы и функции, которые запускаются из запросов GET, которые используют директиву cfexecute для запуска определенных сценариев PowerShell. Это некрасиво, но работает. Мы рассматриваем возможности веб-службы PowerShell v3, которые позволят отказаться от использования ColdFusion в качестве посредника.