วิธีการรวมสคริปต์ Powershell กับเวิร์กโฟลว์ที่ไม่ใช่ Windows


16

ฉันชอบกลิ่นของเครื่องจักรใหม่ในตอนเช้า

ฉันกำลังสร้างเวิร์กโฟลว์การสร้างเครื่องจักรโดยอัตโนมัติซึ่งเกี่ยวข้องกับหลาย ๆ ระบบในโครงสร้างพื้นฐานของฉันซึ่งบางส่วนเกี่ยวข้องกับสคริปต์ Perl อายุ 15 ปีบนโฮสต์ Solaris, PXE Booting Linux system และ Powershell บน Windows Server 2008

ฉันสามารถเขียนสคริปต์แต่ละส่วนแต่ละส่วนได้และการรวมระบบอัตโนมัติของ Linux และ Unix นั้นค่อนข้างตรงไปตรงมา แต่ฉันรู้สึกว่าการผูกสคริปต์ Powershell เข้ากับกระบวนการอื่น ๆ ได้อย่างน่าเชื่อถือ

ฉันต้องการถ้ากระบวนการเริ่มต้นบนโฮสต์ Linux เนื่องจากฉันคิดว่ามันจะจบลงด้วยการเป็นเว็บแอพพลิเคชั่นที่อาศัยอยู่บนเซิร์ฟเวอร์ Apache แต่ถ้ามันต้องเริ่มต้นบน Windows ฉันก็โอเคกับมันอย่างลังเล

ฉันจะนึกคิดเหมือนสิ่งที่ตามสายของpsexecสำหรับลินุกซ์ที่จะทำงานกับ Windows แต่คำตอบว่าทิศทางจะปรากฏขึ้นเพื่อโดยCygwinและเท่าที่ฉันขอขอบคุณทุกการทำงานอย่างหนักที่พวกเขาใส่ในมันไม่เคยรู้สึกขวา , ถ้าคุณรู้ว่าฉันหมายถึงอะไร. มันยอดเยี่ยมสำหรับเดสก์ท็อปและมีฟังก์ชั่นการใช้งานมากมาย แต่ฉันรู้สึกว่าเซิร์ฟเวอร์ Windows ควรได้รับการปฏิบัติเหมือนเซิร์ฟเวอร์ Windows และไม่ใช่เครื่อง Unix ที่ถูกวางระเบิด (ซึ่งบังเอิญเป็นอาร์กิวเมนต์ของฉันกับเซิร์ฟเวอร์ OSX เช่นกันและจริง ๆ แล้ว Unix) . อย่างไรก็ตามฉันไม่ต้องการไปกับ Cygwin เว้นแต่ว่าจะเป็นตัวเลือกสุดท้ายและตัวเดียว

ดังนั้นฉันเดาว่าสิ่งที่ฉันถามคือถ้ามีวิธีการทำงานบนเครื่อง Windows จาก Linux โดยไม่ต้อง Cygwin ฉันเปิดรับแนวคิดและคำแนะนำรวมถึง "ดูงี่เง่าทุกคนใช้ Cygwin ดังนั้นให้ดูดและจัดการกับมัน" ขอบคุณล่วงหน้า!

คำตอบ:


5

ฉันใช้เวลาหลายชั่วโมงในการแก้ปัญหานี้และในที่สุดก็มีตัวเลือกที่ทำงานได้สองแบบ(มีตัวเลือกที่ไม่สามารถใช้งานได้):

  1. สร้างกล่อง Windows ด้วยบริการ IIS ที่โฮสต์ WebAPI ที่มีทั้งโดเมนและตั้งค่าในลักษณะที่เซสชัน WinRM จากนั้นจะทำงาน
  2. Cygwin

เมื่อใช้ตัวเลือกที่สองคุณจะต้องดิ้นรนต่อสู้ผ่านเลเยอร์สิ่งที่เป็นนามธรรมของ GNU / Posix เพื่อให้ได้บิต windows จริง ซึ่งจะ จำกัด สิ่งที่คุณสามารถทำได้

ตัวเลือกแรกจะสร้างเลเยอร์สิ่งที่เป็นนามธรรมบนเว็บที่คุณเขียนเองบนการติดตั้ง Windows แบบเต็มสแต็คแบบดั้งเดิม หากคุณยินดีที่จะทำงานลีนุกซ์เซิร์ฟเวอร์หลักจะต้องทำสิ่งที่ต้องทำเพื่อเรียกสิ่งที่ต้องการ วิธีนี้จะทำงานได้ดีที่สุดเมื่อสคริปต์นั้นใช้งานง่ายและลืมเนื่องจากการสร้างระบบโทรกลับเป็นความพยายามมากขึ้น


ฉันกลัวตัวเลือกแรกนั้น :-) มีตู้ปลาฉลามตัวใหญ่ที่เต็มไปด้วยปัญหารอฉันกัดฉันถ้าทำผิด การตรวจสอบข้อผิดพลาดการแยกวิเคราะห์ความปลอดภัยของแอปพลิเคชันทั่วไป ... ฯลฯ ฯลฯ แต่ขอบคุณสำหรับการป้อนข้อมูล ฉันดีใจที่ฉันไม่ได้เป็นเพียงคนเดียวที่แขวนในเรื่องนี้
Matt Simmons

2
@ MattSimmons ฉันทำสิ่งที่คล้ายกันที่ $ Job-1 ข้อ จำกัด ของ IIS IP ทำให้ง่ายขึ้นมาก หากการเรียก API สามารถมาจากโฮสต์เดียวได้ก็จะลดพื้นผิวการโจมตีได้เล็กน้อย
sysadmin1138

ฉันไม่ได้ใช้มัน แต่จากสิ่งที่ฉันได้อ่าน WinRM สามารถทำงานได้ด้วยตัวเอง (ไม่มี IIS หรือ API ที่กำหนดเอง) ใช้การกำหนดเส้นทางที่เข้มงวดและการรับรองความถูกต้องของ Kerberos และฟังดู (SOUNDS) เหมือนว่ามันจะค่อนข้างปลอดภัย คิด?
laughingbovine

@laughingbovine ปัญหาได้รับการสนับสนุน WinRM เสมอ วิธี IIS ที่ฉันเสนอให้เปิดใช้งาน PowerShell ด้วย REST API ซึ่งรองรับได้ทุกอย่าง การสนับสนุน WinRM ได้รับการสนับสนุนเพียงไม่กี่แห่ง ในเกือบสามปีนับตั้งแต่ฉันเขียนสิ่งนี้การสนับสนุนนั้นน่าจะดีขึ้นจากรัฐที่ไม่มีอยู่จริงในปี 2012
sysadmin1138

3

นอกจากนี้คุณยังสามารถซื้อการกำหนดเวลาข้ามแพลตฟอร์มหรือซอฟต์แวร์ระบบอัตโนมัติเวิร์กโฟลว์ที่สามารถเริ่มต้นใช้งานสคริปต์เนทีฟบนโฮสต์จำนวนมากทั้งนี้ขึ้นอยู่กับการกระทำก่อนหน้าหรือแม้กระทั่งผลลัพธ์ที่ส่งคืน องค์กรขนาดใหญ่ใช้ซอฟต์แวร์เช่น Tivoli, UC4, Espresso (CA dSeries, ตอนนี้) ที่ทำสิ่งนี้และฉันใช้มันในองค์กรขนาดใหญ่ที่ต้องการทำสิ่งนี้ FYI, เหล่านี้มักจะมีการสนับสนุนพื้นเมืองสำหรับสิ่งต่าง ๆ เช่นงานของออราเคิล, เพื่อให้คุณมีความคิดเกี่ยวกับราคาที่คุณอาจมองหา

(ในงานที่ผ่านมาของฉันพวกเขายังใช้ Cygwin อยู่แล้วเพื่อให้พวกเขาสามารถใช้สคริปต์ Perl เดียวกันโดยไม่ต้องแก้ไขเมื่อเวิร์กโหลดย้ายระหว่างแพลตฟอร์มสนุกมาก)

คุณสามารถลองสร้างของคุณเองตามที่ @ sysadmin1138 แนะนำ นั่นจะเป็นโครงการที่สนุกและอาจจบลงด้วยความแข็งแรงเพียงพอที่จะใช้งานได้และไม่ทำให้คุณได้รับการทำเพจในเวลาตี 2 เมื่อการส่งออกทางการเงินล้มเหลวในการลองครั้งแรก


1
โชคดีที่ฉันไม่ได้ผ่านข้อมูลทางการเงินอีกต่อไป :-) นี่คือระบบอัตโนมัติสำหรับวิทยาลัย ปัจจัยรอยย่นที่ต่ำกว่ามาก
แมตต์ซิมมอนส์

3

ฉันจะใช้คุณสมบัติ Powershell Web Access ที่เปิดตัวใน Powershell v3.0 สิ่งนี้อนุญาตให้คุณใช้สคริปต์ Powershell จากโฮสต์ Linux


2

เซิร์ฟเวอร์ PowerShellช่วยให้คุณสามารถใช้ SSH ในเซิร์ฟเวอร์ Windows และรับคอนโซล PowerShell ฉันไม่ได้ใช้งานนอกเหนือจากการทดลองใช้ฟรี แต่การใช้งานที่ไม่เป็นทางการของฉันพิสูจน์แล้วว่าเป็นผลิตภัณฑ์ที่น่าเชื่อถือพอสมควร


Bleh ราคาของพวกเขานั้นถูกออกแบบมาเพื่อการใช้งานเซิร์ฟเวอร์ - แทนที่จะเป็น 'ปรับใช้กับทุกสิ่งที่ต้องการจัดการจากระยะไกล' สามารถใช้งานได้เป็นเพียงรูปแบบที่แตกต่างจาก Linux
sysadmin1138

2

คุณรู้สึกอย่างไรที่แย่หลังจากนั้นเพราะมี telnet อยู่เสมอ :)

อย่างจริงจังว่าทำไมคุณต้องเซิร์ฟเวอร์ Linux เพื่อเรียกสคริปต์ PowerShell? คุณสามารถออกแบบเวิร์กโฟลว์ของคุณใหม่เพื่อให้เซิร์ฟเวอร์ Linux สามารถส่งอิมเมจ boot.wim ที่ถูกต้องผ่าน tftp ไปยังโฮสต์ที่บูต PXE ได้หรือไม่ ฉันโชคดีในอดีตที่รักษาอิมเมจ Windows ด้วยไฟล์คำตอบต่าง ๆ บนไฟล์เซิร์ฟเวอร์ Windows และส่งอิมเมจการบูต WinPE แบบกำหนดเองโดยใช้ tftpd จากโฮสต์ Linux จากนั้นคุณสามารถมีไฟล์คำตอบเรียกสคริปต์ PowerShell ที่ถูกต้องและคุณไม่ต้องจัดการกับความคับแคบข้ามแพลตฟอร์มอย่าง Cygwin


โอ้ถ้าเพียง แต่มันเป็นเรื่องง่าย ฉันไม่ได้ล้อเล่นเกี่ยวกับส่วน perl อายุ 15 ปี ฉันเคยมาที่นี่ 3 เดือนและฉันไม่ทราบว่าการเชื่อมต่อทั้งหมด "ทำงาน" ได้อย่างไร แต่ฉันรู้ว่าพวกเขามีมากมายและหลากหลายด้วยความละเอียดอ่อนที่ทำให้คนที่อยู่ที่นี่มาหลายปี ไม่ต้องสนใจคุณสมบัติที่มีการบันทึกไว้ในเครื่องมือที่มีอยู่แล้วที่พัฒนาขึ้นเองเนื่องจากไม่มีใครแน่ใจว่าพวกเขาจะดีบั๊กเมื่อใด / เมื่อใด มันมีขนดก มันจะเป็นโครงการที่ใช้เวลาหลายปีเพื่อแก้ไขมันทั้งหมด
แมตต์ซิมมอนส์

@ MattSimmons ฉันคิดว่าฉันไม่เข้าใจข้อกำหนดอย่างครบถ้วนแล้ว :-) ทำไมเซิร์ฟเวอร์ Linux จึงต้องเรียกใช้สคริปต์ PowerShell ในอดีตที่ผ่านมาฉันได้แก้ไขข้อกำหนดนี้โดยเก็บข้อมูลการจัดเตรียมเครื่องไว้ในฐานข้อมูล (ซึ่งสามารถปรับปรุงได้โดยเซิร์ฟเวอร์ * nix) จากนั้น WinPE จะสืบค้นฐานข้อมูลนั้นเมื่อพิจารณาว่าจะใช้ไฟล์คำตอบใด แน่นอนสิ่งที่คล้ายกันสามารถปรับให้เข้ากับสภาพแวดล้อมเกือบทุกอย่างใช่มั้ย โดยพื้นฐานแล้วมันแค่สร้าง MDT ขึ้นใหม่ตั้งแต่ต้นด้วยตัวเอง
เหรอ

มีบางสิ่งที่ (ในบางกรณี) จำเป็นต้องเกิดขึ้นในฝั่ง Windows เมื่อใดก็ตามที่สคริปต์เครื่องใหม่ทำงาน ฉันสามารถเริ่มต้นสิ่งต่าง ๆ จากฝั่ง Windows ได้ แต่ฉันจะต้องสร้างเว็บแอพพลิเคชันเซิร์ฟเวอร์ใหม่สำหรับส่วนต่อประสานด้านหน้าเมื่อถึงเวลานั้นและฉันก็รู้สึกสบายใจที่จะทำเช่นนั้นด้วย PHP บน Linux มากกว่า C # (หรืออะไรก็ตาม) บน Windows . แต่อย่างที่ฉันบอกถ้าฉันต้องฉันต้อง
Matt Simmons

2

คุณสามารถใช้สิ่งที่ต้องการ nrpe เพื่อรันสคริปต์ powershell จากระยะไกลบนโฮสต์ windows คุณอาจต้องการแก้ไขสคริปต์ PowerShell ของคุณเพื่อส่งคืนรหัสออกตามที่คาดไว้โดย nrpe แต่ไม่มีเหตุผลใดที่คุณไม่สามารถเรียก check_nrpe จากสคริปต์ของคุณบนโฮสต์ linux ของคุณ


1
นั่นเป็นเรื่องที่เคาน์เตอร์ง่าย ฉันชอบมัน. มันเป็นแฮ็คที่สำคัญ แต่ก็ยังสร้างสรรค์! ขอบคุณ
Matt Simmons

2

ในหัวข้อของแฮ็คแบบตอบโต้คุณได้พิจารณาการใช้ซอฟต์แวร์ Integration อย่างต่อเนื่องในทางที่ผิดเป็นเครื่องมือการข้ามแพลตฟอร์ม

ติดตั้ง CI masterทุกที่สะดวกที่สุดติดตั้ง Agent บนกล่อง Windows ของคุณ (อันนี้หรือนี่ ) กำหนดค่างานเพื่อรันสคริปต์ PowerShell ของคุณ (เรียกใช้โดยตรงโดยใช้การกำหนดค่า Windows Batch Command หรือใช้ปลั๊กอินถ้าคุณต้องการ เพื่อเขียน / เก็บสคริปต์ของคุณไว้ในแอพ CI) ในตัวแทน Windows ของคุณและเรียกใช้งานจากระยะไกลผ่านทาง curl หรือคล้ายกัน


0

ฉันทำงานในองค์กรขนาดใหญ่ที่ปัญหานี้เป็นเรื่องธรรมดา สำหรับกระบวนการที่เราสนับสนุนวิธีการของเราในขณะนี้คือการให้ระบบ Unix โทรผ่านเว็บไปยังเซิร์ฟเวอร์ "admin" ของ Windows ที่ใช้งาน ColdFusion บน IIS เรามีคลาสและฟังก์ชั่นที่ถูกกระตุ้นจากคำขอ GET ซึ่งใช้คำสั่ง "cfexecute" เพื่อเรียกใช้สคริปต์ PowerShell เฉพาะ มันน่าเกลียด แต่มันได้ผล เรากำลังดูคุณสมบัติของบริการเว็บ powershell v3 เพื่อโยกย้ายจากการที่ ColdFusion ทำหน้าที่เป็นคนกลาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.