Metodo per integrare gli script Powershell con flusso di lavoro non Windows?


16

Adoro l'odore delle nuove macchine al mattino.

Sto automatizzando un flusso di lavoro per la creazione di macchine che coinvolge diversi sistemi separati nella mia infrastruttura, alcuni dei quali coinvolgono script perl di 15 anni su host Solaris, sistemi PXE Booting Linux e Powershell su Windows Server 2008.

Sono in grado di scrivere ciascuna delle singole parti e l'integrazione dell'automazione Linux e Unix è abbastanza semplice, ma non so come legare in modo affidabile gli script Powershell al resto dei processi.

Preferirei che il processo iniziasse su un host Linux, poiché immagino che finirà come applicazione web che vive su un server Apache, ma se deve iniziare su Windows, sto esitando con quello.

Idealmente, vorrei che qualcosa del genere di psexec per Linux funzionasse contro Windows, ma la risposta in quella direzione appare a Cygwin , e per quanto apprezzi tutto il duro lavoro che hanno svolto, non è mai stato giusto , se capisci cosa intendo. È ottimo per un desktop e offre molte funzionalità, ma sento che i server Windows dovrebbero essere trattati come server Windows e non macchine Unix bastardate (che, per inciso, è anche la mia argomentazione contro i server OSX, e in realtà sono Unix) . Comunque, non voglio andare con Cygwin a meno che non sia l'ultima e unica opzione.

Quindi immagino che ciò che chiedo sia se esiste un modo per eseguire lavori su macchine Windows da Linux. Senza Cygwin. Sono aperto a idee e suggerimenti, tra cui "Sembri un idiota, tutti usano Cygwin, quindi succhialo e affrontalo". Grazie in anticipo!

Risposte:


5

Ho passato ore a martellare su questo problema e alla fine si è trattato di due opzioni praticabili (ci sono molte opzioni non praticabili là fuori):

  1. Costruisci un box Windows con un servizio IIS che ospita un WebAPI che sia sia di dominio che configurato in modo tale che le sessioni WinRM funzionino da esso.
  2. Cygwin

Con la seconda opzione sei bloccato combattendo attraverso il livello di astrazione GNU / Posix per ottenere i bit di Windows reali. Ciò limita ciò che sei in grado di fare con esso.

La prima opzione crea praticamente un livello di astrazione basato sul web che scrivi tu stesso sull'installazione completa di Windows con stack nativo. Se sei disposto a metterti al lavoro, il master-server Linux deve fare solo un mucchio di chiamate arricciate per fare ciò che deve fare. Funziona meglio quando gli script vengono attivati ​​e dimenticati, poiché la creazione di un sistema di richiamata è molto più impegnativa.


Avevo paura di quella prima opzione :-) C'è un grosso carro armato di squali pieno di problemi lì, che aspetta solo di mordermi se sbaglio anch'io. Autenticazione, analisi degli errori, sicurezza generale dell'applicazione ... ecc ecc ecc. Ma grazie per l'input. Sono contento di non essere l'unica persona che è rimasta bloccata da questo.
Matt Simmons,

2
@MattSimmons Ho fatto qualcosa di simile a $ Job-1. Le restrizioni IP di IIS semplificano molto questo aspetto; se le chiamate API possono provenire da un solo host, riducono abbastanza la superficie di attacco.
sysadmin1138

Non l'ho usato, ma da quello che ho letto WinRM può essere eseguito da solo (senza IIS o un'API personalizzata). Usa il routing restrittivo e l'autenticazione Kerberos e sembra (SUONI) come potrebbe essere abbastanza sicuro. Pensieri?
laughingbovine,

@laughingbovine Il problema è sempre stato il supporto WinRM. Il metodo IIS che propongo consente di frontare PowerShell con un'API REST che è supportata praticamente da tutto. Il supporto di WinRM è supportato a malapena in alcuni punti. In quasi tre anni da quando ho scritto questo, il supporto è probabilmente migliorato rispetto allo stato inesistente che era nel 2012.
sysadmin1138

3

È inoltre possibile acquistare software di automazione del flusso di lavoro o di pianificazione multipiattaforma in grado di dare il via a script nativi su molti host a seconda delle azioni precedenti o persino dei risultati restituiti. Le grandi aziende usano software come Tivoli, UC4, Espresso (CA dSeries, ora) per farlo, e l'ho usato nelle grandi aziende che dovevano fare questo genere di cose. Cordiali saluti, questi spesso hanno il supporto nativo per cose come i lavori Oracle, per darti un'idea del prezzo che potresti guardare.

(Nel mio lavoro passato, hanno usato Cygwin comunque , in modo da poter usare gli stessi script Perl senza modifiche quando i carichi di lavoro si spostavano tra le piattaforme. Molto divertente.)

Potresti anche provare a crearne uno tuo, come suggerisce @ sysadmin1138; sarebbe un progetto divertente e potrebbe persino finire abbastanza robusto da essere utilizzabile e non farti impaginare alle 2 del mattino quando le esportazioni finanziarie falliscono al primo tentativo.


1
Fortunatamente non sto più trasmettendo dati finanziari :-) Questa è l'automazione per un college. Fattore pucker molto più basso.
Matt Simmons,

3

Vorrei utilizzare la funzionalità di accesso Web Powershell introdotta in Powershell v3.0. Ciò consente di utilizzare gli script Powershell da un host Linux.


2

Il server PowerShell ti consente di accedere a SSH in un server Windows e ottenere una console PowerShell. Non l'ho usato oltre la prova gratuita, ma il mio uso informale mi ha dimostrato che era un prodotto abbastanza affidabile.


Bleh, il loro prezzo è tale che è progettato per l'utilizzo del server di distribuzione piuttosto che "distribuire su tutto ciò che deve essere gestito in remoto". Funzionante, solo un modello diverso da Linux.
sysadmin1138

2

Che schifo vuoi sentire dopo, perché c'è sempre telnet :)

Scherzi a parte, perché è necessario il server Linux per chiamare lo script PowerShell? Puoi riprogettare il tuo flusso di lavoro in modo che il server Linux consegni semplicemente l'immagine boot.wim corretta tramite tftp a un host avviato PXE? In passato ho avuto fortuna a conservare un'immagine Windows con file di risposta diversi su un file server Windows e a fornire un'immagine di avvio WinPE personalizzata utilizzando tftpd da un host Linux. Quindi, puoi fare in modo che il file di risposte chiami lo script PowerShell corretto e non devi occuparti di schifezza multipiattaforma come Cygwin.


Oh, se solo fosse così facile. Non stavo scherzando sulla parte perl di 15 anni. Sono qui da 3 mesi e non sono ancora a conoscenza di come "funzionino" tutte le interconnessioni, ma so che sono molte e varie, con una sottigliezza che porta le persone che sono state qui per anni a ignorare le funzionalità documentate negli strumenti esistenti sviluppati internamente perché nessuno è sicuro se / quando / come sono stati sottoposti a debug. È peloso. Sarà un progetto pluriennale per sistemare tutto.
Matt Simmons,

@MattSimmons Suppongo di non comprendere appieno i requisiti allora :-) Perché il server Linux deve chiamare lo script PowerShell? In passato ho aggirato questo requisito mantenendo le informazioni di provisioning della macchina in un database (che può essere aggiornato dal server * nix) e quindi WinPE interroga quel database quando determina quale file di risposta applicare. Sicuramente qualcosa di simile può essere adattato a quasi tutti gli ambienti, giusto? Fondamentalmente sta solo ricostruendo MDT da zero
eh

Ci sono cose che (in alcuni casi) devono accadere sul lato Windows ogni volta che viene eseguito lo script della nuova macchina. Potrei iniziare le cose dal lato di Windows, ma avrei bisogno di creare un nuovo server di applicazioni Web per l'interfaccia frontale quando sarà il momento, e mi sento molto più a mio agio nel farlo con PHP su Linux che C # (o qualsiasi altra cosa) su Windows . Ma come ho detto, se devo, devo farlo.
Matt Simmons,

2

È possibile utilizzare qualcosa come nrpe per eseguire in remoto lo script PowerShell sull'host Windows. Potresti voler modificare i tuoi script PowerShell per restituire i codici di uscita come previsto da nrpe, ma non c'è motivo per non poter chiamare check_nrpe dai tuoi script sul tuo host Linux.


1
È deliziosamente controintuitivo. Mi piace. È un grande trucco, ma comunque creativo! Grazie.
Matt Simmons,

2

Sul tema degli hack contro-intuitivi , hai considerato l'abuso del software di integrazione continua come uno strumento di orchestrazione multipiattaforma?

Installa il master CI ovunque sia più conveniente, installa l'agente sul tuo box di Windows ( questo o questo ), configura un lavoro per eseguire il tuo script PowerShell (sia invocandolo direttamente usando la configurazione del comando batch di Windows, sia usando un plugin se vuoi per scrivere / mantenere lo script all'interno dell'app CI) sull'agente Windows e attivare il lavoro in remoto tramite arricciatura o simile.


0

Lavoro in una grande impresa in cui questo problema è comune. Per i processi che attualmente supportiamo, il nostro approccio prevede che i sistemi Unix effettuino chiamate Web a un server Windows "admin" che esegue ColdFusion su IIS. Abbiamo classi e funzioni che vengono attivate dalle richieste GET che utilizzano la direttiva "cfexecute" per avviare specifici script PowerShell. È brutto ma funziona. Stiamo esaminando le funzionalità del servizio Web PowerShell v3 per evitare che ColdFusion agisca come intermediario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.