Спосіб інтеграції сценаріїв Powershell з робочим процесом, який не є Windows?


16

Я люблю запах нових машин вранці.

Я автоматизую робочий процес створення машини, який включає декілька окремих систем у всій моїй інфраструктурі, деякі з яких включають 15-річні сценарії Perl на хостах Solaris, PXE Boot Linux і Powershell на Windows Server 2008.

Я можу скласти сценарій кожної окремої частини, і інтеграція автоматизації Linux та Unix є досить простою, але я втрачаю, як надійно зв’язати сценарії Powershell з іншими процесами.

Я вважаю за краще, якщо процес розпочався на хості Linux, оскільки я думаю, що він закінчиться веб-додатком, що живе на сервері Apache, але якщо це потрібно запустити в Windows, я з цим вагаюся.

Я б в ідеалі хотів, щоб щось за принципом psexec для Linux працювало проти Windows, але відповідь у цьому напрямку видається Cygwin , і наскільки я ціную всю важку роботу, яку вони вклали, вона ніколи не відчувала себе правильно , якщо ти знаєш про що я. Це відмінно підходить для робочого столу і дає багато функціональних можливостей, але я відчуваю, що до серверів Windows слід ставитися як до серверів Windows, а не до уродливих машин Unix (що, до речі, теж мій аргумент проти серверів OSX, і вони насправді Unix) . У будь-якому разі, я не хочу їхати з Cygwin, якщо тільки це останній і єдиний варіант.

Тому я думаю, що я запитую, чи є спосіб виконувати завдання на машинах Windows з Linux. Без Цигвіна. Я відкритий до ідей та пропозицій, включаючи "Подивись ідіот, усі користуються Cygwin, тому висмоктуй це і з цим розправляйся". Спасибі заздалегідь!

Відповіді:


5

Я витратив кілька годин на цю проблему, і вона врешті-решт зійшла до двох життєздатних варіантів (є багато нежиттєздатних варіантів):

  1. Створіть вікно Windows із сервісом IIS, на якому розміщено WebAPI, який є доменним і налаштований таким чином, щоб сесії WinRM з нього працювали.
  2. Сігвін

З другим варіантом ви зациклювались на боротьбі з допомогою шару абстракції GNU / Posix, щоб отримати фактичні біти Windows. Що обмежує те, що ви можете зробити з цим.

Перший варіант в значній мірі будує шар веб-абстракції, який ви записуєте на початку повноцінної установки Windows. Якщо ви готові взяти участь у роботі, майстер-сервер Linux повинен виконати лише кучу викликів, щоб зробити те, що потрібно робити. Це найкраще спрацьовує, коли сценарії запускаються та забуваються, оскільки створення системи зворотного виклику - це набагато більше зусиль.


Я боявся цього першого варіанту :-) Там є великий танк для акул, повний проблем, який просто чекає мене вкусити, якщо я теж поступлю його неправильно. Аутентифікація, аналіз помилок, загальна безпека програми ... і т. Д. І т.д. і т. Д. І т.д. Я радий, що я не єдина людина, яка зациклювалася на цьому.
Метт Сіммонс

2
@MattSimmons Я зробив щось подібне на $ Job-1. Обмеження IP-адреси IIS значно полегшують це; якщо виклики API можуть надходити лише від одного хоста, це значно зменшує поверхню атаки.
sysadmin1138

Я не використовував його, але з того, що я читав, WinRM може працювати самостійно (без IIS або спеціального API). Використовуйте обмежувальну маршрутизацію та автентифікацію kerberos, і це звучить (SOUNDS) так, що це може бути досить безпечно. Думки?
laughingbovine

@laughingbovine Проблемою завжди була підтримка WinRM. Пропонований нами метод IIS дозволяє передати PowerShell за допомогою REST API, який підтримується практично всім. Підтримка WinRM ледь підтримується в декількох місцях. За майже три роки, відколи я це писав, ця підтримка, ймовірно, покращилась від неіснуючого стану, як це було у 2012 році.
sysadmin1138

3

Ви також можете придбати програмне забезпечення для багатопланового планування або автоматизацію робочого процесу, яке може розпочати створення власних сценаріїв на багатьох хостах залежно від попередніх дій або навіть повернутих результатів. Великі підприємства використовують таке програмне забезпечення, як Tivoli, UC4, Espresso (CA dSeries, зараз), і це я використовував на великих підприємствах, які потребували подібних дій. FYI, вони часто мають вбудовану підтримку таких речей, як робота Oracle, щоб дати вам уявлення про цінник, який ви можете подивитися.

(У моїй минулій роботі вони також використовували Cygwin так чи інакше , щоб вони могли використовувати ті самі сценарії Perl без змін, коли робочі навантаження переміщувалися між платформами. Багато розваг.)

Ви також можете спробувати створити власну, як пропонує @ sysadmin1138; це було б цікавим проектом, і, можливо, навіть виявиться достатньо надійним, щоб бути зручним для використання та не матимуть вас пройти стадію о 2 ранку, коли фінансовий експорт провалиться з першої спроби.


1
На щастя, я вже не передаю фінансових даних :-) Це автоматизація для коледжу. Набагато нижчий коефіцієнт шайби.
Метт Сіммонс

3

Я використовував би функцію Powershell Web Access, представлену в Powershell v3.0. Це дозволяє використовувати сценарії Powershell від хоста Linux.


2

Сервер PowerShell дозволяє вам ввести SSH на сервер Windows і отримати консоль PowerShell. Я не використовував його за межі безкоштовної пробної версії, але моє неофіційне використання довело мені, що це досить надійний продукт.


Bleh, їх ціна така, що вона розрахована на використання сервера розгортання, а не на "розгортання всього, що потребує віддаленого управління". Працездатна, просто інша модель, ніж Linux.
sysadmin1138

2

Як сильно ви хочете відчувати себе після цього, тому що завжди є telnet :)

Якщо серйозно, то навіщо вам потрібен сервер Linux для виклику сценарію PowerShell? Чи можете ви переробити робочий процес так, щоб сервер Linux просто надавав правильний образ boot.wim через tftp на хост, завантажений PXE? У минулому мені пощастило зберігати зображення Windows з різними файлами відповідей на файловому сервері Windows і доставляти користувальницьке завантажувальне зображення WinPE за допомогою tftpd від хоста Linux. Тоді ви можете викликати правильний скрипт PowerShell у файлі відповідей, і вам не доведеться мати справу з кроссплатформенною скутістю, як Cygwin.


О, якби це було так просто. Я не жартував про 15-річну частину перла. Я тут вже 3 місяці, і я не знаю, як усі взаємозв’язки "працюють" ще, але я знаю, що їх багато і різноманітних, з тонкощами, які спонукають людей, які тут роками, повністю ігнорувати задокументовані функції в існуючих інструментах, розроблених власноруч, оскільки ніхто не впевнений, чи / коли / як вони налагоджені. Волохата. Це буде багаторічний проект, щоб все виправити.
Метт Сіммонс

@MattSimmons Я вважаю, що тоді я не повністю розумію вимоги :-) Чому для сервера Linux потрібно викликати сценарій PowerShell? Раніше я працював над цією вимогою, зберігаючи інформацію про машинне забезпечення в базі даних (яку можна оновлювати сервер * nix), а потім WinPE запитує цю базу даних, визначаючи, який файл відповідей застосувати. Звичайно, щось подібне може бути адаптоване майже до будь-якого середовища, правда? Це в основному просто відновити MDT з нуля самим хе
MDMarra

Є речі, які (в деяких випадках) повинні відбуватися на стороні Windows, коли запускається сценарій нової машини. Я можу почати все з боку Windows, але мені потрібно буде створити новий сервер веб-додатків для переднього інтерфейсу, коли настане цей час, і мені набагато зручніше це робити з PHP в Linux, ніж C # (або що завгодно) у Windows . Але, як я сказав, якщо треба, я повинен.
Метт Сіммонс

2

Ви можете використовувати щось на зразок nrpe для віддаленого виконання скрипта повноважень на хості Windows. Можливо, ви захочете змінити свої сценарії повноважень, щоб повернути вихідні коди, як очікував nrpe, але немає причин, щоб ви не могли викликати check_nrpe зі своїх скриптів на своєму Linux-хості.


1
Це дуже смачно протиінтуїтивно. Мені це подобається. Це головний хак, але все-таки креативний! Спасибі.
Метт Сіммонс

2

Що стосується контр-інтуїтивних хакерів , чи розглядали ви зловживання програмним забезпеченням безперервної інтеграції як інструмент оркестрації між платформами?

Встановіть майстер CI там, де це найзручніше, встановіть агент на свій вікно Windows (або це, або це ), налаштуйте завдання на виконання сценарію повноважень (або безпосередньо викликаючи його за допомогою конфігурації командного пакета Windows, або використовуючи плагін, якщо хочете писати / зберігати сценарій у програмі CI) на вашому агенті Windows і запускати роботу віддалено за допомогою curl або подібного.


0

Я працюю на великому підприємстві, де це питання є загальним. Для процесів, які ми підтримуємо в даний час, наш підхід полягає в тому, щоб системи Unix здійснювали веб-дзвінки на "адміністратор" сервера Windows, на якому працює ColdFusion на IIS. У нас є класи та функції, які запускаються з GET-запитів, які використовують директиву "cfexecute" для запуску конкретних сценаріїв оболонок. Це некрасиво, але це працює. Ми дивимося на функції веб-служби powershell v3, щоб перейти далеко від того, що ColdFusion виступає посередником.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.