Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

Enter-PSSession cmdlet ช่วยให้คุณสร้างเซสชัน PowerShell แบบโต้ตอบแบบถาวรกับคอมพิวเตอร์ระยะไกล คำสั่งทั้งหมดที่คุณป้อนในพรอมต์คำสั่งของคุณจะถูกดำเนินการบนคอมพิวเตอร์ระยะไกล ในบทความนี้ เราจะอธิบายคุณสมบัติหลักของ Enter-PSSession และวิธีใช้เพื่อจัดการคอมพิวเตอร์ที่ใช้ Windows 10/11 และ Windows Server 2022/2019/2016 จากระยะไกล

Enter-PSSession cmdlet ขับเคลื่อนโดย PowerShell Remoting ซ้อนกัน. PSRemoting ขึ้นอยู่กับบริการเว็บสำหรับการจัดการ (WS-Management) และ บริการ WinRM (การจัดการระยะไกลของ Windows). การรับส่งข้อมูลระหว่างคอมพิวเตอร์ได้รับการเข้ารหัสที่ระดับโปรโตคอล (คุณสามารถเลือกเปิดใช้งานการเข้ารหัส SSL สำหรับการรับส่งข้อมูล PSRemoting WinRM) คุณสามารถใช้วิธีการตรวจสอบสิทธิ์ต่างๆ รวมถึง NTLM และ Kerberos

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

Enter-PSSession hq-srv01.woshub.com

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

หากผู้ใช้ปัจจุบันได้รับอนุญาตให้เชื่อมต่อกับโฮสต์ระยะไกล คุณจะเชื่อมต่อกับเชลล์แบบโต้ตอบบนคอมพิวเตอร์ระยะไกล

คุณสามารถขอข้อมูลรับรองผู้ใช้ก่อนเชื่อมต่อ:

Enter-PsSession –ComputerName hq-srv01.woshub.com –Credentials woshub\maxbak

หรือ:

$creds = Get-Credential
Enter-PSSession -ComputerName hq-srv01 -Credential $creds

โปรดทราบว่าขณะนี้ชื่อของคอมพิวเตอร์ระยะไกลจะแสดงในวงเล็บเหลี่ยมที่จุดเริ่มต้นของพรอมต์ PowerShell ของคุณ ([hq-srv01.woshub.com] ). วิธีนี้จะช่วยให้คุณทราบได้ว่าคุณกำลังเรียกใช้เซสชันเชลล์ภายในหรือระยะไกลหรือไม่

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

คุณเรียกใช้คำสั่งใดก็ได้ในพรอมต์คำสั่งแบบโต้ตอบนี้ (ตามสิทธิ์ของคุณ)

ตัวอย่างเช่น ให้แสดงการตั้งค่าเครือข่าย Windows โดยใช้ PowerShell:

Get-NetIPConfiguration

คุณสามารถเปลี่ยนการตั้งค่า DNS บนคอมพิวเตอร์ระยะไกลได้:

Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

หากต้องการออกจากเซสชันรีโมตเชลล์แบบโต้ตอบ ให้เรียกใช้ Exit-PSSession หรือ exit . ข้อความแจ้ง PS จะกลายเป็นปกติ และคุณจะกลับไปที่คอนโซล PowerShell ในเครื่อง:

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

ก่อนหน้านี้ ผู้ดูแลระบบใช้ PsExec . เป็นหลัก เครื่องมือเพื่อเรียกใช้พรอมต์คำสั่งแบบโต้ตอบบนคอมพิวเตอร์ Windows ระยะไกล อย่างไรก็ตาม เมื่อ Enter-PSSession ปรากฏขึ้น ก็ไม่จำเป็นต้องใช้เครื่องมือภายนอกอีกต่อไป

ใน Windows Server 2016/2019/2022 PowerShell Remoting ถูกเปิดใช้งานโดยค่าเริ่มต้น (คุณสามารถดูได้ใน Server Manager -> Local Server -> Remote Management =Enabled)

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell
ในเวอร์ชันเดสก์ท็อป Windows (Win10, Win11) PSRemoting และ WinRM จะถูกปิดใช้งาน
คุณสามารถตรวจสอบว่า PSRemoting เปิดใช้งานบนคอมพิวเตอร์ปัจจุบันของคุณหรือไม่โดยใช้คำสั่งด้านล่าง:

Get-PSSessionConfiguration

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

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

คุณสามารถทดสอบว่าคุณสามารถเชื่อมต่อกับคอมพิวเตอร์ของคุณภายในเครื่องผ่าน PowerShell Remoting ได้หรือไม่:

Test-WSMan -ComputerName localhost

หากคำสั่งส่งคืนเวอร์ชันสคีมา WSMan การเชื่อมต่อระยะไกลกับคอมพิวเตอร์โดยใช้ PS Remoting จะได้รับอนุญาต

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

ถ้า PowerShell Remoting ถูกปิดใช้งานหรือไม่ได้กำหนดค่าไว้ ข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น:

Test-WSMan : <f:WSManFaultxmlns:f="https://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150858770" Machine="srv02"><f:Message>The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".

หากต้องการเปิดใช้งาน PowerShell Remoting ให้เรียกใช้คำสั่งนี้:

Enable-PSRemoting -Force

คำสั่งนี้:

  • เปิดใช้งานบริการ WinRM และตั้งค่าประเภทการเริ่มต้นเป็นอัตโนมัติ
  • สร้างจุดเชื่อมต่อบนพอร์ต WinRM เริ่มต้น (TCP/5985 สำหรับการรับส่งข้อมูล HTTP)
  • เพิ่มข้อยกเว้นสำหรับ WS-Management ให้กับ Windows Firewall (หากคุณกำลังกำหนดค่า PSRemoting ด้วยตนเอง ให้เพิ่มกฎไฟร์วอลล์โดยใช้ PowerShell หรือ GPO)
  • อนุญาตเซสชัน PowerShell ระยะไกล
  • เริ่มบริการ WinRM ใหม่

ตรวจสอบให้แน่ใจว่าบริการ WinRM กำลังทำงานและตั้งค่าให้เริ่มทำงานโดยอัตโนมัติ:

Get-Service WinRM | Select MachineName,Name,Status, StartType

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

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

Enable-PSRemoting -SkipNetworkProfileCheck -Force

ในโดเมน Active Directory วิธีที่ง่ายที่สุดในการกำหนดค่า Windows Remote Management (PSRemoting) จากศูนย์กลางบนเซิร์ฟเวอร์และคอมพิวเตอร์คือการใช้นโยบายกลุ่ม

เวอร์ชัน PowerShell สมัยใหม่ (v6 หรือ v7) รองรับโปรโตคอล Secure Shell (SSH) เพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกลผ่าน PowerShell Remoting จุดเชื่อมต่อ SSH จะต้องพร้อมใช้งานบนคอมพิวเตอร์ระยะไกล (จะเปิดใช้งานเซิร์ฟเวอร์ OpenSSH ในตัวบน Windows 10 ได้อย่างไร) คุณสามารถเริ่มเซสชัน PSRemoting แบบโต้ตอบบน SSH ได้โดยใช้คำสั่งนี้:

Enter-PSSession -HostName [email protected]

หรือตรวจสอบสิทธิ์ผ่าน SSH โดยใช้คีย์ RSA:

Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:\PS\max_rsa_key

คุณสามารถใช้ Enter-PSSession ร่วมกับ New-PSSession :

$s = New-PSSession -ComputerName hq-srv01.woshub.com
Enter-PSSession -Session $s

Enter-PSSession รองรับวิธีการตรวจสอบสิทธิ์หลายวิธี คุณสามารถตั้งค่าที่คุณต้องการโดยใช้พารามิเตอร์ -Authentication รองรับวิธีการตรวจสอบสิทธิ์ Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge

ในตัวอย่างข้างต้น เราได้แสดงวิธีสร้างการเชื่อมต่อ Enter-PSSession แบบโต้ตอบระหว่างคอมพิวเตอร์ในโดเมน Windows เดียวกัน (การระบุ FQDN หรือชื่อย่อสำหรับการเชื่อมต่อนั้นเพียงพอแล้ว การรับรองความถูกต้อง Kerberos ถูกนำมาใช้) หากคุณพยายามเชื่อมต่อกับคอมพิวเตอร์ระยะไกลโดยใช้ที่อยู่ IP หรือ CNAME คุณจะไม่ได้รับการพิสูจน์ตัวตน:

Enter-PSSession : Connecting to remote server 192.168.31.12 failed with the following error message: The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated.

Enter-PSSession:การรันคำสั่งระยะไกลใน Interactive Shell

หากต้องการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลโดยใช้ที่อยู่ IP คุณสามารถเพิ่มโฮสต์ในรายการโฮสต์ที่เชื่อถือได้ (โฮสต์ที่เชื่อถือได้) หรือใช้ SSL สำหรับ WinRM (มีความปลอดภัยมากกว่า)

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

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5

คุณสามารถเพิ่มโฮสต์ที่เชื่อถือได้โดยใช้ไวด์การ์ดมาสก์:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.woshub.com

วิธีแสดงรายการโฮสต์ที่เชื่อถือได้:

Get-Item WSMan:\localhost\Client\TrustedHosts

ในทำนองเดียวกัน คุณสามารถเพิ่มโฮสต์ของคุณในรายการโฮสต์ที่เชื่อถือได้บนคอมพิวเตอร์ระยะไกลได้

เริ่มบริการใหม่:

Restart-Service WinRM

หากต้องการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลโดยใช้ที่อยู่ IP ให้เรียกใช้คำสั่งด้านล่าง:

Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName woshub\maxbak)

Enter-PSSession และ New-PSSession cmdlets สร้างเซสชันระยะไกลแบบหนึ่งต่อหนึ่งแบบถาวร และส่วนใหญ่จะใช้ในสถานการณ์แบบโต้ตอบ หากคุณต้องการเรียกใช้สคริปต์หรืองานโดยอัตโนมัติ หรือทำบางสิ่งบนคอมพิวเตอร์ระยะไกลหลายเครื่องพร้อมกัน ให้ใช้คำสั่ง Invoke-Command