Metode untuk mengintegrasikan skrip Powershell dengan alur kerja non-Windows?

16

Saya suka bau mesin baru di pagi hari.

Saya mengotomatiskan alur kerja pembuatan mesin yang melibatkan beberapa sistem terpisah di seluruh infrastruktur saya, beberapa di antaranya melibatkan skrip perl yang berumur 15 tahun pada host Solaris, sistem Pooting BX Linux, dan Powershell pada Windows Server 2008.

Saya dapat membuat skrip setiap bagian individual, dan mengintegrasikan otomatisasi Linux dan Unix cukup mudah, tetapi saya bingung bagaimana cara menyatukan skrip Powershell dengan andal ke seluruh proses.

Saya lebih suka jika proses dimulai pada host Linux, karena saya membayangkan bahwa itu akan berakhir sebagai aplikasi web yang hidup di server Apache, tetapi jika perlu dimulai pada Windows, saya ragu-ragu dengan itu.

Saya idealnya menginginkan sesuatu di sepanjang baris psexec untuk Linux dijalankan melawan Windows, tetapi jawaban ke arah itu muncul oleh Cygwin , dan sebanyak saya menghargai semua kerja keras yang mereka lakukan, tidak pernah terasa benar , jika kamu tahu maksud saya. Ini bagus untuk desktop dan memberikan banyak fungsi, tetapi saya merasa seperti server Windows harus diperlakukan seperti server Windows dan bukan mesin bastard Unix (yang, kebetulan, adalah argumen saya terhadap server OSX juga, dan mereka sebenarnya Unix) . Lagi pula, saya tidak ingin pergi dengan Cygwin kecuali itu adalah pilihan terakhir dan satu-satunya.

Jadi saya kira apa yang saya tanyakan adalah apakah ada cara untuk melakukan pekerjaan pada mesin Windows dari Linux. Tanpa Cygwin. Saya terbuka untuk ide dan saran, termasuk "Lihat bodoh, semua orang menggunakan Cygwin, jadi hisaplah dan hadapi itu". Terima kasih sebelumnya!

Matt Simmons
sumber

Jawaban:

5

Saya telah menghabiskan waktu berjam-jam membahas masalah ini dan pada akhirnya turun ke dua opsi yang layak (ada banyak opsi yang tidak dapat dijalankan di luar sana):

  1. Bangun kotak Windows dengan layanan IIS yang meng-hosting WebAPI yang memiliki domain dan pengaturan sedemikian rupa sehingga sesi WinRM dari itu akan berfungsi.
  2. Cygwin

Dengan opsi kedua Anda terjebak berjuang melalui lapisan abstraksi GNU / Posix untuk mendapatkan bit windows yang sebenarnya. Yang membatasi apa yang dapat Anda lakukan dengan itu.

Opsi pertama cukup banyak membangun lapisan abstraksi berbasis web yang Anda tulis sendiri di atas instal penuh-tumpukan Windows Anda. Jika Anda bersedia untuk bekerja, master-server Linux hanya perlu melakukan banyak panggilan untuk melakukan apa yang perlu dilakukan. Ini bekerja paling baik ketika skrip adalah api-dan-lupa, karena membangun sistem panggilan balik jauh lebih banyak upaya.

sysadmin1138
sumber
Saya takut akan pilihan pertama itu :-) Ada tangki hiu besar penuh dengan masalah di sana, hanya menunggu untuk menggigit saya jika saya juga salah. Otentikasi, kesalahan penguraian, keamanan aplikasi umum ... dll dll. Tapi terima kasih atas masukannya. Aku senang aku bukan satu-satunya orang yang terpaku pada ini.
Matt Simmons
2
@MattSimmons Saya melakukan sesuatu yang serupa di $ Job-1. Pembatasan IP IIS membuat ini lebih mudah; jika panggilan API hanya bisa datang dari satu host, itu mengurangi permukaan serangan sedikit.
sysadmin1138
Saya belum menggunakannya, tetapi dari apa yang saya baca, WinRM dapat berjalan sendiri (tanpa IIS atau API khusus). Gunakan routing yang ketat dan otentikasi kerberos dan itu terdengar (SUARA) seperti itu bisa sangat aman. Pikiran?
laughingbovine
@laughingbovine Masalahnya selalu dukungan WinRM. Metode IIS yang saya usulkan memungkinkan Fronting PowerShell dengan API REST yang didukung oleh hampir semua. Dukungan WinRM nyaris tidak didukung di beberapa tempat. Dalam hampir tiga tahun sejak saya menulis ini, dukungan itu mungkin telah meningkat dari keadaan yang tidak ada pada tahun 2012.
sysadmin1138
3

Anda juga dapat membeli penjadwalan lintas platform atau perangkat lunak otomatisasi alur kerja yang dapat memulai skrip asli pada banyak host tergantung pada tindakan sebelumnya, atau bahkan hasil yang dikembalikan. Perusahaan besar menggunakan perangkat lunak seperti Tivoli, UC4, Espresso (CA dSeries, sekarang) yang melakukan ini, dan saya telah menggunakannya di perusahaan besar yang perlu melakukan hal semacam ini. FYI, ini sering memiliki dukungan asli untuk hal-hal seperti pekerjaan Oracle, untuk memberi Anda gambaran tentang penetapan harga yang mungkin Anda lihat.

(Dalam pekerjaan masa lalu saya, mereka juga digunakan Cygwin pula , sehingga mereka bisa menggunakan skrip Perl yang sama tanpa modifikasi ketika beban kerja pindah antara platform. Banyak menyenangkan.)

Anda juga dapat mencoba membuat sendiri, seperti yang disarankan oleh @ sysadmin1138; itu akan menjadi proyek yang menyenangkan, dan bahkan mungkin berakhir cukup kuat untuk dapat digunakan dan tidak membuat Anda dihubungi pada jam 2 pagi ketika ekspor keuangan gagal pada percobaan pertama.

mfinni
sumber
1
Untungnya saya tidak membagikan data keuangan lagi :-) Ini adalah otomatisasi untuk sebuah perguruan tinggi. Faktor kerutan yang jauh lebih rendah.
Matt Simmons
3

Saya akan menggunakan fitur Powershell Web Access yang diperkenalkan di Powershell v3.0. Ini memungkinkan Anda untuk menggunakan skrip Powershell dari host Linux.

Roy Kaldung
sumber
2

Server PowerShell memungkinkan Anda SSH masuk ke server Windows dan mendapatkan konsol PowerShell. Saya belum menggunakannya di luar uji coba gratis, tetapi penggunaan informal membuktikan bahwa itu adalah produk yang cukup dapat diandalkan.

leher panjang
sumber
Bleh, harga mereka sedemikian rupa sehingga dirancang untuk penggunaan server-penyebaran daripada 'menyebarkan segala sesuatu yang perlu dikelola dari jarak jauh'. Bisa diterapkan, hanya model yang berbeda dari Linux.
sysadmin1138
2

Betapa kotor yang ingin Anda rasakan sesudahnya, karena selalu ada telnet :)

Serius, mengapa Anda perlu server Linux untuk memanggil skrip PowerShell? Bisakah Anda mendesain ulang alur kerja Anda sehingga server Linux hanya memberikan gambar boot.wim yang benar melalui tftp ke host yang di-boot PXE? Saya sudah beruntung di masa lalu menjaga citra Windows dengan file jawaban yang berbeda pada server file Windows dan memberikan gambar boot WinPE kustom menggunakan tftpd dari host Linux. Kemudian, Anda dapat meminta file jawaban memanggil skrip PowerShell yang benar dan Anda tidak harus berurusan dengan lintas platform yuckiness seperti Cygwin.

MDMarra
sumber
Oh, seandainya itu semudah itu. Saya tidak bercanda tentang bagian perl 15 tahun. Saya sudah di sini selama 3 bulan, dan saya tidak tahu bagaimana semua interkoneksi "bekerja", tetapi saya tahu bahwa mereka banyak dan beragam, dengan kehalusan yang membuat orang yang telah berada di sini selama bertahun-tahun untuk sepenuhnya mengabaikan fitur yang terdokumentasi dalam alat yang ada dikembangkan in-house karena tidak ada yang yakin jika / kapan / seberapa debug mereka. Berbulu. Ini akan menjadi proyek multi-tahun untuk memperbaiki semuanya.
Matt Simmons
@MattSimmons Saya kira saya tidak sepenuhnya memahami persyaratan kemudian :-) Mengapa server Linux perlu memanggil skrip PowerShell? Di masa lalu saya telah mengerjakan persyaratan ini dengan menyimpan informasi penyediaan mesin di dalam basis data (yang dapat diperbarui oleh server * nix) dan kemudian WinPE menanyakan basis data tersebut ketika menentukan file jawaban mana yang akan diterapkan. Tentunya sesuatu yang serupa dapat disesuaikan dengan hampir semua lingkungan, bukan? Ini pada dasarnya hanya membangun kembali MDT dari awal sendiri heh
MDMarra
Ada hal-hal yang (dalam beberapa kasus) perlu terjadi di sisi Windows setiap kali skrip mesin baru berjalan. Saya BISA mulai hal-hal dari sisi Windows, tetapi saya perlu membangun server aplikasi web baru untuk antarmuka depan ketika waktu itu tiba, dan saya jauh lebih nyaman melakukan itu dengan PHP di Linux daripada C # (atau apa pun) pada Windows . Tapi seperti yang saya katakan, jika saya harus, saya harus.
Matt Simmons
2

Anda bisa menggunakan sesuatu seperti nrpe untuk mengeksekusi skrip PowerShell pada host windows. Anda mungkin ingin memodifikasi skrip powershell Anda untuk mengembalikan kode keluar seperti yang diharapkan oleh nrpe, tetapi tidak ada alasan Anda tidak dapat memanggil check_nrpe dari skrip Anda di host linux Anda.

rorr
sumber
1
Itu sangat kontra-intuitif. Saya suka itu. Ini peretasan besar, tapi tetap, kreatif! Terima kasih.
Matt Simmons
2

Pada topik peretasan kontra-intuitif , sudahkah Anda mempertimbangkan penyalahgunaan perangkat lunak Continuous Integration sebagai alat orkestrasi lintas platform?

Instal CI master di mana saja yang paling nyaman, instal agen pada kotak Windows Anda (baik ini atau ini ), konfigurasikan pekerjaan untuk mengeksekusi skrip powershell Anda (baik secara langsung memanggilnya menggunakan konfigurasi Perintah Batch Windows, atau menggunakan plugin jika Anda ingin untuk menulis / menyimpan skrip Anda di dalam aplikasi CI) pada agen Windows Anda dan memicu pekerjaan dari jarak jauh melalui ikal atau serupa.

Greg Work
sumber
0

Saya bekerja di perusahaan besar di mana masalah ini biasa terjadi. Untuk proses yang saat ini kami dukung, pendekatan kami adalah membuat sistem Unix melakukan panggilan Web ke server Windows "admin" yang menjalankan ColdFusion di IIS. Kami memiliki kelas dan fungsi yang dipicu dari permintaan GET yang menggunakan arahan "cfexute" untuk meluncurkan skrip PowerShell khusus. Itu jelek tapi berhasil. Kami sedang melihat fitur layanan Web PowerShell v3 untuk dimigrasi dari ColdFusion yang bertindak sebagai perantara.

Ryan Fisher
sumber