Computer >> कंप्यूटर >  >> प्रणाली >> Windows Server

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

इस लेख में हम सीखेंगे कि आमंत्रण-आदेश . का उपयोग कैसे करें cmdlet दूरस्थ रूप से PowerShell कमांड या स्क्रिप्ट चलाने के लिए। आप अपने नेटवर्क में एक या अधिक कंप्यूटरों पर दूरस्थ रूप से कमांड चलाने के लिए पावरशेल का उपयोग कर सकते हैं। Invoke-Command cmdlet PowerShell Remoting की दूरस्थ प्रबंधन सुविधाओं का उपयोग कर रहा है . पावरशेल रिमोटिंग आपको WinRM . के माध्यम से कंप्यूटर पर पावरशेल सत्रों से दूरस्थ रूप से कनेक्ट करने की अनुमति देता है (Windows दूरस्थ प्रबंधन) सेवा और प्रबंधन के लिए वेब सेवाएँ (WS-प्रबंधन) प्रोटोकॉल। यह सेवा दूरस्थ पावरशेल सत्र स्थापित करने और आपके कोड को चलाने की क्षमता प्रदान करती है।

पावरशेल रिमोटिंग के लिए WinRM को कॉन्फ़िगर करना

पावरशेल रिमोटिंग कंप्यूटर के बीच संचार करने के लिए HTTP (पोर्ट टीसीपी/5985) या एचटीटीपीएस (पोर्ट टीसीपी/5986) का उपयोग करता है। डिफ़ॉल्ट रूप से, HTTP प्रोटोकॉल का उपयोग किया जाता है, लेकिन यहां तक ​​​​कि इस ट्रैफ़िक को AES-56 का उपयोग करके एन्क्रिप्ट किया गया है (हालांकि, मध्य प्रकार के हमलों का खतरा है)। Kerberos या NTLM प्रमाणीकरण का भी उपयोग किया जा सकता है।

WinRM उन दूरस्थ कंप्यूटरों पर चलना चाहिए जिनसे आप कनेक्ट होने जा रहे हैं। WinRM सेवा की स्थिति जांचें:

Get-Service -Name "*WinRM*" | fl

अगर सेवा नहीं चल रही है, तो इसे शुरू करें:

Enable-PSRemoting

WinRM has been updated to receive requests.
WinRM service started.
WinRM is already set up for remote management on this computer.

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

यह आदेश WinRM सेवा प्रारंभ करेगा (और इसे स्वचालित रूप से प्रारंभ करने के लिए सेट करेगा), डिफ़ॉल्ट winrm सेटिंग्स सेट करें, और Windows फ़ायरवॉल में अपवाद नियम जोड़ें। Enable-PSRemoting –Force कमांड किसी उपयोगकर्ता को संकेत दिए बिना WinRM को सक्षम बनाता है।

फिर आप पॉवरशेल रिमोटिंग का उपयोग करके दूरस्थ रूप से कंप्यूटर से कनेक्ट कर सकते हैं।

ध्यान दें कि यदि आपका नेटवर्क प्रकार सार्वजनिक पर सेट है, तो PowerShell Remoting डिफ़ॉल्ट रूप से कार्य नहीं करेगा . फिर कमांड निम्न त्रुटि देता है:

Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

आपको नेटवर्क स्थान को निजी में बदलना होगा या इस आदेश का उपयोग करना होगा:

Enable-PSRemoting –SkipNetworkProfileCheck.

विंडोज डिफेंडर फ़ायरवॉल नियम को भी सक्षम करें जो सार्वजनिक नेटवर्क में WinRM तक पहुंच की अनुमति देता है। आप GPO या PowerShell का उपयोग करके फ़ायरवॉल नियम को सक्षम कर सकते हैं:

Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any

पावरशेल रिमोटिंग के माध्यम से किसी दूरस्थ कंप्यूटर से कनेक्शन का परीक्षण करने के लिए, निम्न आदेश चलाएँ:

Test-WsMan compname1

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

यदि आपके पास एक सक्रिय निर्देशिका डोमेन नहीं है या आप आईपी पते द्वारा पावरशेल रिमोटिंग के माध्यम से कंप्यूटर तक पहुंचते हैं, तो इस मामले में प्रमाणीकरण के लिए एनटीएलएम प्रोटोकॉल का उपयोग किया जाता है। NTLM का उपयोग करते समय, यदि आप Invoke-Command चलाने का प्रयास करते हैं, तो निम्न त्रुटि दिखाई देती है:

[192.168.1.201] Connecting to remote server 192.168.1.102 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: thetransport 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. + FullyQualifiedErrorId: CannotUseIPAddress,PSSessionStateBroken

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

कनेक्ट करने के लिए आप जिस कंप्यूटर का उपयोग कर रहे हैं उस पर NTLM प्रमाणीकरण सही ढंग से काम करने के लिए, कुछ और काम करें:WinRM के लिए SSL प्रमाणपत्र जारी करें या विश्वसनीय होस्ट सूची में होस्ट नाम/आईपी पता जोड़ें:

Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.1.201

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

या आप सभी कंप्यूटरों से कनेक्शन की अनुमति दे सकते हैं (यह अनुशंसित नहीं है, क्योंकि यह एनटीएलएम के नुकसानों में से एक है - यह पारस्परिक प्रमाणीकरण का समर्थन नहीं करता है)।

Set-Item wsman:\localhost\Client\TrustedHosts -value *

दूरस्थ होस्ट पर समान सेटिंग लागू की जानी चाहिए।

विश्वसनीय मेजबानों की सूची प्रदर्शित करने के लिए, कमांड चलाएँ:

Get-Item WSMan:\localhost\Client\TrustedHosts

परिवर्तनों को लागू करने के लिए, WinRM को पुनरारंभ करें:

Restart-Service WinRM

आप समूह नीतियों का उपयोग करके WinRM को सक्षम और कॉन्फ़िगर भी कर सकते हैं।

इनवोक-कमांड का उपयोग करके दूरस्थ रूप से पावरशेल कमांड कैसे चलाएं?

Invoke-Command cmdlet एक या अधिक दूरस्थ कंप्यूटरों पर कमांड चलाने की अनुमति देता है।

उदाहरण के लिए, किसी दूरस्थ कंप्यूटर पर एकल कमांड चलाने के लिए, निम्न का उपयोग करें:

Invoke-Command -ComputerName dc01 -ScriptBlock {$PSVersionTable.PSVersion}

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

यह कमांड दूरस्थ कंप्यूटर पर स्थापित पावरशेल संस्करण को प्रदर्शित करेगा, जिसका नाम -ComputerName में निर्दिष्ट है पैरामीटर। दूरस्थ कंप्यूटर पर चलाने के लिए -ScriptBlock {[cmdlet]} में कमांड दर्ज करें ब्लॉक करें।

डिफ़ॉल्ट रूप से, Invoke-Command के माध्यम से भेजी गई एक कमांड को दूरस्थ कंप्यूटर पर वर्तमान उपयोगकर्ता के रूप में निष्पादित किया जाता है। यदि आप इसे किसी अन्य उपयोगकर्ता के रूप में चलाना चाहते हैं, तो उपयोगकर्ता क्रेडेंशियल का अनुरोध करें और उन्हें एक चर में सहेजें:

$cred = Get-Credential
Invoke-Command -ComputerName dc01 -Credential $cred -ScriptBlock {Get-NetAdapter}

यह पॉवरशेल कमांड दूरस्थ कंप्यूटर पर नेटवर्क इंटरफेस की सूची प्रदर्शित करता है:

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

आप ScriptBlock में अर्धविराम से अलग करके एक से अधिक कमांड दर्ज कर सकते हैं। उदाहरण के लिए, निम्न कमांड वर्तमान समय क्षेत्र को प्रदर्शित करेगा और इसे दूसरे समय क्षेत्र में बदल देगा:

Invoke-Command -Computername dc01 -ScriptBlock {Get-TimeZone| select DisplayName;Set-TimeZone -Name "Central Europe Standard Time”}

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

इनवोक-कमांड आपको न केवल व्यक्तिगत कमांड चलाने की अनुमति देता है, बल्कि पावरशेल स्क्रिप्ट भी चलाता है। ऐसा करने के लिए, -फाइलपाथ तर्क (-स्क्रिप्टब्लॉक के बजाय) का उपयोग किया जाता है। इस स्थिति में, आप अपने कंप्यूटर पर स्थानीय PS1 स्क्रिप्ट फ़ाइल का पथ निर्दिष्ट करते हैं (आपको स्क्रिप्ट फ़ाइल को लक्ष्य दूरस्थ कंप्यूटर पर कॉपी करने की आवश्यकता नहीं है):

Invoke-Command -ComputerName DC01 -FilePath C:\PS\Scripts\CheckSMBversion.ps1

एक साथ कई कंप्यूटरों पर कमांड चलाने के लिए इनवोक-कमांड का उपयोग कैसे करें?

आप समानांतर में (एक साथ) कई दूरस्थ कंप्यूटरों पर कमांड चलाने के लिए Invoke-Command का उपयोग कर सकते हैं।

सरलतम स्थिति में, पावरशेल कमांड को चलाने वाले कंप्यूटरों के नाम अल्पविराम से अलग किए जाते हैं:

Invoke-Command server1, server2, server3 -ScriptBlock {get-date}

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

आप कंप्यूटर की सूची को एक वेरिएबल (सरणी) में रख सकते हैं:

$servers = @("server1","server2","server3")
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers

या टेक्स्ट फ़ाइल से प्राप्त करें:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)

आप पावरशेल मॉड्यूल के लिए AD से Get-ADComputer cmdlet का उपयोग करके AD में कंप्यूटरों की सूची भी प्राप्त कर सकते हैं:

डोमेन में सभी विंडोज सर्वर होस्ट में कमांड चलाने के लिए, निम्नलिखित पावरशेल कोड का उपयोग करें:

$computers = (Get-ADComputer -Filter 'OperatingSystem -like "*Windows server*" -and Enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -ScriptBlock {Get-Date} -ErrorAction SilentlyContinue

यदि कंप्यूटर बंद है या अनुपलब्ध है, तो साइलेंटली कॉन्टिन्यू पैरामीटर के कारण स्क्रिप्ट बंद नहीं होगी और अन्य कंप्यूटरों पर चलती रहेगी।

यह समझने के लिए कि परिणाम किस कंप्यूटर से आया है, PSComputerNamee पर्यावरण चर का उपयोग करें।

$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime

रिमोट कंप्यूटर पर स्क्रिप्ट चलाने के लिए पॉवरशेल इनवोक-कमांड का उपयोग करना

कई कंप्यूटरों पर Invoke-Command का उपयोग करते हुए एक कमांड चलाते समय, इसे एक साथ चलाया जाता है। Invoke-Command में एक ही समय में प्रबंधित किए जाने वाले कंप्यूटरों की अधिकतम संख्या (एक साथ PSSessions की सीमित संख्या) पर प्रतिबंध है। यह प्रतिबंध थ्रॉटल लिमिट . में सेट है पैरामीटर (डिफ़ॉल्ट मान 32 है)। यदि आप 32 से अधिक कंप्यूटरों (उदाहरण के लिए, 128) पर कमांड चलाना चाहते हैं, तो –ThrottleLimit 128 का उपयोग करें। (हालांकि, बड़ी संख्या में PSSSessions स्थापित करने के लिए आपके कंप्यूटर का लोड अधिक होगा)।

पृष्ठभूमि में इनवोक-कमांड के माध्यम से दूरस्थ कंप्यूटर पर कमांड चलाने के लिए, एक विशेष विशेषता –AsJob प्रयोग किया जाता है। तब कमांड का परिणाम कंसोल पर वापस नहीं किया जाता है। परिणाम प्राप्त करने के लिए, प्राप्त-नौकरी . का उपयोग करें cmdlet.


  1. कमांड प्रॉम्प्ट या पॉवरशेल का उपयोग करके रिमोट डेस्कटॉप सक्षम करें

    यदि आप दूरस्थ डेस्कटॉप . का उपयोग करना चाहते हैं विंडोज सेटिंग्स पैनल को खोले बिना फीचर, फिर आप कमांड प्रॉम्प्ट या विंडोज पॉवरशेल का उपयोग करके रिमोट डेस्कटॉप को सक्षम कर सकते हैं। यदि आपके पास अपने मोबाइल या किसी अन्य कंप्यूटर पर एक दूरस्थ डेस्कटॉप क्लाइंट है, तो आप इसे कनेक्ट करने और अपने पीसी को

  1. PowerShell का उपयोग करके Windows 10 कंप्यूटर को दूरस्थ रूप से पुनरारंभ कैसे करें

    समय-समय पर, विशेष रूप से, एक सिस्टम व्यवस्थापक को सर्वर या सिस्टम को पुनरारंभ करने की आवश्यकता होगी। आमतौर पर, आप ग्राफिकल यूजर इंटरफेस के माध्यम से विंडोज 10 को रिमोट शट डाउन या रीस्टार्ट कर सकते हैं - पॉवरशेल कंप्यूटर को दूरस्थ रूप से रिबूट करने के लिए कई तरीके प्रदान करता है और हम इस पोस्ट में 6

  1. उपयोगकर्ता लॉगऑन, लॉगऑफ़, स्टार्टअप और शटडाउन पर सबसे पहले Windows PowerShell स्क्रिप्ट चलाएँ

    यदि आप Windows PowerShell स्क्रिप्ट चलाना चाहते हैं सबसे पहले उपयोगकर्ता लॉगऑन, लॉगऑफ़, स्टार्टअप और शटडाउन पर, यहां आपको क्या करना होगा। आप स्थानीय समूह नीति संपादक और रजिस्ट्री संपादक का उपयोग करके गैर-पॉवरशेल स्क्रिप्ट से पहले Windows PowerShell स्क्रिप्ट को प्राथमिकता दे सकते हैं। जब कोई उपयोगक