Enter-PSSession कमांडलेट आपको रिमोट कंप्यूटर के साथ एक स्थायी इंटरैक्टिव PowerShell सत्र स्थापित करने की अनुमति देता है। आपके कमांड प्रॉम्प्ट में दर्ज सभी कमांड रिमोट कंप्यूटर पर निष्पादित होते हैं। इस लेख में, हम Enter-PSSession की मुख्य विशेषताओं की व्याख्या करेंगे और इसका उपयोग Windows 10/11 और Windows Server 2022/2019/2016 चलाने वाले कंप्यूटर्स को रिमोटली प्रबंधित करने के लिए कैसे किया जा सकता है।
Enter-PSSession कमांडलेट PowerShell रिमोटिंग स्टैक द्वारा संचालित है। PSRemoting प्रबंधन के लिए वेब सेवाओं (WS-Management) और WinRM सेवा (Windows रिमोट प्रबंधन) पर आधारित है। कंप्यूटर्स के बीच ट्रैफिक प्रोटोकॉल स्तर पर एन्क्रिप्ट किया गया है (आप वैकल्पिक रूप से PSRemoting WinRM ट्रैफिक के लिए SSL एन्क्रिप्शन सक्षम कर सकते हैं)। आप विभिन्न प्रमाणीकरण विधियों का उपयोग कर सकते हैं, जिनमें NTLM और Kerberos शामिल हैं।
सरल मामले में, रिमोट कंप्यूटर के साथ एक इंटरैक्टिव PowerShell सत्र स्थापित करने के लिए, आपको केवल कनेक्ट करने के लिए कंप्यूटर नाम निर्दिष्ट करने की आवश्यकता है (ComputerName विकल्प)। रिमोट कंप्यूटर से कनेक्ट करने के लिए, बस कमांड चलाएं:
Enter-PSSession hq-srv01.woshub.com
यदि वर्तमान उपयोगकर्ता के पास रिमोट होस्ट से कनेक्ट करने की अनुमति है, तो आप रिमोट कंप्यूटर पर एक इंटरैक्टिव शेल से कनेक्ट होंगे।
कनेक्ट करने से पहले उपयोगकर्ता क्रेडेंशियल्स के लिए संकेत दे सकते हैं:
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 कमांड चला सकते हैं और सुनिश्चित कर सकते हैं कि आप इसे रिमोट कंप्यूटर पर चला रहे हैं।
आप इस इंटरैक्टिव कमांड प्रॉम्प्ट में कोई भी कमांड चला सकते हैं (आपके विशेषाधिकारों के अनुसार)।
उदाहरण के लिए, आइए PowerShell का उपयोग करके Windows नेटवर्क सेटिंग्स प्रदर्शित करें:
Get-NetIPConfiguration
आप रिमोट कंप्यूटर पर DNS सेटिंग्स बदल सकते हैं:
Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4
इंटरैक्टिव रिमोट शेल सत्र से बाहर निकलने के लिए, Exit-PSSession या exit चलाएं। PS प्रॉम्प्ट सामान्य हो जाएगा और आप अपने स्थानीय PowerShell कंसोल पर वापस आ जाएंगे।
पहले, प्रशासक मुख्य रूप से रिमोट Windows कंप्यूटर पर एक इंटरैक्टिव कमांड प्रॉम्प्ट चलाने के लिए PsExec टूल का उपयोग करते थे। हालांकि, जब Enter-PSSession आया, तो उन्हें बाहरी टूल्स का उपयोग करने की आवश्यकता नहीं रही।
Windows Server 2016/2019/2022 में, PowerShell रिमोटिंग डिफ़ॉल्ट रूप से सक्षम है (आप इसे सर्वर मैनेजर -> लोकल सर्वर -> रिमोट प्रबंधन = सक्षम में देख सकते हैं)।
डेस्कटॉप Windows संस्करणों (Win10, Win11) में, PSRemoting और WinRM अक्षम हैं।
आप निम्न कमांड का उपयोग करके जांच सकते हैं कि आपके वर्तमान कंप्यूटर पर PSRemoting सक्षम है या नहीं:
Get-PSSessionConfiguration
यह कमांड WinRM पर कनेक्ट करने की अनुमति वाले उपयोगकर्ताओं और समूहों की सूची प्राप्त करने के लिए भी उपयोग की जाती है। PSRemoting का उपयोग करने के लिए, एक उपयोगकर्ता खाता Administrators या Remote Management Users समूह का सदस्य होना चाहिए। आप गैर-एडमिन उपयोगकर्ताओं के लिए WinRM PowerShell रिमोटिंग सक्षम करने के बारे में अधिक जान सकते हैं।
आप जांच सकते हैं कि क्या आप अपने कंप्यूटर से स्थानीय रूप से PowerShell रिमोटिंग के माध्यम से कनेक्ट कर सकते हैं:
Test-WSMan -ComputerName localhost
यदि कमांड WSMan स्कीमा संस्करण लौटाता है, तो PS Remoting का उपयोग करके कंप्यूटर पर रिमोट कनेक्शन की अनुमति है।
यदि PowerShell रिमोटिंग अक्षम या कॉन्फ़िगर नहीं है, तो निम्न त्रुटि दिखाई देती है:
Test-WSMan : 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 रिमोटिंग सक्षम करने के लिए, यह कमांड चलाएं:
Enable-PSRemoting -Force
यह कमांड:
- WinRM सेवा सक्षम करती है और इसके स्टार्टअप प्रकार को Automatic पर सेट करती है;
- डिफ़ॉल्ट WinRM पोर्ट (HTTP ट्रैफिक के लिए TCP/5985) पर एक कनेक्शन पॉइंट बनाती है;
- Windows फ़ायरवॉल में WS-Management के लिए अपवाद जोड़ती है (यदि आप PSRemoting मैन्युअल रूप से कॉन्फ़िगर कर रहे हैं, तो PowerShell या GPO के साथ फ़ायरवॉल नियम जोड़ें)
- रिमोट PowerShell सत्रों की अनुमति देती है
- WinRM सेवा को पुनरारंभ करती है
सुनिश्चित करें कि WinRM सेवा चल रही है और स्वचालित रूप से शुरू होने के लिए सेट है:
Get-Service WinRM | Select MachineName,Name,Status, StartType
Enable-PSRemoting कमांड केवल डोमेन और निजी Windows नेटवर्क प्रोफाइल के लिए काम करती है। यदि आप पब्लिक नेटवर्क में कंप्यूटर पर PSRemoting सक्षम करना चाहते हैं, तो नेटवर्क स्थान को Public से Private में बदलें, या नीचे दी गई कमांड का उपयोग करें:
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Active Directory डोमेन में, सर्वरों और कंप्यूटर्स पर Windows रिमोट मैनेजमेंट (PSRemoting) को केंद्रीय रूप से कॉन्फ़िगर करने का सबसे आसान तरीका ग्रुप पॉलिसी के माध्यम से है।
आधुनिक PowerShell संस्करण (v6 या v7) रिमोट कंप्यूटर से PowerShell रिमोटिंग पर कनेक्ट करने के लिए सिक्योर शेल प्रोटोकॉल (SSH) का समर्थन करते हैं। रिमोट कंप्यूटर पर एक SSH कनेक्शन पॉइंट उपलब्ध होना चाहिए (Windows 10 पर अंतर्निहित OpenSSH सर्वर कैसे सक्षम करें?)। आप SSH पर इंटरैक्टिव PSRemoting सत्र शुरू करने के लिए इस कमांड का उपयोग कर सकते हैं:
Enter-PSSession -HostName maxbak@hq-srv01.woshub.com
या RSA कुंजी का उपयोग करके SSH पर प्रमाणित करें:
Enter-PSSession -HostName maxbak@hq-srv01.woshub.com: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 प्रमाणीकरण विधियाँ समर्थित हैं।
ऊपर दिए गए उदाहरण में, हमने दिखाया कि एक ही Windows डोमेन में कंप्यूटर्स के बीच एक इंटरैक्टिव Enter-PSSession कनेक्शन कैसे बनाया जाए (कनेक्शन के लिए 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.
रिमोट कंप्यूटर से उसके IP पते का उपयोग करके कनेक्ट करने के लिए, आप होस्ट को विश्वसनीय होस्ट्स (Trusted Hosts) की सूची में जोड़ सकते हैं या WinRM के लिए SSL उपयोग कर सकते हैं (यह अधिक सुरक्षित है)।
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 कमांडलेट्स एक स्थायी वन-टू-वन रिमोट सत्र बनाते हैं और ज्यादातर इंटरैक्टिव परिदृश्यों में उपयोग किए जाते हैं। यदि आप स्क्रिप्ट्स या जॉब्स को स्वचालित रूप से चलाना चाहते हैं या एक साथ कई रिमोट कंप्यूटर्स पर कुछ करना चाहते हैं, तो Invoke-Command कमांड का उपयोग करें।