Metoda integracji skryptów Powershell z przepływem pracy innym niż Windows?


16

Uwielbiam zapach nowych maszyn rano.

Automatyzuję proces tworzenia maszyn, który obejmuje kilka osobnych systemów w całej mojej infrastrukturze, z których niektóre obejmują 15-letnie skrypty perla na hostach Solaris, systemach Linux PXE Booting i Powershell w systemie Windows Server 2008.

Mogę napisać skrypt do każdej z poszczególnych części, a integracja automatyzacji Linuksa i Uniksa jest dość prosta, ale nie mam pewności, jak w sposób niezawodny powiązać skrypty PowerShell z resztą procesów.

Wolałbym, aby proces rozpoczął się na hoście Linux, ponieważ wyobrażam sobie, że skończy się jako aplikacja internetowa żyjąca na serwerze Apache, ale jeśli trzeba rozpocząć w systemie Windows, z wahaniem się z tym zgadzam.

Idealnie chciałbym, aby coś w stylu psexec działało pod Linuksem przeciwko Windowsowi, ale odpowiedź w tym kierunku wydaje się Cygwin i chociaż doceniam całą ciężką pracę, jaką włożyli, nigdy nie wydawało się to właściwe , Jeśli wiesz co mam na myśli. Jest świetny na komputery stacjonarne i daje wiele funkcji, ale uważam, że serwery Windows powinny być traktowane jak serwery Windows, a nie zepsute maszyny uniksowe (nawiasem mówiąc, to też mój argument przeciwko serwerom OSX, a tak naprawdę są one Uniksami) . W każdym razie nie chcę iść z Cygwinem, chyba że jest to ostatnia i jedyna opcja.

Myślę więc, że pytam, czy istnieje sposób wykonywania zadań na komputerach z systemem Windows z poziomu systemu Linux. Bez Cygwina. Jestem otwarty na pomysły i sugestie, w tym „Spójrz idioto, wszyscy używają Cygwina, więc zrób to i zajmij się tym”. Z góry dziękuję!

Odpowiedzi:


5

Spędziłem godziny zastanawiając się nad tym bardzo problemem, który ostatecznie sprowadził się do dwóch wykonalnych opcji (istnieje wiele nieopłacalnych opcji):

  1. Zbuduj skrzynkę Windows z usługą IIS obsługującą interfejs WebAPI, który jest zarówno zdominowany, jak i skonfigurowany w taki sposób, aby działały z niego sesje WinRM.
  2. Cygwin

Z drugą opcją utkniesz, walcząc przez warstwę abstrakcji GNU / Posix, aby dostać się do rzeczywistych bitów systemu Windows. Co ogranicza to, co możesz z tym zrobić.

Pierwsza opcja w zasadzie buduje opartą na sieci warstwę abstrakcji, którą piszesz na podstawie pełnej instalacji systemu Windows na natywnym stosie. Jeśli chcesz zaangażować się w pracę, główny serwer Linux musi wykonać tylko kilka zawinięć, aby zrobić to, co trzeba. Działa to najlepiej, gdy skrypty uruchamiają się i zapominają, ponieważ zbudowanie systemu oddzwaniania wymaga znacznie więcej wysiłku.


Bałem się tej pierwszej opcji :-) Jest tam duży zbiornik rekinów pełen problemów, tylko czekam, by mnie ugryźć, jeśli zrobię to źle. Uwierzytelnianie, analiza błędów, ogólne bezpieczeństwo aplikacji ... itd. Itd. Ale dziękuję za dane wejściowe. Cieszę się, że nie jestem jedyną osobą, która się na tym rozłączyła.
Matt Simmons,

2
@MattSimmons Zrobiłem coś podobnego w $ Job-1. Ograniczenia IIS IP ułatwiają to dużo; jeśli wywołania API mogą pochodzić tylko z jednego hosta, znacznie zmniejsza powierzchnię ataku.
sysadmin1138

Nie korzystałem z niego, ale z tego, co przeczytałem, WinRM może działać samodzielnie (bez IIS lub niestandardowego interfejsu API). Użyj restrykcyjnego routingu i uwierzytelniania Kerberos, a to brzmi (DŹWIĘK), jakby mogło być całkiem bezpieczne. Myśli?
laughingbovine

@ laughingbovine Problemem zawsze była obsługa WinRM. Proponowana przeze mnie metoda IIS umożliwia fronting PowerShell z API REST, który jest obsługiwany przez prawie wszystko. Obsługa WinRM jest ledwo obsługiwana w kilku miejscach. W ciągu prawie trzech lat, od kiedy to napisałem, wsparcie prawdopodobnie poprawiło się z nieistniejącego stanu, jakim był w 2012 roku.
sysadmin1138

3

Możesz także kupić oprogramowanie do planowania lub automatyzacji przepływu pracy na różnych platformach, które może uruchamiać natywne skrypty na wielu hostach w zależności od wcześniejszych działań, a nawet ich zwróconych wyników. Duże przedsiębiorstwa używają oprogramowania takiego jak Tivoli, UC4, Espresso (teraz CA dSeries), a ja korzystałem z niego w dużych przedsiębiorstwach, które musiały to robić. Do Twojej wiadomości, często mają natywne wsparcie dla zadań takich jak Oracle, aby dać ci wyobrażenie o cenach, na które możesz patrzeć.

(W moim ostatniego zadania, ale także używane Cygwin w każdym razie , tak aby mogły one korzystać z tych samych skryptów Perl bez modyfikacji podczas obciążenia przenoszone pomiędzy platformami. Dużo zabawy).

Możesz także spróbować zbudować własny, jak sugeruje @ sysadmin1138; byłby to zabawny projekt, a może nawet okazać się wystarczająco solidny, aby był użyteczny i nie sprawił, że pojawi się strona o drugiej w nocy, gdy eksport finansowy nie powiedzie się przy pierwszej próbie.


1
Na szczęście nie przekazuję już danych finansowych :-) To automatyzacja uczelni. Znacznie niższy współczynnik marszczenia.
Matt Simmons,

3

Chciałbym użyć funkcji Powershell Web Access wprowadzonej w Powershell v3.0. Pozwala to na używanie skryptów Powershell z hosta Linux.


2

Serwer PowerShell umożliwia SSH do serwera Windows i uzyskanie konsoli PowerShell. Nie korzystałem z niego poza bezpłatną wersją próbną, ale moje nieformalne użycie udowodniło mi, że był to dość niezawodny produkt.


Bleh, ich ceny są takie, że są przeznaczone do użycia na serwerze wdrażania, a nie „wdrażają wszystko, co wymaga zdalnego zarządzania”. Wykonalne, tylko inny model niż Linux.
sysadmin1138

2

Jak obrzydliwie chcesz się potem poczuć, bo zawsze jest telnet :)

Poważnie, ale dlaczego serwer Linux ma wywoływać skrypt PowerShell? Czy możesz przeprojektować swój przepływ pracy, aby serwer Linux po prostu dostarczył prawidłowy obraz boot.wim za pośrednictwem tftp do hosta uruchomionego w PXE? W przeszłości miałem szczęście utrzymywania obrazu Windows z różnymi plikami odpowiedzi na serwerze plików Windows i dostarczania niestandardowego obrazu rozruchowego WinPE przy użyciu tftpd z hosta Linux. Następnie możesz mieć plik odpowiedzi wywołujący poprawny skrypt PowerShell i nie musisz radzić sobie z wieloplatformowymi szczękami, takimi jak Cygwin.


Och, gdyby to było takie proste. Nie żartowałem z powodu 15-letniej części Perla. Jestem tu od 3 miesięcy i nie jestem jeszcze świadomy tego, jak wszystkie „połączenia” jeszcze „działają”, ale wiem, że jest ich wiele i jest zróżnicowanych, z subtelnością, która prowadzi ludzi, którzy są tutaj od lat, do całkowitego lekceważ udokumentowane funkcje w istniejących narzędziach opracowanych wewnętrznie, ponieważ nikt nie jest pewien, czy / kiedy / jak są debugowane. Jest włochaty. To będzie wieloletni projekt, aby to naprawić.
Matt Simmons,

@MattSimmons Wydaje mi się, że nie do końca rozumiem wymagania :-) Dlaczego serwer Linux musi wywoływać skrypt PowerShell? W przeszłości omawiałem ten wymóg, przechowując informacje o wyposażeniu maszyny w bazie danych (które mogą być aktualizowane przez serwer * nix), a następnie WinPE pyta tę bazę danych podczas określania, który plik odpowiedzi ma zostać zastosowany. Z pewnością coś podobnego można dostosować do prawie każdego środowiska, prawda? Zasadniczo jest to po prostu samodzielna odbudowa MDT heh
MDMarra

Są rzeczy, które (w niektórych przypadkach) muszą się wydarzyć po stronie systemu Windows przy każdym uruchomieniu skryptu nowej maszyny. Mógłbym zacząć od strony systemu Windows, ale w tym czasie musiałbym zbudować nowy serwer aplikacji WWW dla interfejsu frontowego i czuję się o wiele bardziej komfortowo z PHP na Linuxie niż C # (lub czymkolwiek) na Windowsie . Ale jak powiedziałem, jeśli muszę, muszę.
Matt Simmons

2

Możesz użyć czegoś takiego jak nrpe do zdalnego wykonania skryptu PowerShell na hoście Windows. Możesz zmodyfikować skrypty PowerShell, aby zwracały kody wyjścia zgodnie z oczekiwaniami nrpe, ale nie ma powodu, dla którego nie możesz wywoływać check_nrpe ze swoich skryptów na hoście Linux.


1
To jest cudownie sprzeczne z intuicją. Lubię to. To duży hack, ale nadal kreatywny! Dzięki.
Matt Simmons

2

Czy na temat hacków sprzecznych z intuicją rozważałeś nadużywanie oprogramowania Continuous Integration jako wieloplatformowego narzędzia orkiestracyjnego?

Zainstaluj wzorzec CI tam, gdzie jest to najwygodniejsze, zainstaluj agenta na swoim komputerze z systemem Windows ( to lub to ), skonfiguruj zadanie do wykonania skryptu PowerShell (bezpośrednio wywołując go za pomocą konfiguracji polecenia wsadowego Windows lub używając wtyczki, jeśli chcesz do pisania / przechowywania skryptu w aplikacji CI) na agencie Windows i uruchamiania zadania zdalnie przez zawijanie lub podobne.


0

Pracuję w dużym przedsiębiorstwie, w którym ten problem jest częsty. W przypadku procesów, które obecnie wspieramy, naszym podejściem jest, aby systemy uniksowe wykonywały połączenia internetowe z „administracyjnym” serwerem Windows, na którym działa ColdFusion na IIS. Mamy klasy i funkcje uruchamiane z żądań GET, które używają dyrektywy „cfexecute” do uruchamiania określonych skryptów PowerShell. To brzydkie, ale działa. Przyglądamy się funkcjom usługi PowerShell v3 Web Service, aby zrezygnować z działania ColdFusion jako pośrednika.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.