Powershell betiklerini Windows olmayan iş akışıyla entegre etme yöntemi?


16

Sabahları yeni makinelerin kokusunu seviyorum.

Altyapımım boyunca, bazıları Solaris ana bilgisayarlarında 15 yıllık perl komut dosyaları, PXE Önyükleme Linux sistemleri ve Windows Server 2008 üzerinde Powershell içeren birkaç ayrı sistem içeren bir makine oluşturma iş akışını otomatikleştiriyorum.

Her bir parçayı komut dosyası oluşturabilirim ve Linux ve Unix otomasyonunu entegre etmek oldukça basittir, ancak Powershell komut dosyalarını süreçlerin geri kalanına güvenilir bir şekilde nasıl bağlayacağım konusunda bir kayıptayım.

İşlemin bir Linux ana bilgisayarında başlamasını tercih ederim, çünkü bir Apache sunucusunda yaşayan bir web uygulaması olarak ortaya çıkacağını düşünürüm, ancak Windows'ta başlaması gerekiyorsa, bununla tereddüt ediyorum.

İdeal olarak Linux'un Windows'a karşı koşması için psexec çizgileri boyunca bir şey rica ediyorum , ancak bu yöndeki cevap Cygwin tarafından ortaya çıkıyor ve koydukları tüm zor işleri takdir ettiğim kadar, hiç doğru hissetmemişti , Eğer ne demek istediğimi anlıyorsan. Bir masaüstü için harika ve çok fazla işlevsellik veriyor, ancak Windows sunucularının Windows sunucuları gibi davranılması ve piç haline getirilmiş Unix makineleri (bu arada OSX sunucularına karşı da benim argümanım ve aslında Unix) gibi davranılması gerektiğini hissediyorum. . Her neyse, bu son ve tek seçenek olmadıkça Cygwin ile gitmek istemiyorum.

Bu yüzden, Linux'tan Windows makinelerinde iş yürütmenin bir yolu olup olmadığını sorduğum şey sanırım. Cygwin olmadan. "Bak aptal, herkes Cygwin kullanıyor, bu yüzden em ve onunla başa" dahil fikir ve önerilere açığım. Şimdiden teşekkürler!

Yanıtlar:


5

Ben bu çok sorun üzerinde saatlerce vurma geçirdim ve sonunda iki uygulanabilir seçenek geldi (orada pek uygun olmayan seçenekler var):

  1. Hem etki alanı oluşturulmuş hem de WinRM oturumlarının çalışacağı şekilde ayarlanmış bir WebAPI barındıran bir IIS hizmetiyle bir Windows kutusu oluşturun.
  2. Cygwin

İkinci seçenekle, gerçek pencere bitlerine ulaşmak için GNU / Posix soyutlama katmanında yolunuza devam ediyorsunuz. Bu, onunla ne yapabileceğinizi kısıtlar.

İlk seçenek, neredeyse tüm yerel yığın Windows yüklemenizin üzerine yazdığınız web tabanlı bir soyutlama katmanı oluşturur. Eğer işe koyulmaya istekli iseniz, Linux master-server sadece yapılması gerekenleri yapmak için bir sürü curl çağrı yapmak zorundadır. Bu en iyi komut dosyaları yangın ve unut olduğunda işe yarar, çünkü bir geri arama sistemi oluşturmak çok daha fazla çaba gerektirir.


Ben ilk seçenek korkuyordu :-) Orada sorunları dolu büyük bir köpekbalığı tankı var, sadece ben de yanlış yaparsam beni ısırmak için bekliyor. Kimlik doğrulama, hata ayrıştırma, genel uygulama güvenliği ... vs vb. Ancak girdi için teşekkürler. Buna asılan tek kişi olmadığım için mutluyum.
Matt Simmons

2
@MattSimmons $ Job-1'de benzer bir şey yaptım. IIS IP kısıtlamaları bunu kolaylaştırır; API çağrıları yalnızca bir ana bilgisayardan gelebiliyorsa saldırı yüzeyini biraz azaltır.
sysadmin1138

Kullanmadım, ancak okuduğumdan WinRM kendi başına çalışabilir (IIS veya özel bir API olmadan). Kısıtlayıcı yönlendirme ve kerberos kimlik doğrulaması kullanın ve oldukça güvenli olabileceği gibi (SESLER) geliyor. Düşünceler?
laughingbovine

@laughingbovine Sorun her zaman WinRM desteği olmuştur. Önerdiğim IIS yöntemi, PowerShell'in hemen hemen her şey tarafından desteklenen bir REST API ile önlenmesine izin veriyor. WinRM desteği birkaç yerde zar zor desteklenmektedir. Bunu yazdığımdan beri neredeyse üç yıl içinde, bu destek muhtemelen 2012'de var olmayan durumdan iyileşti.
sysadmin1138

3

Ayrıca, önceki eylemlere ve hatta bunların döndürülen sonuçlarına bağlı olarak birçok ana bilgisayarda yerel komut dosyalarını başlatabilecek platformlar arası zamanlama veya iş akışı otomasyon yazılımı da satın alabilirsiniz. Büyük işletmeler bunu yapan Tivoli, UC4, Espresso (şimdi CA dSeries) gibi yazılımlar kullanıyorlar ve bunu bu tür şeyleri yapmak için gereken büyük işletmelerde kullandım. FYI, bunlar genellikle baktığınız fiyat etiketi hakkında fikir vermek için Oracle işleri gibi şeyler için yerel desteğe sahiptir.

(Geçmişteki işimde yine de Cygwin'i kullandılar , böylece iş yükleri platformlar arasında taşındığında aynı Perl komut dosyalarını değiştirmeden kullanabildiler. Çok eğlenceli.)

@ Sysadmin1138'in önerdiği gibi kendiniz de yapmayı deneyebilirsiniz; Bu eğlenceli bir proje olabilir ve hatta ilk denemede finansal ihracat başarısız olduğunda kullanılabilir hale gelebilecek kadar güçlü olabilir ve 02:00 de disk belleği almak değil.


1
Neyse ki artık finansal verilerden geçmiyorum :-) Bu bir üniversite için otomasyon. Çok daha düşük büzme faktörü.
Matt Simmons

3

Powershell v3.0'da sunulan Powershell Web Erişimi özelliğini kullanırdım. Bu, bir Linux ana bilgisayarından Powershell komut dosyalarını kullanmanızı sağlar.


2

PowerShell sunucusu, SSH'yi bir Windows sunucusuna girmenizi ve bir PowerShell konsolu almanızı sağlar. Ücretsiz denemenin ötesinde kullanmadım, ancak gayri resmi kullanımım bunun oldukça güvenilir bir ürün olduğunu kanıtladı.


Bleh, fiyatları 'uzaktan yönetilmesi gereken her şeye dağıtmak' yerine dağıtım sunucusu kullanımı için tasarlandı. Çalışabilir, sadece Linux'tan farklı bir model.
sysadmin1138

2

Daha sonra ne kadar kaba hissetmek istersiniz, çünkü her zaman telnet var :)

Cidden, PowerShell betiğini çağırmak için neden Linux sunucusuna ihtiyacınız var? İş akışınızı, Linux sunucusunun basit bir şekilde doğru boot.wim görüntüsünü tftp aracılığıyla bir PXE önyüklemeli ana bilgisayara teslim edeceği şekilde yeniden tasarlayabilir misiniz? Geçmişte bir Windows dosya sunucusunda farklı yanıt dosyaları ile bir Windows görüntüsü tutmak ve bir Linux ana bilgisayarından tftpd kullanarak özel bir WinPE önyükleme görüntüsü sunmak iyi şanslar yaşadım. Ardından, yanıt dosyasının doğru PowerShell betiğini çağırmasını sağlayabilirsiniz ve Cygwin gibi platformlar arası yuckiness ile uğraşmanız gerekmez.


Sadece bu kadar kolay olsaydı. 15 yaşındaki perl kısmı hakkında şaka yapmıyordum. 3 aydır buradayım ve tüm bağlantıların henüz "nasıl çalıştığını" bilmiyorum, ama bunların çok ve çeşitli olduğunu biliyorum, yıllardır burada olan insanları tamamen Şirket içinde geliştirilen mevcut araçlardaki belgelenmiş özellikleri göz ardı edin, çünkü kimse bunların ne zaman / ne zaman hata ayıklandığından emin değildir. Kıllı. Hepsini düzeltmek için çok yıllı bir proje olacak.
Matt Simmons

@MattSimmons Sanırım gereksinimleri tam olarak anlamıyorum :-) Neden Linux sunucusunun PowerShell betiğini çağırması gerekiyor? Geçmişte, makine gereksinim bilgilerini bir veritabanında tutarak (* nix sunucusu tarafından güncelleştirilebilir) ve daha sonra hangi yanıt dosyasının uygulanacağını belirlerken WinPE bu veritabanını sorgulayarak bu gereksinim üzerinde çalıştım. Elbette benzer bir şey neredeyse her ortama uyarlanabilir mi? Temelde sadece
MDT'yi

Yeni makine komut dosyası çalıştığında (bazı durumlarda) Windows tarafında olması gereken şeyler vardır. Windows tarafında bir şeyler başlatmak olabilir, ama o zaman geldiğinde ön arayüzü için yeni bir web uygulama sunucusu oluşturmak gerekir ve ben Linux üzerinde PHP ile Windows üzerinde C # (ya da her ne olursa olsun) bunu yapmak çok daha rahat . Ama dediğim gibi, eğer zorundaysam, mecburum.
Matt Simmons

2

Windows ana bilgisayarında powershell betiğini uzaktan yürütmek için nrpe gibi bir şey kullanabilirsiniz. Powershell komut dosyalarınızı nrpe tarafından beklendiği gibi çıkış kodlarını döndürecek şekilde değiştirmek isteyebilirsiniz, ancak linux ana makinenizdeki komut dosyalarınızdan check_nrpe'yi çağıramazsınız.


1
Bu lezzetli bir şekilde sezgisel. Bunu sevdim. Bu büyük bir hack, ama yine de yaratıcı! Teşekkürler.
Matt Simmons

2

Başlığı altında karşı-sezgisel kesmek , bir çapraz platform orkestrasyon aracı olarak Sürekli Entegrasyon yazılımı kötüye kabul var?

CI master'ı en uygun yere kurun, aracıyı Windows kutunuza yükleyin ( bu veya bu ), powershell komut dosyanızı yürütmek için bir iş yapılandırın (Windows Batch Command config'i kullanarak doğrudan çağırın veya isterseniz bir eklenti kullanın komut dosyanızı CI uygulamasının içine yazın / saklayın) ve Windows kıvrımınızdaki işi kıvırmak veya benzeri bir şekilde uzaktan tetiklemek için .


0

Bu sorunun yaygın olduğu büyük bir kuruluşta çalışıyorum. Şu anda desteklediğimiz süreçler için yaklaşımımız Unix sistemlerinin IIS'de ColdFusion çalıştıran bir "admin" Windows sunucusuna Web çağrısı yapmasını sağlamaktır. Belirli powershell komut dosyalarını başlatmak için "cfexecute" yönergesini kullanan GET isteklerinden tetiklenen sınıflarımız ve işlevlerimiz var. Çirkin ama işe yarıyor. ColdFusion'un aracı olarak hareket etmesinden uzaklaşmak için powershell v3 Web hizmeti özelliklerine bakıyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.