PowershellスクリプトをWindows以外のワークフローと統合する方法は?


16

朝の新しいマシンの匂いが大好きです。

インフラストラクチャ全体のいくつかの個別のシステムを含むマシン作成ワークフローを自動化しています。その一部には、Solarisホスト上の15年前のperlスクリプト、LinuxシステムのPXEブート、およびWindows Server 2008上のPowershellが含まれます。

私は個々の部分をそれぞれスクリプト化でき、LinuxとUnixの自動化の統合はかなり簡単ですが、Powershellスクリプトを残りのプロセスに確実に結び付ける方法については迷っています。

プロセスがLinuxホストで開始された場合、Apacheサーバー上で動作するWebアプリケーションとして終了することを想像しますが、Windowsで開始する必要がある場合は、ためらいがありません。

私は、理想的にはの線に沿って何かたいPSEXECのWindowsに対して実行するLinux用の、しかしによると、その方向に表示されますでの回答のCygwin、および多くのように私は、彼らはそれが決している、中に入れていることハードワークのすべてに感謝して、右感じなかっ、お分かりでしょうが。これはデスクトップに最適であり、多くの機能を提供しますが、WindowsサーバーはWindowsサーバーのように扱われるべきであり、粗悪なUnixマシンではないように感じます(偶然にも、OSXサーバーに対する私の議論であり、実際には Unixです) 。とにかく、最後の唯一のオプションでない限り、私はCygwinを使いたくありません。

だから私はLinuxからWindowsマシンでジョブを実行する方法があるかどうかを尋ねていると思います。Cygwinなし。「馬鹿を見て、誰もがCygwinを使用しているので、それを吸い込んで対処してください」などのアイデアや提案を受け入れます。前もって感謝します!

回答:


5

私はこの問題に何時間も費やしましたが、最終的には2つの実行可能なオプションになりました(実行不可能なオプションがたくさんあります)。

  1. ドメイン化され、WinRMセッションが機能するようにセットアップされたWebAPIをホストするIISサービスでWindowsボックスを構築します。
  2. シグウィン

2番目のオプションを使用すると、GNU / Posix抽象化レイヤーを介して実際のWindowsビットを取得するために戦う必要があります。それはあなたがそれで何ができるかを制限します。

最初のオプションは、完全なネイティブスタックWindowsインストールの上に自分で記述するWebベースの抽象化レイヤーを構築します。喜んで仕事に取り掛かるなら、Linuxマスターサーバーは必要なことをするためにたくさんのcurl呼び出しをするだけです。これは、コールバックシステムの構築がより多くの労力を要するため、スクリプトが完全に機能しない場合に最適に機能します。


私はその最初のオプションを恐れていました:-)問題がいっぱいの大きなサメのタンクがあります。認証、エラー解析、一般的なアプリケーションセキュリティなど。など。しかし、入力に感謝します。これに夢中になったのは私だけではないことがうれしいです。
マットシモンズ

2
@MattSimmons $ Job-1で似たようなことをしました。IIS IPの制限により、この多くが簡単になります。API呼び出しが1つのホストからしか送信できない場合、攻撃対象領域がかなり減少します。
sysadmin1138

私はそれを使用していませんが、私が読んだことから、WinRMは(IISまたはカスタムAPIなしで)単独で実行できます。制限付きルーティングとKerberos認証を使用すると、かなり安全であるように聞こえます(サウンド)。考え?
laughingbovine

@laughingbovine問題は常にWinRMサポートでした。私が提案するIISメソッドでは、ほとんどすべてでサポートされているREST APIを使用してPowerShellを実行できます。WinRMサポートは、いくつかの場所でほとんどサポートされていません。私はサポートはおそらく存在しない状態から改善したことが、これを書いて以来、ほぼ3年間で、それは2012年だった
sysadmin1138

3

また、以前のアクションや返された結果に応じて、多くのホストでネイティブスクリプトを開始できるクロスプラットフォームスケジューリングまたはワークフロー自動化ソフトウェアを購入することもできます。大企業はこれを行うTivoli、UC4、Espresso(現在はCA dSeries)のようなソフトウェアを使用しており、私はこの種のことを行う必要がある大企業で使用しました。参考までに、これらは多くの場合、Oracleジョブのようなものをネイティブにサポートしており、あなたが見ているかもしれない値札のアイデアを提供します。

(私の過去の仕事では、とにかく Cygwinも使用していたため、プラットフォーム間でワークロードが移動したときに変更せずに同じPerlスクリプトを使用できました。

@ sysadmin1138が示唆するように、独自のビルドを試みることもできます。これは楽しいプロジェクトであり、最終的に金融輸出が最初の試行で失敗したときに午前2時にページングされないように、使用できるほど堅牢になる可能性さえあります。


1
幸いなことに、私はもう財務データをやり取りしていません:-)これは大学の自動化です。はるかに低いパッカ係数。
マットシモンズ

3

Powershell v3.0で導入されたPowershell Web Access機能を使用します。これにより、LinuxホストからPowershellスクリプトを使用できます。


2

PowerShellサーバーを使用すると、WindowsサーバーにSSHで接続し、PowerShellコンソールを取得できます。無料試用版以外では使用していませんが、非公式の使用により、かなり信頼できる製品であることがわかりました。


Bleh、彼らの価格設定は、「リモートで管理する必要のあるものすべてに展開する」のではなく、展開サーバーで使用するように設計されています。実行可能で、Linuxとは異なるモデルです。
sysadmin1138

2

telnetが常にあるので、あなたは後でどれほど気分が悪くなりたいですか:)

しかし、真剣に、なぜPowerShellスクリプトを呼び出すためにLinuxサーバーが必要なのですか?Linuxサーバーがtftpを介してPXEブートホストに正しいboot.wimイメージを単に配信するように、ワークフローを再設計できますか?私はこれまで、Windowsファイルサーバー上の異なる応答ファイルでWindowsイメージを保持し、Linuxホストからtftpdを使用してカスタムWinPEブートイメージを配信することで幸運に恵まれてきました。その後、応答ファイルに正しいPowerShellスクリプトを呼び出させることができます。Cygwinのようなクロスプラットフォームの不愉快なことに対処する必要はありません。


ああ、それだけが簡単だったら。私は15歳のperl部分について冗談を言っていませんでした。私はここに3か月滞在しましたが、すべての相互接続がどのように「機能する」のかはまだわかりませんが、それらが多く多様であり、何年もここにいる人々を完全に導く微妙なものであることを知っています社内で開発された既存のツールの文書化された機能は無視してください。誰がデバッグするか、いつ、どのようにデバッグするのかわからないからです。毛深いです。それをすべて修正するための複数年のプロジェクトになります。
マットシモンズ

@MattSimmons要件を完全に理解していないと思います:-) LinuxサーバーがPowerShellスクリプトを呼び出す必要があるのはなぜですか?過去に、マシンプロビジョニング情報をデータベース(* nixサーバーによって更新可能)に保持し、適用する応答ファイルを決定するときにWinPEがそのデータベースを照会することで、この要件を回避しました。ほぼすべての環境に、似たようなものを適応させることができますか?これは、基本的にはあわや自分でゼロからMDTを再構築しています
MDMarra

新しいマシンのスクリプトを実行するたびに、Windows側で(場合によっては)発生する必要があることがあります。私はWindows側から物事を始めることができますが、その時が来たらフロントインターフェース用の新しいWebアプリケーションサーバーを構築する必要があり、Windows上のC#(または何でも)よりもLinux上のPHPでそれを行う方がはるかに快適です。しかし、私が言ったように、私がしなければならない場合、私はしなければなりません。
マットシモンズ

2

nrpeなどを使用して、WindowsホストでPowerShellスクリプトをリモートで実行できます。nrpeが期待する終了コードを返すようにPowerShellスクリプトを変更することもできますが、Linuxホスト上のスクリプトからcheck_nrpeを呼び出せない理由はありません。


1
それはおいしく直感に反します。私はそれが好きです。それは大きなハックですが、それでも創造的です!ありがとう。
マットシモンズ

2

直感反するハッキングのトピックについては、クロスプラットフォームオーケストレーションツールとして継続的インテグレーションソフトウェアを悪用することを検討しましたか?

最も便利な場所にCIマスターをインストールし、Windowsボックスにエージェントをインストールし(これまたはこれのいずれか)、Powershellスクリプトを実行するジョブを構成します(Windows Batch Command configを使用して直接呼び出すか、必要に応じてプラグインを使用します) WindowsアプリでCIアプリ内にスクリプトを記述/保持し、curlなどを使用してリモートでジョブトリガーします。


0

私はこの問題が一般的な大企業で働いています。現在私たちのアプローチをサポートしているプロセスについては、IISでColdFusionを実行している「admin」Windowsサーバーに対してWebシステム呼び出しをUnixシステムに行わせることです。「cfexecute」ディレクティブを使用して特定のPowerShellスクリプトを起動するGETリクエストからトリガーされるクラスと関数があります。いですが、動作します。ColdFusionが仲介者として機能することから移行するためのpowershell v3 Webサービス機能を検討しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.