Phương pháp tích hợp tập lệnh Powershell với quy trình làm việc không phải của Windows?


16

Tôi yêu mùi máy móc mới vào buổi sáng.

Tôi đang tự động hóa quy trình tạo máy bao gồm một số hệ thống riêng biệt trên cơ sở hạ tầng của mình, một số trong đó bao gồm các tập lệnh perl 15 năm tuổi trên máy chủ Solaris, hệ thống khởi động PXE Linux và Powershell trên Windows Server 2008.

Tôi có thể viết kịch bản cho từng bộ phận riêng lẻ và việc tích hợp tự động hóa Linux và Unix khá đơn giản, nhưng tôi không biết làm cách nào để liên kết các tập lệnh Powershell với các quy trình còn lại một cách đáng tin cậy.

Tôi thích nếu quá trình bắt đầu trên máy chủ Linux, vì tôi tưởng tượng rằng nó sẽ kết thúc như một ứng dụng web sống trên máy chủ Apache, nhưng nếu nó cần bắt đầu trên Windows, tôi sẽ không ngần ngại với điều đó.

Tôi lý tưởng muốn một cái gì đó dọc theo dòng psexec cho Linux chạy với Windows, nhưng câu trả lời theo hướng đó xuất hiện bởi Cygwin , và như tôi đánh giá cao tất cả những công việc khó khăn mà họ đã bỏ ra, nó chưa bao giờ cảm thấy đúng , nếu bạn hiểu ý tôi Thật tuyệt vời cho máy tính để bàn và cung cấp nhiều chức năng, nhưng tôi cảm thấy các máy chủ Windows nên được đối xử như máy chủ Windows và không phải là các máy Unix khốn khổ (mà, tình cờ, đó là lý lẽ của tôi đối với máy chủ OSX, và chúng thực sự là Unix) . Dù sao, tôi không muốn đi với Cygwin trừ khi đó là lựa chọn cuối cùng và duy nhất.

Vì vậy, tôi đoán những gì tôi hỏi là nếu có một cách để thực hiện công việc trên các máy Windows từ Linux. Không có Cygwin. Tôi cởi mở với các ý tưởng và đề xuất, bao gồm cả "Nhìn đồ ngốc, mọi người đều sử dụng Cygwin, vì vậy hãy tiếp tục và giải quyết nó". Cảm ơn trước!

Câu trả lời:


5

Tôi đã dành hàng giờ đồng hồ cho vấn đề này và cuối cùng có hai lựa chọn khả thi (có rất nhiều lựa chọn không khả thi ngoài kia):

  1. Xây dựng hộp Windows với dịch vụ IIS lưu trữ WebAPI vừa được đặt tên miền vừa được thiết lập theo cách mà các phiên WinRM từ nó sẽ hoạt động.
  2. Cygwin

Với tùy chọn thứ hai, bạn bị mắc kẹt khi chiến đấu với lớp trừu tượng GNU / Posix để lấy các bit windows thực tế. Điều này hạn chế những gì bạn có thể làm với nó.

Tùy chọn đầu tiên khá nhiều xây dựng một lớp trừu tượng dựa trên web mà bạn tự viết lên trên bản cài đặt Windows đầy đủ của bản gốc. Nếu bạn sẵn sàng thực hiện công việc, máy chủ chính Linux chỉ phải thực hiện một loạt các lệnh gọi curl để làm những gì cần làm. Điều này hoạt động tốt nhất khi các tập lệnh bị cháy và quên, vì việc xây dựng một hệ thống gọi lại là nỗ lực hơn rất nhiều.


Tôi sợ lựa chọn đầu tiên đó :-) Có một bể cá mập lớn đầy vấn đề ở đó, chỉ chờ để cắn tôi nếu tôi cũng làm sai. Xác thực, phân tích lỗi, bảo mật ứng dụng chung ... vv vv, nhưng cảm ơn vì đầu vào. Tôi rất vui vì tôi không phải là người duy nhất gác máy về điều này.
Matt Simmons

2
@MattSimmons Tôi đã làm một cái gì đó tương tự tại $ Job-1. IIS hạn chế IP làm cho nhiều điều này dễ dàng hơn; nếu các lệnh gọi API chỉ có thể đến từ một máy chủ, nó sẽ giảm bề mặt tấn công khá nhiều.
sysadmin1138

Tôi chưa sử dụng nó, nhưng từ những gì tôi đã đọc WinRM có thể tự chạy (không cần IIS hoặc API tùy chỉnh). Sử dụng định tuyến hạn chế và xác thực kerberos và âm thanh (SOUNDS) giống như nó có thể khá an toàn. Suy nghĩ?
smilebovine

@laughingbovine Vấn đề luôn là hỗ trợ WinRM. Phương thức IIS mà tôi đề xuất cho phép hỗ trợ PowerShell với API REST được hỗ trợ bởi mọi thứ. Hỗ trợ WinRM hầu như không được hỗ trợ ở một vài nơi. Trong gần ba năm kể từ khi tôi viết bài này, sự hỗ trợ đó có lẽ đã được cải thiện từ trạng thái không tồn tại vào năm 2012.
sysadmin1138

3

Bạn cũng có thể mua phần mềm tự động lập lịch trình hoặc công việc đa nền tảng có thể khởi động các tập lệnh gốc trên nhiều máy chủ tùy thuộc vào các hành động trước đó, hoặc thậm chí kết quả trả về của chúng. Các doanh nghiệp lớn sử dụng phần mềm như Tivoli, UC4, Espresso (CA dSeries, bây giờ) thực hiện điều này và tôi đã sử dụng nó tại các doanh nghiệp lớn cần thực hiện loại việc này. FYI, những người này thường có hỗ trợ riêng cho những việc như công việc của Oracle, để cung cấp cho bạn ý tưởng về pricetag mà bạn có thể đang xem.

(Trong công việc trước đây của tôi, dù sao họ cũng đã sử dụng Cygwin , để họ có thể sử dụng cùng một tập lệnh Perl mà không cần sửa đổi khi khối lượng công việc di chuyển giữa các nền tảng. Rất vui.)

Bạn cũng có thể thử tự xây dựng, như @ sysadmin1138 gợi ý; đó sẽ là một dự án thú vị và thậm chí có thể kết thúc đủ mạnh để có thể sử dụng được và không khiến bạn phải phân trang vào lúc 2 giờ sáng khi xuất khẩu tài chính thất bại ngay lần thử đầu tiên.


1
May mắn là tôi không chuyển dữ liệu tài chính nữa :-) Đây là tự động hóa cho một trường đại học. Yếu tố pucker thấp hơn nhiều.
Matt Simmons

3

Tôi sẽ sử dụng tính năng Powershell Web Access được giới thiệu trong Powershell v3.0. Điều này cho phép bạn sử dụng các tập lệnh Powershell từ máy chủ Linux.


2

Máy chủ PowerShell cho phép bạn SSH vào máy chủ Windows và nhận bảng điều khiển PowerShell. Tôi đã không sử dụng nó ngoài bản dùng thử miễn phí, nhưng việc sử dụng không chính thức của tôi đã chứng minh với tôi rằng đó là một sản phẩm khá đáng tin cậy.


Bleh, giá của chúng sao cho nó được thiết kế để sử dụng cho máy chủ triển khai thay vì 'triển khai trên mọi thứ cần quản lý từ xa'. Hoàn toàn khả thi, chỉ là một mô hình khác với Linux.
sysadmin1138

2

Bạn muốn cảm thấy thế nào sau đó, bởi vì luôn có telnet :)

Nghiêm túc mà nói, tại sao bạn cần máy chủ Linux để gọi tập lệnh PowerShell? Bạn có thể thiết kế lại quy trình làm việc của mình để máy chủ Linux chỉ cần cung cấp hình ảnh boot.wim chính xác thông qua tftp đến máy chủ khởi động PXE không? Tôi đã rất may mắn trong quá khứ giữ một hình ảnh Windows với các tệp trả lời khác nhau trên máy chủ tệp Windows và cung cấp hình ảnh khởi động WinPE tùy chỉnh bằng cách sử dụng tftpd từ máy chủ Linux. Sau đó, bạn có thể có tệp trả lời gọi tập lệnh PowerShell chính xác và bạn không phải đối phó với sự tệ hại đa nền tảng như Cygwin.


Ồ, nếu chỉ có nó là dễ dàng. Tôi không đùa về phần perl 15 tuổi. Tôi đã ở đây được 3 tháng và tôi chưa biết tất cả các kết nối "hoạt động" như thế nào, nhưng tôi biết rằng chúng rất nhiều và đa dạng, với sự tinh tế khiến những người đã ở đây trong nhiều năm hoàn toàn bỏ qua các tính năng được ghi lại trong các công cụ hiện có được phát triển nội bộ vì không ai chắc chắn liệu chúng có bị gỡ lỗi hay không. Nó có lông. Nó sẽ là một dự án nhiều năm để sửa chữa tất cả.
Matt Simmons

@MattSimmons Tôi cho rằng tôi không hiểu đầy đủ các yêu cầu sau đó :-) Tại sao máy chủ Linux cần gọi tập lệnh PowerShell? Trước đây, tôi đã làm việc với yêu cầu này bằng cách giữ thông tin cung cấp máy trong cơ sở dữ liệu (có thể được cập nhật bởi máy chủ * nix) và sau đó WinPE truy vấn cơ sở dữ liệu đó khi xác định tệp trả lời nào sẽ được áp dụng. Chắc chắn một cái gì đó tương tự có thể thích nghi với hầu hết mọi môi trường phải không? Về cơ bản, nó chỉ tự xây dựng lại MDT từ đầu thôi
MDMarra

Có những điều (trong một số trường hợp) cần phải xảy ra ở phía Windows bất cứ khi nào tập lệnh máy mới chạy. Tôi CÓ THỂ bắt đầu mọi thứ từ phía Windows, nhưng tôi sẽ cần xây dựng một máy chủ ứng dụng web mới cho giao diện phía trước khi đến lúc đó và tôi cảm thấy thoải mái hơn khi làm điều đó với PHP trên Linux so với C # (hoặc bất cứ điều gì) trên Windows . Nhưng như tôi đã nói, nếu tôi phải, tôi phải làm.
Matt Simmons

2

Bạn có thể sử dụng một cái gì đó như nrpe để thực thi từ xa tập lệnh powershell trên máy chủ windows. Bạn có thể muốn sửa đổi tập lệnh powershell của mình để trả về mã thoát như mong đợi của nrpe, nhưng không có lý do gì bạn không thể gọi check_nrpe từ tập lệnh của mình trên máy chủ linux.


1
Thật là phản trực giác. Tôi thích nó. Đó là một hack lớn, nhưng vẫn, sáng tạo! Cảm ơn.
Matt Simmons

2

Về chủ đề hack trực quan , bạn đã xem việc lạm dụng phần mềm Tích hợp liên tục như một công cụ phối hợp đa nền tảng chưa?

Cài đặt CI master bất cứ nơi nào thuận tiện nhất, cài đặt tác nhân trên hộp Windows của bạn ( cái này hoặc cái này ), cấu hình một công việc để thực thi tập lệnh powershell của bạn (gọi trực tiếp nó bằng cấu hình Windows Batch Command hoặc sử dụng plugin nếu bạn muốn để viết / giữ tập lệnh của bạn bên trong ứng dụng CI) trên tác nhân Windows của bạn và kích hoạt công việc từ xa thông qua curl hoặc tương tự.


0

Tôi làm việc trong một doanh nghiệp lớn, nơi vấn đề này là phổ biến. Đối với các quy trình hiện tại chúng tôi hỗ trợ phương pháp của chúng tôi là để các hệ thống Unix thực hiện các cuộc gọi Web đến máy chủ Windows "quản trị" đang chạy ColdFusion trên IIS. Chúng tôi có các lớp và hàm được kích hoạt từ các yêu cầu GET sử dụng lệnh "cfexecute" để khởi chạy các tập lệnh powershell cụ thể. Nó xấu nhưng nó hoạt động. Chúng tôi đang xem xét các tính năng dịch vụ Web powershell v3 để di chuyển khỏi việc ColdFusion đóng vai trò trung gian.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.