บริการควบคุมระยะไกลของ Windows winrm WinRM - ทำงานระยะไกลด้วย PowerShell

22.10.2021

· ไม่มีความคิดเห็น

การแนะนำ

WinRM และ WinRS เป็นเวอร์ชันใหม่ใน Windows Vista, Windows Server 2003 R2, Windows Server 2008 (และ Server 2008 Core) เครื่องมือเหล่านี้เป็นเครื่องมือบรรทัดคำสั่งใหม่ที่ทรงพลังที่ช่วยให้ผู้ดูแลระบบได้รับการปรับปรุงการควบคุมระยะไกลและความสามารถในการดำเนินการจากระยะไกลบนเครื่อง Windows อย่างไรก็ตาม จำเป็นต้องเปิดใช้งานก่อน และจะใช้เวลาสักครู่เพื่อเรียนรู้ฟังก์ชันการทำงาน คุณโชคดีแล้ว บทความนี้มีทุกสิ่งที่คุณต้องการเพื่อเริ่มใช้เครื่องมือเหล่านี้วันนี้!

การจัดการระยะไกลของ Windows (WinRM) คืออะไร

Windows Remote Management (ตัวย่อ WinRM) เป็นบริการการจัดการระยะไกลแบบใหม่ที่สะดวกสำหรับ Windows Server 2003 R2, Windows Vista และ Windows Server 2008 WinRM เป็นส่วนประกอบ "เซิร์ฟเวอร์" ของแอปพลิเคชันการจัดการระยะไกลนี้และ WinRS (Windows Remote Shell) คือ " client" สำหรับ WinRM ที่ทำงานบนคอมพิวเตอร์ระยะไกลโดยพยายามควบคุมเซิร์ฟเวอร์ WinRM จากระยะไกล อย่างไรก็ตาม ฉันควรทราบว่าคอมพิวเตอร์ทั้งสองเครื่องต้องติดตั้งและเปิดใช้งาน WinRM เพื่อให้ WinRS ทำงานและรับข้อมูลเกี่ยวกับระบบระยะไกล WinRM ขึ้นอยู่กับมาตรฐาน Web Services for Management (WS-Management) ซึ่งหมายความว่า WinRM ใช้ HTTP (พอร์ต 80) และคำขอ SOAP เพื่อทำงาน ข้อดีของเรื่องนี้ก็คือสามารถส่งคำขอ HTTP ผ่านไฟร์วอลล์ได้อย่างง่ายดาย ผลที่ตามมาทั้งดีและไม่ดีตามมา: ในด้านหนึ่ง การควบคุมคอมพิวเตอร์ระยะไกลผ่านอินเทอร์เน็ตจะง่ายกว่า แต่ในทางกลับกัน ผู้โจมตีจะโจมตีคอมพิวเตอร์เครื่องเดียวกันจากระยะไกลได้ง่ายกว่า ข้อดีเล็กๆ น้อยๆ อีกประการหนึ่งของการใช้พอร์ต 80 คือไม่จำเป็นต้องเปิดพอร์ตอื่นๆ บนเซิร์ฟเวอร์ หากการเชื่อมต่อ HTTP ขาเข้าได้รับอนุญาตแล้ว

ตามที่ Microsoft กล่าวไว้ WinRM คือ "เครื่องมือใหม่ของ Microsoft ในการสร้าง API ตามมาตรฐานสำหรับการจัดการระบบ" ดังนั้น หากคุณไม่เคยสนใจที่จะเรียนรู้เกี่ยวกับเครื่องมือดังกล่าวมาก่อน ฉันคิดว่า "นี่คือมาตรฐานใหม่ของ Microsoft" ทำให้มันคุ้มค่าที่จะเรียนรู้

คุณอาจคุ้นเคยกับฐานข้อมูล Windows Management Instrumentation (WMI) อยู่แล้ว แต่ในกรณีนี้ ฉันจะบอกว่าฐานข้อมูลนี้มีข้อมูลทุกประเภทเกี่ยวกับฮาร์ดแวร์และซอฟต์แวร์คอมพิวเตอร์ เกือบทุกแอปพลิเคชันที่จัดการระบบ Windows จะตกลงไปที่ระดับฐานข้อมูล WMI เพื่อดำเนินงานด้านการดูแลระบบทั้งหมดบนพีซีที่กำหนด

WinRM จะใช้ฐานข้อมูล WMI เพื่อทำงานที่คล้ายกับงานที่คุณอาจทำกับซอฟต์แวร์อื่นเช่น VBScript ข้อดีของ WinRM คือใช้ HTTP (พอร์ต 80) อย่างที่ฉันบอกไปแล้ว และยังมีรหัสพิเศษที่ช่วยให้ WinRM แยกการเชื่อมต่อขาเข้าบนพอร์ต 80 ด้วยส่วนประกอบ IIS ที่อาจทำงานบนพอร์ตนั้นอยู่แล้ว

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

ผู้ผลิตซอฟต์แวร์การจัดการระบบของคุณอาจวางแผนที่จะใช้ WinRM ในซอฟต์แวร์รุ่นต่อๆ ไป ดังนั้นคุณอาจใช้ WinRM ผ่านแอปพลิเคชันอื่นอยู่แล้ว อย่างไรก็ตาม คุณสามารถใช้ส่วนประกอบนี้ด้วยตนเองได้โดยใช้คำสั่ง winrm.cmd- ด้วยเครื่องมือ CLI นี้ คุณสามารถดึงข้อมูลจากฐานข้อมูล WMI สำหรับงานใดๆ ที่คุณแก้ไขได้อย่างง่ายดาย

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

รูปที่ 1: ตัวเลือกบรรทัดคำสั่ง WinRM

จะเปิดใช้งานและใช้ WinRM ได้อย่างไร?

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

winrm ระบุ winrm/config/listener

หากคุณไม่ได้รับการตอบกลับ แสดงว่า WinRM ไม่ได้ทำงานอยู่ หากต้องการกำหนดค่า WinRM ให้เริ่มทำงานโดยอัตโนมัติและอนุญาตการเข้าถึงระยะไกล ให้ใช้คำสั่ง winrm กำหนดค่าด่วน, ตัวอย่างเช่น:

C:\ผู้ใช้\ผู้ดูแลระบบ> winrm กำหนดค่าด่วน WinRM ไม่ได้ถูกตั้งค่าให้อนุญาตการเข้าถึงเครื่องนี้จากระยะไกลเพื่อการจัดการต้องทำการเปลี่ยนแปลงต่อไปนี้:สร้าง WinRM Listener บน HTTP://* เพื่อยอมรับคำขอ WS-Man ไปยัง IP ใดๆ บนเครื่องนี้ทำการเปลี่ยนแปลงเหล่านี้หรือไม่? WinRM ได้รับการอัปเดตสำหรับการจัดการระยะไกลสร้าง WinRM Listener บน HTTP://* เพื่อยอมรับคำขอ WS-Man ไปยัง IP ใดๆ บนเครื่องนี้C:\ผู้ใช้\ผู้ดูแลระบบ>หลังจากตั้งค่า Quickconfig ฉันรันคำสั่งการแจงนับอีกครั้งด้วยผลลัพธ์ต่อไปนี้: C:\ผู้ใช้\ผู้ดูแลระบบ> winrm และ winrm/config/listener ผู้ฟังที่อยู่ = *การขนส่ง = HTTPพอร์ต = 80ชื่อโฮสต์เปิดใช้งาน = จริงURLPrefix = wsmanใบรับรองลายนิ้วมือกำลังฟัง = 10.253.15.98, 127.0.0.1, ::1, fe80::5efe:10.253.15.98%11, fe80::9583:2148:e1ef:6444%10C:\ผู้ใช้\ผู้ดูแลระบบ>

ตอนนี้ฉันรู้แล้วว่า WinRM เปิดใช้งานอยู่

อย่างไรก็ตามหากคุณต้องการปิดการใช้งาน WinRM คุณต้องใช้คำสั่งนี้:

winrm ลบ winrm/config/listener?IPAdress=*+Transport=HTTP

หากต้องการใช้ WinRM โหนดทั้งหมดที่สื่อสารกับ WinRM จะต้องเป็นสมาชิกของโดเมนเดียวกันกับโหนดที่ใช้งาน WinRM หากไม่เป็นเช่นนั้นในกรณีของคุณ ฉันขอแนะนำให้คุณทำความคุ้นเคยกับสถานการณ์ด้านความปลอดภัยต่างๆ ในบทความ 'การจัดการเซิร์ฟเวอร์คอร์ของคุณจากระยะไกลโดยใช้ WinRM และ WinRS'

WinRS คืออะไร และใช้งานอย่างไร?

WinRS เป็นตัวย่อสำหรับ Windows Remote Shell ด้วย WinRS คุณสามารถทำการสืบค้นระยะไกลไปยังเครื่อง Windows ที่ใช้ WinRM อย่างไรก็ตาม อย่าลืมว่าเครื่องของคุณจำเป็นต้องใช้ WinRM เพื่อทำงานกับ WinRS

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

รูปที่ 2: ตัวเลือกบรรทัดคำสั่ง WinRS

หนึ่งในวิธีทั่วไปในการใช้ WinRS คือการดำเนินการคำสั่งบนเครื่องระยะไกล แน่นอนว่าการสื่อสารนี้เกิดขึ้นโดยใช้โปรโตคอล HTTP (พอร์ต 80) (ค่าเริ่มต้น)

ด้านล่างนี้เป็นตัวอย่างการใช้ WinRS: ฉันรันคำสั่งบนโฮสต์ localhost ฉันรันสองคำสั่ง: ' ' เวอร์ชั่น' และ ' ผบ. C:- ในแต่ละกรณีได้รับข้อมูลตอบรับอย่างเพียงพอ

รูปที่ 3: การสาธิตคำสั่ง WinRS

ผลลัพธ์

WinRM และ WinRS เป็นเครื่องมือใหม่ที่ทรงพลังมากซึ่งผู้ดูแลระบบ Windows ควรเรียนรู้ คิดถึงความเป็นไปได้ของการควบคุมระยะไกลด้วย WinRM/WinRS! คุณสามารถติดตั้งโปรแกรม เปลี่ยนการตั้งค่า แก้ไขปัญหาได้ (แน่นอน หากปัญหาไม่ได้อยู่ที่การสื่อสารผ่านเครือข่าย) คุณสามารถไปต่อและเชื่อมต่อ WinRS ด้วยสคริปต์เพื่อทำงานเหล่านี้บนคอมพิวเตอร์หลายเครื่อง นอกจากนี้ โปรดจำไว้ว่าไม่ว่าคุณจะใช้เครื่องมือเหล่านี้หรือไม่ก็ตาม ซอฟต์แวร์การจัดการระบบของคุณจะใช้งานไม่ทางใดก็ทางหนึ่งในไม่ช้า

www.windowsnetworking.com


ดูสิ่งนี้ด้วย:

ความคิดเห็นของผู้อ่าน (ไม่มีความคิดเห็น)

แลกเปลี่ยน 2550

หากคุณต้องการอ่านส่วนก่อนหน้าของชุดบทความนี้ โปรดไปที่ลิงก์: Monitoring Exchange 2007 โดยใช้ System Manager...

บทนำ ในบทความที่มีหลายส่วนนี้ ฉันต้องการแสดงให้คุณเห็นกระบวนการที่ฉันเพิ่งใช้ในการโยกย้ายจากสภาพแวดล้อม Exchange 2003 ที่มีอยู่...

หากคุณพลาดส่วนแรกของซีรีส์นี้ โปรดอ่านได้ที่การใช้เครื่องมือวิเคราะห์การเชื่อมต่อระยะไกลของ Exchange Server (ส่วน...

หากคุณพลาดส่วนก่อนหน้าของชุดบทความนี้ ให้ไปที่การตรวจสอบ Exchange 2007 โดยใช้ System Center Operations Manager...

การจัดการ Windows ระยะไกลโดยใช้ WinRM

จริงๆ แล้ว วินอาร์เอ็ม(หรือ การจัดการระยะไกลของ Windows) และแปลว่า “การควบคุมระยะไกล” หน้าต่าง". วินอาร์เอ็ม– บริการการจัดการระยะไกลสำหรับระบบปฏิบัติการ หน้าต่าง- มันถูกรวมอยู่ในระบบปฏิบัติการตั้งแต่นั้นมา วิสตาและ เซิร์ฟเวอร์ 2008, สำหรับ วินโดวส์เอ็กซ์พีและ เซิร์ฟเวอร์ 2003จำเป็นต้องติดตั้งแยกต่างหากจากที่นี่ วินอาร์เอ็ม– ส่วนเซิร์ฟเวอร์ของแอปพลิเคชันการควบคุมระยะไกล ซึ่งสามารถเชื่อมต่อระยะไกลโดยใช้ไคลเอนต์ได้ เชลล์ระยะไกลของ Windows (WinRS)

วินอาร์เอ็มการบริการเป็นหลัก บริการเว็บเพื่อการจัดการ (WS-การจัดการ)และใช้คำขอ HTTP (พอร์ต 80) หรือ HTTPS (443) และ SOAP เพื่อให้งานสำเร็จลุล่วง ไม่ว่าโปรโตคอลที่ใช้จะเป็นอย่างไรก็ตาม ทราฟฟิกทั้งหมดจะถูกส่งไป วินอาร์เอ็มได้รับการเข้ารหัส (เว้นแต่คุณจะปิดใช้งานตัวเลือกนี้โดยเฉพาะ) โปรโตคอลการตรวจสอบความถูกต้องเริ่มต้นคือ เคอร์เบรอส.

ใน วินโดวส์เซิร์ฟเวอร์ 2008 วินอาร์เอ็มติดตั้งแล้ว แต่ (ด้วยเหตุผลด้านความปลอดภัย) ไม่ได้เปิดใช้งานตามค่าเริ่มต้น เพื่อตรวจสอบว่ากำลังทำงานอยู่หรือไม่ วินอาร์เอ็มบนเครื่องของเรา ให้พิมพ์ command line winrm ระบุ winrm/config/listener

หากไม่มีคำตอบแล้ว วินอาร์เอ็มไม่ได้ทำงาน. เพื่อที่จะตั้งค่า วินอาร์เอ็มเพื่อเริ่มต้นโดยอัตโนมัติและอนุญาตการเชื่อมต่อระยะไกลกับคอมพิวเตอร์ ให้พิมพ์คำสั่ง winrm กำหนดค่าด่วนหรือ วินอาร์ม คิวซี

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

ปิดมันซะ วินอาร์เอ็มคุณสามารถใช้คำสั่งนี้:
winrm ลบ winrm/config/listener?IPAdress=*+Transport=HTTP

นอกจากนี้ การตั้งค่าที่จำเป็นทั้งหมดสามารถทำได้โดยใช้นโยบายกลุ่ม ในการทำเช่นนี้คุณต้องมี:

  • ตั้งค่าบริการ วินอาร์เอ็มเพื่อเริ่มอัตโนมัติ
  • อนุญาตการเชื่อมต่อกับพอร์ตที่เหมาะสม (80 และ 443) ในไฟร์วอลล์ หน้าต่าง
  • กำหนดค่ารายการนโยบายกลุ่ม คอมพิวเตอร์ Configuration\Administrative Templates\Windows Components\Windows Remote Management\Windows Remote Management\Allow การติดตั้งอัตโนมัติของ Listener (คอมพิวเตอร์ Configuration\Administrative Templates\Windows Components\Windows Remote Management\WinRM Service\Allow การกำหนดค่าอัตโนมัติของผู้ฟัง)- ที่นี่คุณจะต้องระบุที่อยู่ IP ที่อนุญาตการเชื่อมต่อ

ตอนนี้เรามาดูการใช้งานกันดีกว่า ในการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลเราใช้ยูทิลิตี้นี้ วินอาร์เอส. วินอาร์เอส– อักษรย่อสำหรับ เชลล์ระยะไกลของ Windows(สภาพแวดล้อมที่ห่างไกล หน้าต่าง- กับ วินอาร์เอสเราสามารถส่งคำขอระยะไกลไปยังคอมพิวเตอร์ที่ทำงานอยู่ได้ วินอาร์เอ็ม- อย่างไรก็ตาม โปรดทราบว่าเครื่องของคุณยังต้องทำงานอยู่ด้วย วินอาร์เอ็มที่จะทำงานร่วมกับ วินอาร์เอส.

วิธีการใช้งานหลักๆ วินอาร์เอสคือการดำเนินการคำสั่งบนเครื่องระยะไกล ชื่อคอมพิวเตอร์ถูกระบุโดยคีย์ -รตามด้วยคำสั่งให้ดำเนินการ เป็นต้น ผู้ชนะ: เอสอาร์วี2 ไอพีคอนฟิก / ทั้งหมดทำงานบนคอมพิวเตอร์ระยะไกล เอสอาร์วี2ทีม ไอพีคอนฟิก/ทั้งหมด

โปรโตคอลเริ่มต้นสำหรับการสื่อสารคือ httpแต่คุณยังสามารถใช้ https: winrs -r:https://SRV2 ipconfig /all

คุณยังสามารถใช้ วินอาร์เอสเปิดเซสชันแบบโต้ตอบบนคอมพิวเตอร์ระยะไกล: winrs -r:SRV2 cmd.exe

ฟังก์ชั่นนี้คล้ายกับการเชื่อมต่อผ่าน เทลเน็ตแต่ใช้ วินอาร์เอสดีกว่าอย่างแน่นอนจากมุมมองด้านความปลอดภัย

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

« จริง")

« »}

WinRM ตั้งค่า winrm/config/client @(TrustedHosts= « ชื่อคอมพิวเตอร์" }

โดยที่ ComputerName คือคอมพิวเตอร์ระยะไกลที่จะทำการเชื่อมต่อ

บนคอมพิวเตอร์ที่เราจะเชื่อมต่อ ให้ป้อน:

WinRM ตั้งค่า winrm/config/service/auth @(Basic= « จริง")

WinRM ตั้งค่า winrm/config/client @(TrustedHosts= « »}

WinRM ตั้งค่า winrm/config/client @(TrustedHosts="ชื่อคอมพิวเตอร์" }

โดยที่ ComputerName คือคอมพิวเตอร์ที่เราจะจัดการ

จากนั้นเราสร้างการเชื่อมต่อโดยใช้คำสั่ง:

ผู้ชนะ -r:"ชื่อคอมพิวเตอร์" : -ยู:โดเมน\ชื่อผู้ใช้ –พี:รหัสผ่าน cmd.exe

โดยที่ Domain\Username คือบัญชีผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลระบบบนคอมพิวเตอร์ระยะไกล

ฉันเคยมีปัญหากับ WinRM บนเซิร์ฟเวอร์สองเครื่อง

1. เซ็ตเอสพีเอ็น
ประการหนึ่ง ปัญหาคือ SPN ของ HTTP/<имя сервера>ได้รับการลงทะเบียนสำหรับบัญชีผู้ใช้ที่ "ผิด" บางบัญชี

ฉันพบโพสต์เหล่านี้พร้อมคำสั่ง
setpn -F -Q */<имя сервера>

จากนั้นฉันก็ลบมันออกด้วยคำสั่ง
setpn -D http/<имя сервера>.<имя домена> <имя домена>\<левая учётная запись>
setpn -D http/<имя сервера> <имя домена>\<левая учётная запись>

จากนั้นเปิดใช้งาน-psremoting -force เสร็จสมบูรณ์

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

WinRm QuickConfig
บริการ WinRM กำลังทำงานอยู่บนเครื่องนี้แล้ว
WSManFault
ข้อความ
ข้อผิดพลาดของผู้ให้บริการ
WSManFault
ข้อความ = ไม่สามารถตรวจสอบสถานะของไฟร์วอลล์ได้

หมายเลขข้อผิดพลาด: -2147024894 0x80070002
ระบบไม่พบแฟ้มที่ระบุ.

การตอบสนองระบุว่าข้อผิดพลาดนี้สามารถแก้ไขได้โดยการลบชุดภาษาเพิ่มเติม
แต่ฉันทำมันแตกต่างออกไป ฉันมีระบบปฏิบัติการภาษาอังกฤษพร้อมแพ็กภาษารัสเซียเพิ่มเติม ฉันเพิ่งเปลี่ยนภาษาอินเทอร์เฟซเป็นภาษารัสเซีย
แผงควบคุม ตัวเลือกภูมิภาคและภาษา ภาษาและคีย์บอร์ด เปลี่ยนภาษาอินเทอร์เฟซจากภาษาอังกฤษเป็นภาษารัสเซีย
ฉันออกจากระบบและเข้าสู่ระบบอีกครั้ง เปิด PowerShell และ WinRm QuickConfig ซ้ำ

PS C:\Windows\system32> winrm qc

บริการ WinRM ไม่ได้รับการกำหนดค่าให้อนุญาตการควบคุมระยะไกลของคอมพิวเตอร์
จำเป็นต้องทำการเปลี่ยนแปลงต่อไปนี้:

สร้าง WinRM Listener บน HTTP://* เพื่อยอมรับคำขอ WS-Man บนที่อยู่ IP ของคอมพิวเตอร์เครื่องนี้

ทำการเปลี่ยนแปลง? ย

บริการ WinRM ได้รับการอัปเดตสำหรับการจัดการระยะไกล

สร้าง WinRM Listener บน HTTP://* เพื่อยอมรับคำขอ WS-Man บนที่อยู่ IP ของคอมพิวเตอร์เครื่องนี้

สำเร็จแต่ก็ยังไม่เพียงพอ

เกิดข้อผิดพลาด Access Denied ปรากฏขึ้นเมื่อพยายามดำเนินการคำสั่งจากระยะไกลบนเซิร์ฟเวอร์นี้จากคอมพิวเตอร์เครื่องอื่น

ใหม่ PSSession: [<имя сервера>] กำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล<имя сервера>ล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้: การเข้าถึงถูกปฏิเสธ สำหรับข้อมูลเพิ่มเติม โปรดดูหัวข้อวิธีใช้ about_Remote_Troubleshooting

จากนั้นฉันก็เปิดใช้งาน-PsRemoting ซ้ำ

PS C:\Windows\system32> เปิดใช้งาน-PsRemoting

WinRM การตั้งค่าด่วน
เรียกใช้คำสั่ง Set-WSManQuickConfig เพื่อเปิดใช้งานการจัดการระยะไกลโดยใช้บริการ WinRM บนคอมพิวเตอร์เครื่องนี้
การดำเนินการที่จำเป็น
1. เริ่มหรือรีสตาร์ท (หากทำงานอยู่แล้ว) บริการ WinRM
2. การเปลี่ยนประเภทบริการ WinRM เป็น "เริ่มอัตโนมัติ"
3. สร้างผู้ฟังเพื่อยอมรับคำขอที่อยู่ IP ใด ๆ
4. กำหนดค่าข้อยกเว้นไฟร์วอลล์สำหรับการรับส่งข้อมูลบริการ WS-Management (โปรโตคอล http เท่านั้น)

ดำเนินการต่อ?

(ค่าเริ่มต้นคือ "Y"):a
บริการ WinRM ได้รับการกำหนดค่าให้ยอมรับคำขอบนคอมพิวเตอร์แล้ว
บริการ WinRM ได้รับการกำหนดค่าให้อนุญาตการควบคุมระยะไกลของคอมพิวเตอร์แล้ว

การยืนยัน
คุณแน่ใจหรือไม่ว่าต้องการดำเนินการนี้
ดำเนินการ "ลงทะเบียนการกำหนดค่าเซสชัน" บนออบเจ็กต์เป้าหมาย "การกำหนดค่าเซสชัน"
ไม่พบ "Microsoft.PowerShell32" คำสั่ง "Register-PSSessionConfiguration Microsoft.PowerShell32" จะถูกดำเนินการ
-processorarchitecture x86 -force" เพื่อสร้างการกำหนดค่าเซสชัน "Microsoft.PowerShell32" บริการ WinRM จะ
เริ่มต้นใหม่แล้ว"
[Y] ใช่ - Y [A] ใช่สำหรับทุกคน - A [N] ไม่ใช่ - N [L] ไม่ใช่สำหรับทุกคน - L [S] ระงับ - S [?] ช่วยเหลือ
(ค่าเริ่มต้นคือ "Y"):a

หลังจากนั้น WinRM ก็ทำงานได้ตามปกติบนเซิร์ฟเวอร์นี้

17/10/2554 ดอนโจนส์

ฉันรู้ว่าผู้สร้าง PowerShell ขี้เกียจนิดหน่อย และนั่นก็เป็นสิ่งที่ดี พวกเขาไม่ต้องการโค้ดพารามิเตอร์ -ComputerName สำหรับทุกคำสั่ง ดังนั้นพวกเขาจึงสร้างระบบทั่วไปที่เรียกว่า "ระยะไกล" โดยพื้นฐานแล้ว ระบบนี้จะทำให้คำสั่งใดๆ ทำงานบนคอมพิวเตอร์ระยะไกลได้ คุณยังสามารถเรียกใช้คำสั่งต่างๆ ที่มีอยู่ในคอมพิวเตอร์ระยะไกล แต่ไม่มีอยู่ในคอมพิวเตอร์ของคุณได้ ซึ่งหมายความว่าคุณไม่จำเป็นต้องติดตั้งทุกคำสั่งบนเวิร์กสเตชันของคุณอย่างต่อเนื่อง ระบบระยะไกลนี้มีประสิทธิภาพมากและมีคุณสมบัติการดูแลระบบที่น่าสนใจมากมาย

เมื่อฉันเริ่มใช้ PowerShell ฉันเริ่มสนใจคำสั่ง Get-Service และสังเกตเห็นว่ามีพารามิเตอร์ -ComputerName นี่ไม่ได้หมายความว่าคุณสามารถเชื่อมต่อบริการจากคอมพิวเตอร์เครื่องอื่นได้ใช่ไหม หลังจากทำการทดลองมาหลายครั้ง ฉันพบว่านี่คือสิ่งที่กล่าวไว้จริงๆ ฉันสนใจและเริ่มค้นหาพารามิเตอร์ -ComputerName จากคำสั่งอื่น และฉันรู้สึกเสียใจเมื่อพบว่ามีเพียงไม่กี่คนเท่านั้น

PowerShell มีการควบคุมระยะไกลสองประเภท: ระยะไกลแบบหนึ่งต่อหนึ่ง (1:1) และระยะไกลแบบหนึ่งต่อกลุ่ม (1:n) ก่อนที่ฉันจะพูดถึงสิ่งเหล่านี้ ฉันอยากจะอธิบายพื้นฐานบางอย่างก่อน

ข้อมูลพื้นฐานเกี่ยวกับระยะไกลใน PowerShell

การควบคุมระยะไกลของ PowerShell ทำงานเหมือนกับ Telnet และเทคโนโลยีการควบคุมระยะไกลแบบเก่าอื่นๆ เมื่อคุณรันคำสั่ง คำสั่งนั้นจะรันบนคอมพิวเตอร์ระยะไกลจริงๆ ทุกสิ่งที่ส่งคืนไปยังคอมพิวเตอร์ของคุณเป็นผลมาจากคำสั่งนี้ PowerShell ต่างจาก Telnet หรือ Secure Shell (SSH) ตรงที่ใช้โปรโตคอลระบบการสื่อสารใหม่ที่เรียกว่า Web Services for Management (WS-Management) โปรโตคอลทำงานบน HTTP หรือ HTTP Secure (HTTPS) ซึ่งทำให้ง่ายต่อการกำหนดเส้นทางผ่านไฟร์วอลล์หากจำเป็น เนื่องจากโปรโตคอลใช้พอร์ตเดียวเพื่อสร้างการสื่อสาร การใช้งาน WS-Management ของ Microsoft มาในรูปแบบของบริการพื้นหลังที่เรียกว่า Windows Remote Management WinRM ได้รับการติดตั้งมาพร้อมกับ PowerShell 2.0 และทำงานตามค่าเริ่มต้นบนเซิร์ฟเวอร์เช่น Windows Server 2008 R2 บน Windows 7 จะมีการติดตั้งตามค่าเริ่มต้น แต่ไม่ได้เปิดใช้งาน คุณต้องเปิดใช้งาน WinRM บนคอมพิวเตอร์ที่คุณต้องการส่งคำสั่ง คอมพิวเตอร์ที่คุณอยู่ข้างหลังไม่จำเป็นต้องเรียกใช้บริการ WinRM

คำสั่ง PowerShell ทั้งหมดสร้างวัตถุเป็นเอาต์พุต เมื่อคุณรันคำสั่งจากระยะไกล ผลลัพธ์จะต้องอยู่ในรูปแบบที่สามารถส่งผ่านเครือข่ายได้อย่างง่ายดายโดยใช้ HTTP หรือ HTTPS ตัวอย่างเช่น PowerShell จะแปลงออบเจ็กต์เอาต์พุตเป็นไฟล์ XML ที่ส่งผ่านเครือข่ายโดยอัตโนมัติ เมื่อเข้าถึงคอมพิวเตอร์ของคุณแล้ว พวกเขาจะถูกแปลงกลับเป็นออบเจ็กต์ที่ PowerShell สามารถใช้งานได้ อย่างไรก็ตาม วัตถุที่แปลงกลับเหล่านี้เป็นสแน็ปช็อตจริงๆ พวกเขาไม่สามารถอัพเดตตัวเองทุกนาทีได้ ดังนั้น หากคุณต้องเข้าถึงออบเจ็กต์ที่แสดงถึงกระบวนการที่ทำงานบนคอมพิวเตอร์ระยะไกล ผลลัพธ์ที่ได้จะเป็นจริงในช่วงเวลาที่กำหนดซึ่งออบเจ็กต์เหล่านี้ถูกสร้างขึ้นเท่านั้น ค่าเช่นหน่วยความจำและการใช้งาน CPU จะไม่เปลี่ยนแปลง ยิ่งไปกว่านั้น คุณจะไม่สามารถบังคับวัตถุที่แปลงกลับไปทำอะไรได้อีก ตัวอย่างเช่น คุณไม่สามารถสั่งให้วัตถุหยุดตัวเองได้ นี่เป็นข้อจำกัดที่สำคัญของการทำงานร่วมกันจากระยะไกล แต่จะไม่ทำให้คุณหยุดทำงานและทำสิ่งที่น่าสนใจ

มีข้อกำหนดพื้นฐานเพียงไม่กี่ประการในการใช้ระบบระยะไกล

  • คอมพิวเตอร์ของคุณ (หรือคอมพิวเตอร์ในระบบ) และคอมพิวเตอร์ที่คุณต้องการส่งคำสั่งไป (หรือคอมพิวเตอร์ระยะไกล) ทำงานร่วมกับ Windows PowerShell 2.0 ได้อย่างไร Windows XP เป็น Windows เวอร์ชันดั้งเดิมซึ่งคุณสามารถติดตั้ง PowerShell 2.0 ได้ ดังนั้นเวอร์ชันเก่าจึงสามารถเข้าร่วมในเซสชันระยะไกลได้
  • ตามหลักการแล้ว คอมพิวเตอร์ท้องถิ่นและระยะไกลควรเป็นสมาชิกของโดเมนเดียวกันหรือสมาชิกของโดเมนที่เชื่อถือได้/เชื่อถือได้ คุณสามารถทำงานกับระบบระยะไกลนอกโดเมนได้ แต่มันยาก และฉันจะไม่พูดถึงมันที่นี่ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสถานการณ์นี้ ดูหัวข้อวิธีใช้ PowerShell เกี่ยวกับ Remote_Troubleshooting

รีวิว WinRM

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

ไม่ได้หมายความว่า WinRM เป็นสิ่งที่พิเศษสำหรับ PowerShell WinRM สามารถกำหนดเส้นทางการรับส่งข้อมูลไปยังแอปพลิเคชันการดูแลระบบหลายรายการ โดยพื้นฐานแล้ว WinRM ทำหน้าที่เป็นผู้มอบหมายงาน เมื่อการรับส่งข้อมูลมาถึง WinRM จะตัดสินใจว่าแอปพลิเคชันใดควรโต้ตอบกับมันและแท็กด้วยชื่อของแอปพลิเคชันปลายทาง แอปพลิเคชันที่ได้รับจะต้องลงทะเบียนกับ WinRM เพื่อให้ WinRM สามารถรับฟังการรับส่งข้อมูลที่เข้ามาในนามของมัน กล่าวอีกนัยหนึ่ง คุณไม่เพียงแต่ต้องเปิดใช้งาน WinRM เท่านั้น แต่ยังต้องลงทะเบียน Power Shell เป็นจุดสิ้นสุดสำหรับ WinRM อีกด้วย

วิธีที่ง่ายที่สุดในการทำงานทั้งสองอย่างให้สำเร็จคือการเรียกใช้ PowerShell ในฐานะผู้ดูแลระบบ และเรียกใช้คำสั่ง Enable-PSRemoting คุณสามารถดูคู่มือสำหรับคำสั่งอื่นที่เรียกว่า Set-WSManQuickConfig ไม่จำเป็นต้องรันคำสั่ง Enable-PSRemoting จะทำสิ่งนี้ให้กับคุณ และยังดำเนินการขั้นตอนอื่นๆ อีกหลายขั้นตอนที่จำเป็นในการสร้างการสื่อสารและการทำงานระยะไกลอีกด้วย โดยพื้นฐานแล้ว คำสั่ง Enable-PSRemoting จะเริ่มต้นบริการ WinRM กำหนดค่าให้เริ่มโดยอัตโนมัติ ลงทะเบียน PowerShell เป็นจุดสิ้นสุด และแม้แต่ตั้งค่าข้อยกเว้นในไฟร์วอลล์ Windows เพื่ออนุญาตการรับส่งข้อมูล WinRM ขาเข้า

หากคุณไม่ต้องการใช้คอมพิวเตอร์ทุกเครื่องเพื่อเปิดใช้งานระยะไกล คุณสามารถใช้ Group Policy Object (GPO) ได้ การตั้งค่า GPO ที่จำเป็นมีอยู่ในตัวควบคุมโดเมน Windows Server 2008 R2 เพียงเปิด GPO แล้วไปที่เส้นทาง Computer Configuration\

เทมเพลตการดูแลระบบ\คอมโพเนนต์ของ Windows ที่ด้านล่างของรายการคุณจะพบการตั้งค่าทั้ง Remote Shell และ Windows Remote Management (WRM) ที่คุณต้องกำหนดค่า ส่วนวิธีใช้เกี่ยวกับปัญหาระบบการสื่อสารระยะไกล (Remote_Troubleshooting) จะให้คำแนะนำโดยละเอียดเกี่ยวกับวิธีการดำเนินการนี้ ทบทวนวิธีการเปิดใช้งาน Remoteting ในองค์กรและวิธีเปิดใช้งาน Listeners โดยใช้ส่วนนโยบายกลุ่มในวิธีใช้

WinRM 2.0 (ซึ่ง PowerShell ใช้) ตามค่าเริ่มต้นจะใช้พอร์ต TCP 5985 สำหรับ HTTP และพอร์ต 5986 สำหรับ HTTPS สิ่งนี้ทำให้แน่ใจได้ว่า WinRM จะไม่ขัดแย้งกับเว็บเซิร์ฟเวอร์ที่ติดตั้งในเครื่องซึ่งกำหนดค่าให้ฟังบนพอร์ต 80 และ 443 คุณสามารถกำหนดค่า WinRM ให้ใช้พอร์ตอื่นได้ แต่ฉันไม่แนะนำสิ่งนี้ หากคุณออกจากพอร์ตเหล่านี้ คำสั่งการเข้าถึงระยะไกลของ PowerShell ทั้งหมดจะทำงานได้ดี หากคุณเปลี่ยนพอร์ตเหล่านี้ คุณจะต้องระบุพอร์ตสำรองเสมอเมื่อรันคำสั่งการเข้าถึงระยะไกล ซึ่งหมายความว่าคุณจะต้องพิมพ์เพิ่มเติม หากคุณต้องการเปลี่ยนพอร์ตจริงๆ คุณสามารถป้อนคำสั่ง:

Winrm ตั้งค่า winrm/config/ Listener? ที่อยู่=* +การขนส่ง=HTTP @(พอร์ต="1234")

หมายเลข 1234 ระบุพอร์ตที่คุณต้องการ ที่นี่คำสั่งนี้เขียนเป็นหลายบรรทัด แต่คุณต้องป้อนลงในบรรทัดเดียว เช่นเดียวกับคำสั่งอื่นๆ ทั้งหมดที่อธิบายไว้ในบทความ หากคุณต้องการใช้ HTTPS แทน http คุณสามารถแก้ไขคำสั่งนี้เพื่อกำหนดค่าพอร์ต HTTPS ใหม่ได้ ฉันต้องยอมรับว่ามีวิธีกำหนดการตั้งค่า WinRM บนคอมพิวเตอร์ในระบบเพื่อใช้พอร์ตอื่นตามค่าเริ่มต้น ด้วยวิธีนี้ คุณไม่จำเป็นต้องกำหนดพอร์ตอื่นอย่างต่อเนื่องเมื่อคุณรันคำสั่งการเข้าถึงระยะไกล แต่มาทำงานกับการตั้งค่าเริ่มต้นที่ Microsoft กำหนดไว้

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

การโต้ตอบระยะไกล 1:1

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

หากต้องการสร้างการเชื่อมต่อ 1:1 กับคอมพิวเตอร์ระยะไกลชื่อ Server-R2 คุณต้องดำเนินการ

ป้อน PSSession - ชื่อคอมพิวเตอร์เซิร์ฟเวอร์-R2

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

ป.ล.:\>

ส่วนนี้จะแจ้งให้คุณทราบว่าทุกสิ่งที่คุณทำเกิดขึ้นบน Server-R2 หลังจากนี้คุณสามารถรันคำสั่งใดก็ได้ที่คุณต้องการ คุณยังสามารถนำเข้าโมดูลใดๆ และเพิ่มส่วนขยาย PowerShell (PSSnapins) ที่จะอยู่บนคอมพิวเตอร์ระยะไกลได้

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

  • หากคุณมีสคริปต์ PowerShell สำหรับโปรไฟล์ของคุณบนคอมพิวเตอร์ระยะไกล สคริปต์นั้นจะไม่ทำงานเมื่อคุณเชื่อมต่อโดยใช้ระบบการเข้าถึงระยะไกล พูดง่ายๆ ก็คือ โปรไฟล์คือชุดคำสั่งที่ทำงานโดยอัตโนมัติทุกครั้งที่คุณเปิดหน้าต่างพร้อมรับคำสั่ง ใช้เพื่อดาวน์โหลดส่วนขยาย โมดูล และอื่นๆ โดยอัตโนมัติ
  • คุณถูกจำกัดโดยนโยบายการดำเนินการของคอมพิวเตอร์ระยะไกล สมมติว่านโยบายคอมพิวเตอร์ของคุณได้รับการตั้งค่าเป็น RemoteSigned เพื่อให้คุณสามารถเรียกใช้สคริปต์ที่ไม่ได้ลงนามในเครื่องได้ หากนโยบายคอมพิวเตอร์ระยะไกลถูกตั้งค่าเป็นจำกัด (การตั้งค่าเริ่มต้น) จะไม่อนุญาตให้สคริปต์ใดๆ ทำงานเมื่อคุณสื่อสารจากระยะไกล

คำสั่ง PowerShell หลายคำสั่งมาคู่กัน: คำสั่งหนึ่งทำบางอย่าง อีกคำสั่งหนึ่งทำตรงกันข้าม ในกรณีของเรา Enter-PSSession จะเชื่อมต่อคุณกับคอมพิวเตอร์ระยะไกล และ Exit-PSSession จะปิดการเชื่อมต่อนั้น Exit-PSSession ไม่ต้องการพารามิเตอร์ใดๆ เมื่อเปิดใช้งานแล้ว การเชื่อมต่อระยะไกลจะถูกปิด และหน้าต่างพร้อมรับคำสั่งของคุณจะกลับมาเป็นปกติ จะเกิดอะไรขึ้นถ้าคุณลืมเรียกใช้ Exit-PSSession ไม่ต้องกังวล. PowerShell และ WinRM สามารถทราบสิ่งที่คุณทำและปิดการเชื่อมต่อระยะไกลหากจำเป็น

ผมอยากจะให้คำแนะนำอย่างหนึ่ง เมื่อคุณเชื่อมต่อกับคอมพิวเตอร์ระยะไกล อย่าเรียกใช้ Enter-PSSession บนเครื่องนั้นจนกว่าคุณจะทราบแน่ชัดว่าคุณกำลังทำอะไรอยู่ ตัวอย่างเช่น คุณทำงานที่ ComputerA คุณเชื่อมต่อกับเซิร์ฟเวอร์-R2 บนบรรทัด PowerShell คุณรัน

PS C:\>ป้อน-PSSession Server-DC4

ขณะนี้ Server-R2 มีการเชื่อมต่อแบบเปิดไปยัง Server-DC4 สิ่งนี้จะสร้าง "ห่วงโซ่ระยะไกล" ที่ยากต่อการติดตาม นอกจากนี้ เซิร์ฟเวอร์ของคุณมีการใช้งานมากเกินไปโดยไม่จำเป็น อาจมีบางครั้งที่คุณต้องทำเช่นนี้ (เช่น Server-DC4 อยู่หลังไฟร์วอลล์และคุณไม่สามารถเข้าถึงได้โดยตรง ดังนั้นคุณจึงจำเป็นต้องใช้ Server-R2 เป็นตัวกลาง) อย่างไรก็ตาม กฎทั่วไปคือ: พยายามหลีกเลี่ยงการใช้โซ่ระยะไกล

1:n ระยะไกล

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

เรียกใช้คำสั่ง - ชื่อคอมพิวเตอร์เซิร์ฟเวอร์-R2, เซิร์ฟเวอร์-DC4, Server12 - คำสั่ง (รับ-EventLog Security - ใหม่ที่สุด 200 | โดยที่ ($_.EventID -eq 1212))

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

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

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

ตอนนี้เรามาดูพารามิเตอร์ชื่อคอมพิวเตอร์กันดีกว่า ในโค้ดตัวอย่าง Invivo-Command ฉันมีรายการชื่อคอมพิวเตอร์ที่คั่นด้วยเครื่องหมายจุลภาค หากคุณมีคอมพิวเตอร์หลายเครื่อง คุณอาจไม่ต้องการพิมพ์ชื่อทุกครั้งที่เชื่อมต่อ แต่คุณสามารถสร้างไฟล์ข้อความที่มีชื่อคอมพิวเตอร์หนึ่งชื่อในบรรทัดเดียว โดยไม่ต้องใช้เครื่องหมายจุลภาค เครื่องหมายคำพูด หรือสิ่งอื่นใด ตัวอย่างเช่น หากไฟล์ข้อความของคุณชื่อ webservers.txt คุณจะใช้โค้ดดังนี้:

เรียกใช้คำสั่ง -Command ( dir ) - ชื่อคอมพิวเตอร์ (รับเนื้อหา webservers.txt)

วงเล็บบังคับให้ PowerShell ดำเนินการคำสั่ง Get-Content ก่อน ซึ่งคล้ายกับวิธีการทำงานของวงเล็บในทางคณิตศาสตร์ ผลลัพธ์ของ Get-Content จะซ้อนอยู่ภายในพารามิเตอร์ -ComputerName

นอกจากนี้ยังสามารถสืบค้นชื่อคอมพิวเตอร์ใน Active Directory ได้ แต่จะซับซ้อนกว่า หากต้องการค้นหาคอมพิวเตอร์ คุณสามารถใช้คำสั่ง Get-ADComputer แต่คุณจะไม่ใส่คำสั่งไว้ในวงเล็บเหมือนที่คุณทำกับ Get-Content ทำไมจะไม่ล่ะ? Get-Content สร้างสตริงข้อความธรรมดา ในขณะที่ Get-ADComputer สร้างวัตถุประเภท "คอมพิวเตอร์" พารามิเตอร์ -ComputerName ต้องการสตริง ถ้าเขาต้องรับสิ่งของจากคอมพิวเตอร์ เขาก็ไม่รู้จะทำอย่างไรกับสิ่งเหล่านั้น ดังนั้นหากคุณต้องการใช้ Get-ADComputer คุณจะต้องรับค่าจากคุณสมบัติ Name ของออบเจ็กต์คอมพิวเตอร์ แบบนี้:

เรียกใช้คำสั่ง -Command (dir) - ชื่อคอมพิวเตอร์ (Get-ADComputer -Filter * -SearchBase "ou=Sales, dc=company, dc=pri" | Select-Object -Expand Name)

ในวงเล็บ วัตถุคอมพิวเตอร์จะถูกส่งผ่านไปยังคำสั่ง Select-Object และใช้พารามิเตอร์ -Expand เพื่อค้นหาคุณสมบัติ Name ของวัตถุคอมพิวเตอร์เหล่านี้ ผลลัพธ์ของนิพจน์ในวงเล็บคือชุดของชื่อคอมพิวเตอร์ ไม่ใช่วัตถุของคอมพิวเตอร์ ชื่อคอมพิวเตอร์คือสิ่งที่พารามิเตอร์ -ชื่อคอมพิวเตอร์ ต้องการ

หากคุณไม่คุ้นเคยกับ Get-ADComputer เรามาดูกันว่าคำสั่งนี้ทำอะไรได้บ้าง พารามิเตอร์ -Filter ระบุว่าควรรวมคอมพิวเตอร์ทุกเครื่องไว้ในผลลัพธ์ และพารามิเตอร์ -Search Base สั่งให้ PowerShell เริ่มค้นหาคอมพิวเตอร์ในกลุ่มองค์กรการขาย (OU) ในโดเมน company.pri คำสั่ง Get-ADComputer ใช้ได้เฉพาะใน Windows Server 2008 R2 และใน Windows 7 หลังจากติดตั้ง Remote Server Administration Tools บนระบบปฏิบัติการเหล่านี้คุณรัน

นำเข้าโมดูล ActiveDirectory

เพื่อโหลดคำสั่งบริการไดเรกทอรีลงในเชลล์คำสั่งเพื่อให้สามารถใช้งานได้

มีอย่างอื่นอีก!

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

หากต้องการสร้างเซสชันถาวร คุณต้องใช้คำสั่ง New-PSSession จากนั้นจัดเก็บไว้ในตัวแปรเพื่อให้เข้าถึงได้ง่าย ตัวอย่างเช่น รหัสต่อไปนี้จะสร้างเซสชันระยะไกลด้วยคอมพิวเตอร์สามเครื่องและจัดเก็บไว้ในตัวแปร $sessions:

$sessions = PSSession ใหม่ - ชื่อคอมพิวเตอร์หนึ่ง สอง สาม - พอร์ต 5555 - DOMAIN\Administrator ข้อมูลประจำตัว

เซสชันระยะไกลจะปิดโดยอัตโนมัติเมื่อคุณปิดเชลล์คำสั่ง แต่จนกว่าจะถึงตอนนั้นเซสชันอาจใช้หน่วยความจำและการใช้งาน CPU บางส่วนบนระบบภายในและระบบระยะไกล หากต้องการปิดให้ถูกต้อง คุณสามารถใช้คำสั่ง Remove-PSSession:

$เซสชัน | เอา-PSSession

เมื่อคุณต้องการเปิดเซสชันอีกครั้ง คุณสามารถใช้คำสั่ง Invoke-Command:

เรียกใช้คำสั่ง - คำสั่ง (dir) - เซสชัน $ เซสชัน

หรือคุณสามารถใช้ Enter-PSSession:

เข้าสู่ PSSession - เซสชัน $ เซสชัน

โปรดทราบว่าในโค้ด Enter-PSSession จะมีการเปิดเซสชันระยะไกลเพียงเซสชันเดียวเท่านั้น ตัวแปรดัชนี 1 บอก PowerShell ว่าควรเปิดเซสชันอีกครั้งด้วยคอมพิวเตอร์ชื่อ Two (ดัชนีเป็นแบบศูนย์)

ดังที่เราเห็นแล้วว่า PowerShell ระยะไกลมีประโยชน์มากมาย ถ้าใช้จะเห็นว่ามันจะขยายขอบเขตของคุณได้ขนาดไหน

ดอน โจนส์ ( [ป้องกันอีเมล]) เป็นผู้สอนด้านเทคนิคของ PowerShell (www.windowsitpro.com/go/DonJonesPowerShell) ผู้เขียนหนังสือมากกว่า 35 เล่ม มีชื่อ Microsoft MVP



ในบทความนี้ ฉันจะพยายามบอกคุณว่าคุณสามารถเปิดใช้งานและกำหนดค่าบริการ Windows Remote Management (WinRM) จากส่วนกลางบนคอมพิวเตอร์เป้าหมายทั้งหมดโดยใช้นโยบายกลุ่มได้อย่างไร ฉันขอเตือนคุณว่า Windows Remote Management เป็นบริการพิเศษที่ช่วยให้ผู้ดูแลระบบสามารถเข้าถึงและจัดการระบบปฏิบัติการ Windows ไคลเอนต์และเซิร์ฟเวอร์จากระยะไกลได้ (และฉันคิดว่าหากคุณเคยใช้ชุดยูทิลิตี้ Microsoft Sysinternals มาก่อนคุณควรจะชอบ WRM)
ลองใช้พีซีทั่วไปและไม่ได้เปิดใช้งานฟังก์ชัน Windows Remote Management ที่บรรทัดคำสั่ง ให้ป้อนคำสั่งต่อไปนี้:


คุณควรเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ระบุว่าไม่ได้ติดตั้ง WRM:
ข้อผิดพลาด WSMan ไคลเอ็นต์ไม่สามารถเชื่อมต่อกับปลายทางที่ระบุในคำขอได้ หมายเลขข้อผิดพลาด: - 2144108526 0x80338012

หากคุณต้องการกำหนดค่า WinRM ด้วยตนเองบนระบบแยกต่างหาก เพียงพิมพ์คำสั่ง:

Winrm กำหนดค่าด่วน

หากคุณต้องการกำหนดค่า WinRM ในกลุ่มคอมพิวเตอร์ คุณสามารถใช้การตั้งค่า Group Policy พิเศษได้ นโยบายที่เราสนใจอยู่ในส่วน: การกำหนดค่าคอมพิวเตอร์ -> นโยบาย -> ส่วนประกอบของ Windows -> การจัดการระยะไกลของ Windows (WinRM) -> บริการ WinRM จำเป็นต้องเปิดใช้งานพารามิเตอร์ต่อไปนี้:
อนุญาตการกำหนดค่า Listeners โดยอัตโนมัติ
อนุญาตการรับรองความถูกต้องขั้นพื้นฐาน


ในส่วนตัวกรอง IPv4 เราระบุ * ซึ่งหมายความว่าคอมพิวเตอร์สามารถรับการเชื่อมต่อ (และควบคุมคำสั่ง) ได้จากทุกที่ ซึ่งหมายความว่าผู้ฟังบนคอมพิวเตอร์จะยอมรับคำขอบนอินเทอร์เฟซ IP ทั้งหมด


จากนั้นในส่วนการกำหนดค่าคอมพิวเตอร์ -> นโยบาย -> ส่วนประกอบของ Windows -> Windows Remote Shell ให้เปิดใช้งานรายการ:
อนุญาตการเข้าถึงเชลล์ระยะไกล


และสุดท้าย คุณต้องตั้งค่าประเภทการเริ่มต้นของ Windows Remote Service เป็น "อัตโนมัติ" ฉันขอเตือนคุณว่าคุณสามารถควบคุมวิธีการเริ่มต้นบริการได้จากส่วนนโยบายกลุ่มต่อไปนี้: การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> บริการระบบ


หลังจากเปิดใช้งาน WinRM โดยใช้ Group Policy ให้ตรวจสอบสถานะการบริการบนระบบไคลเอนต์โดยใช้คำสั่งที่คุ้นเคย:


ตรวจสอบให้แน่ใจว่าประเภทการเริ่มต้นบริการ WinRM ถูกตั้งค่าเป็นอัตโนมัติ แม้ว่าในความเป็นจริงแล้วประเภทการเปิดตัวจะเป็น "อัตโนมัติพร้อมความล่าช้า" เพราะ ตามค่าเริ่มต้น บริการ WinRM มีการตั้งค่าความล่าช้าในการเริ่มต้น (พารามิเตอร์ DelayedAutoStart=1 ในสาขา HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WinRM)

ตอนนี้หลังจากเปิดใช้งาน WinRM โดยใช้ Group Policy แล้ว ระบบนี้สามารถจัดการจากระยะไกลได้โดยใช้คำสั่ง WinRS คำสั่งต่อไปนี้จะเปิดพรอมต์คำสั่งที่ทำงานบนระบบระยะไกล:

Winrs –r: คอมพิวเตอร์01 cmd

เมื่อหน้าต่าง Command Prompt ปรากฏขึ้น คุณสามารถดำเนินการและดูผลลัพธ์ของคำสั่งใดๆ บนคอมพิวเตอร์ระยะไกลได้ ราวกับว่าคุณกำลังทำงานในเครื่องนั้น โปรดทราบว่าจะต้องเปิดใช้งาน WinRM บนคอมพิวเตอร์โฮสต์ของคุณด้วย