โฮมเพจ » ทำอย่างไร » โรงเรียน Geek เรียนรู้การใช้ Remoting ใน PowerShell

    โรงเรียน Geek เรียนรู้การใช้ Remoting ใน PowerShell

    หนึ่งในคุณสมบัติที่ดีที่สุดของ PowerShell คือความสามารถในการจัดการเซิร์ฟเวอร์ของคุณจากระยะไกล มันยังช่วยให้คุณจัดการกลุ่มของพวกเขาในครั้งเดียวเช่นกัน.

    อย่าลืมอ่านบทความก่อนหน้าในซีรีย์:

    • เรียนรู้วิธีอัตโนมัติของ Windows ด้วย PowerShell
    • เรียนรู้การใช้ Cmdlets ใน PowerShell
    • เรียนรู้วิธีใช้วัตถุใน PowerShell
    • การเรียนรู้การจัดรูปแบบการกรองและการเปรียบเทียบใน PowerShell

    และคอยติดตามตลอดซีรีย์ที่เหลือตลอดทั้งสัปดาห์.

    Remoting คืออะไร?

    การจัดการเซิร์ฟเวอร์จำนวนมากของคุณอาจเป็นเรื่องน่าเบื่อหน่ายและหากคุณต้องเปลี่ยนการกำหนดค่า IIS ใน 50 เว็บเซิร์ฟเวอร์ก่อนหน้านี้คุณจะรู้ว่าฉันหมายถึงอะไร สิ่งเหล่านี้เป็นสถานการณ์ประเภทต่างๆเมื่อ PowerShell Remoting และความสามารถในการเขียนสคริปต์ของภาษาสามารถช่วยได้ การใช้ HTTP หรือ HTTPS ที่ปลอดภัยยิ่งขึ้น PowerShell Remoting ช่วยให้คุณส่งคำสั่งไปยังเครื่องระยะไกลในเครือข่ายของคุณ จากนั้นเครื่องจะรันคำสั่งและส่งเอาต์พุตกลับไปหาคุณซึ่งจะปรากฏบนหน้าจอของคุณ.

    มารับเทคนิคกันเถอะ

    หัวใจหลักของ PowerShell Remoting คือบริการ Windows เดียวบริการ Windows Remote Management หรือบริการ WinRM เนื่องจากเป็นที่รู้จัก การใช้ WinRM คุณสามารถตั้งค่าการกำหนดค่าเซสชันหนึ่งรายการขึ้นไป (หรือเรียกอีกอย่างว่าจุดปลาย) ซึ่งเป็นไฟล์ที่มีข้อมูลเกี่ยวกับประสบการณ์ที่คุณต้องการมอบให้กับบุคคลที่เชื่อมต่อกับอินสแตนซ์ PowerShell ระยะไกลของคุณ โดยเฉพาะอย่างยิ่งคุณสามารถใช้ไฟล์การกำหนดค่าเซสชันเพื่อกำหนดว่าใครสามารถและใครไม่สามารถเชื่อมต่อกับอินสแตนซ์ว่าพวกเขาสามารถเรียกใช้ cmdlets และสคริปต์ใดได้บ้างรวมถึงบริบทด้านความปลอดภัยที่ต้องใช้เซสชัน เมื่อใช้บริการ WinRM คุณยังสามารถตั้งค่า "listeners" ซึ่งรับฟังคำขอ PowerShell ที่เข้ามา “ ผู้ฟัง” เหล่านี้สามารถเป็น HTTP หรือ HTTPS และสามารถผูกกับที่อยู่ IP เดียวในเครื่องของคุณ เมื่อคุณเปิดการเชื่อมต่อ PowerShell ไปยังเครื่องอื่น (ในทางเทคนิคจะใช้โปรโตคอล WS-MAN ซึ่งเป็นพื้นฐานของ HTTP) การเชื่อมต่อจะผูกกับหนึ่งใน "ผู้ฟัง" เหล่านี้ “ ผู้ฟัง” จะรับผิดชอบในการส่งทราฟฟิกไปยังแอปพลิเคชันที่เกี่ยวข้องกับไฟล์การกำหนดค่าเซสชันที่เหมาะสม แอปพลิเคชัน (ปกติ PowerShell แต่คุณสามารถมีแอปพลิเคชั่นโฮสติ้งอื่น ๆ ได้หากคุณต้องการ) จากนั้นเรียกใช้คำสั่งและดึงผลลัพธ์กลับมาผ่าน“ ผู้ฟัง” ทั่วทั้งเครือข่ายและกลับสู่เครื่องของคุณ.

    แสดงให้ฉันเห็นว่า

    สิ่งแรกที่คุณต้องทำคือเปิดใช้งาน Remoting บนเครื่องที่คุณต้องการเชื่อมต่อ สิ่งนี้สามารถทำได้โดยการเรียกใช้สิ่งต่อไปนี้:

    เปิดใช้ PSRemoting

    คุณจะต้องตอบรับพร้อมท์ทั้งหมด เมื่อคุณเรียกใช้ Enable-PSRemoting จะมีการเปลี่ยนแปลงเล็กน้อยในพีซีของคุณ:

    • บริการ WinRM เริ่มต้นขึ้น.
    • บริการ WinRM เปลี่ยนจากโหมดเริ่มต้นด้วยตนเองเป็นอัตโนมัติ.
    • มันสร้างฟัง HTTP ที่ถูกผูกไว้กับการ์ดเครือข่ายทั้งหมดของคุณ.
    • นอกจากนี้ยังสร้างข้อยกเว้นไฟร์วอลล์ขาเข้าสำหรับโปรโตคอล WS-MAN.
    • มีการสร้างการกำหนดค่าเริ่มต้นบางเซสชัน

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

    Enable-PSRemoting -SkipNetworkProfileCheck

    อย่างไรก็ตามเราขอแนะนำให้คุณเปลี่ยนตำแหน่งเครือข่ายของคุณ.

    มีสองวิธีในการเชื่อมต่อกับเครื่องอื่นโดยใช้ PowerShell มีวิธีหนึ่งต่อหนึ่งซึ่งคล้ายกับการใช้ SSH แล้วมีวิธีหนึ่งต่อหลายวิธี.

    ใช้ PowerShell เซสชัน

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

    Enter-PSSession - ชื่อคอมพิวเตอร์“ Darlah”

    พรอมต์จะได้รับคำนำหน้าซึ่งหมายถึงเครื่องที่คุณกำลังเรียกใช้ cmdlets กับ.

    จากตรงนี้คุณสามารถรักษาคำเตือนได้ราวกับว่าคุณนั่งอยู่ที่เครื่องรีโมต ตัวอย่างเช่นหากคุณต้องการดูไฟล์ทั้งหมดในไดรฟ์ C: \ คุณสามารถทำได้ง่ายๆ:

    รับ ChildItem -Path C: \

    หากคุณมาจากพื้นหลังของ Linux คุณสามารถคิดถึงวิธีนี้ในการใช้วิธีการ remoting เป็น PowerShell ทางเลือกแทน SSH.

    การใช้คำสั่งเรียกใช้

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

    เรียกใช้คำสั่ง - ชื่อคอมพิวเตอร์ Darlah, localhost -ScriptBlock แอปพลิเคชัน Get-EventLog - ใหม่ล่าสุด 2

    เนื่องจากคำสั่งถูกดำเนินการแบบขนานในทุกเครื่องคุณจะต้องมีวิธีที่จะดูว่าพีซีใดที่ได้รับผลลัพธ์มา คุณสามารถทำได้โดยดูที่คุณสมบัติ PSComputerName.

    เมื่อคุณใช้ Invoke-Command คุณจะไม่มีวัตถุที่คุณอาจคาดหวังใน Pipeline อีกต่อไป คุณเห็นเพื่อให้ PowerShell รับข้อมูลจากเครื่องระยะไกลกลับไปที่เครื่องของคุณพวกเขาต้องการวิธีแสดงวัตถุที่คำสั่งที่คุณใช้ในการทำงานของเครื่องระยะไกล วันนี้ดูเหมือนว่าวิธีที่เลือกเพื่อแสดงโครงสร้างข้อมูลแบบลำดับชั้นคือการใช้ XML ซึ่งหมายความว่าเมื่อคุณออกคำสั่งโดยใช้ Invoke-Command ผลลัพธ์จะถูกทำให้เป็นอันดับแรกใน XML ก่อนที่จะถูกส่งกลับไปยังเครื่องของคุณ เมื่อพวกเขากลับไปที่เครื่องของคุณพวกเขาจะถูก deserialized กลับเข้าไปในวัตถุ gotcha ที่นี่คือเมื่อพวกเขาถูก deserialized วิธีการทั้งหมดยกเว้นวิธี ToString () ว่าวัตถุได้ถูกปล้นออกไปจากมัน.

    หมายเหตุ: มีข้อยกเว้นบางประการสำหรับกฎนี้ตัวอย่างเช่นประเภทดั้งเดิมส่วนใหญ่เช่นจำนวนเต็มสามารถถูกดีซีเรียลไลซ์ด้วยวิธีการที่รวม นอกจากนี้ยังมีกระบวนการที่เรียกว่าการคืนสภาพซึ่งวิธีการบางอย่างสามารถเพิ่มกลับไปยังวัตถุ deserialized ดังนั้นให้ระวังและจำไว้ว่า Get-Member คือเพื่อนของคุณ.

    การบ้าน

    • อ่านความลับของ PowerShell Remoting ebook โดย Don Jones.