PowerShell ट्यूटोरियल
पॉवरशेल के साथ शुरुआत करना
खोज…
टिप्पणियों
Windows PowerShell , Windows प्रबंधन फ्रेमवर्क का एक शेल और स्क्रिप्टिंग घटक है, जो .NET फ्रेमवर्क पर निर्मित Microsoft से एक स्वचालन / कॉन्फ़िगरेशन प्रबंधन ढांचा है। Windows 7 / Windows Server 2008 R2 से Windows क्लाइंट और सर्वर ऑपरेटिंग सिस्टम के सभी समर्थित संस्करणों पर डिफ़ॉल्ट रूप से PowerShell स्थापित है। Windows प्रबंधन फ्रेमवर्क (WMF) के बाद के संस्करण को डाउनलोड करके किसी भी समय पॉवर्सशेल को अपडेट किया जा सकता है। PowerShell 6 का "अल्फा" संस्करण क्रॉस-प्लेटफॉर्म (विंडोज, लिनक्स, और ओएस एक्स) है और इसे इस रिलीज़ पृष्ठ से डाउनलोड और इंस्टॉल करने की आवश्यकता है।
अतिरिक्त संसाधन:
- MSDN प्रलेखन: https://msdn.microsoft.com/en-us/powershell/scripting/powershell-scripting
- TechNet: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
- PowerShell गैलरी: https://www.powershellgallery.com/
- MSDN ब्लॉग: https://blogs.msdn.microsoft.com/powershell/
- गीथब: https://github.com/powershell
- सामुदायिक साइट: http://powershell.com/cs/
संस्करण
संस्करण | विंडोज के साथ शामिल है | टिप्पणियाँ | रिलीज़ की तारीख |
---|---|---|---|
1.0 | XP / सर्वर 2008 | 2006/11/01 | |
2.0 | 7 / सर्वर 2008 आर 2 | 2009-11-01 | |
3.0 | 8 / सर्वर 2012 | 2012-08-01 | |
4.0 | 8.1 / सर्वर 2012 R2 | 2013-11-01 | |
5.0 | 10 / सर्वर 2016 टेक पूर्वावलोकन | 2015/12/16 | |
5.1 | 10 वर्षगांठ संस्करण / सर्वर 2016 | 2017/01/27 |
स्थापना या सेटअप
खिड़कियाँ
PowerShell को Windows प्रबंधन फ्रेमवर्क के साथ शामिल किया गया है। विंडोज के आधुनिक संस्करणों पर इंस्टॉलेशन और सेटअप की आवश्यकता नहीं है।
PowerShell के लिए अद्यतन Windows प्रबंधन फ्रेमवर्क का एक नया संस्करण स्थापित करके पूरा किया जा सकता है।
अन्य प्लेटफार्म
PowerShell 6 का "बीटा" संस्करण अन्य प्लेटफार्मों पर स्थापित किया जा सकता है। स्थापना पैकेज यहां उपलब्ध हैं ।
उदाहरण के लिए, Ubuntu 16.04 के लिए PowerShell 6, आसान स्थापना (और अपडेट) के लिए पैकेज रिपॉजिटरी में प्रकाशित किया जाता है।
निम्नलिखित चलाने के लिए:
# Import the public repository GPG keys curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - # Register the Microsoft Ubuntu repository curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list # Update apt-get sudo apt-get update # Install PowerShell sudo apt-get install -y powershell # Start PowerShell powershell
Microsoft रिपॉजिटरी को एक बार सुपरयुजर के रूप में पंजीकृत करने के बाद, तब से, आपको इसे अपडेट करने के लिए बस sudo apt-get upgrade powershell
का sudo apt-get upgrade powershell
करने की आवश्यकता है। फिर सिर्फ powershell
चलाएं
अपनी मशीन पर संग्रहीत स्क्रिप्ट को बिना हस्ताक्षरित चलाने की अनुमति दें
सुरक्षा कारणों से, PowerShell को डिफ़ॉल्ट रूप से केवल हस्ताक्षरित स्क्रिप्ट को निष्पादित करने की अनुमति देने के लिए सेट किया गया है। निम्नलिखित कमांड को निष्पादित करने से आप अहस्ताक्षरित स्क्रिप्ट को चला पाएंगे (आपको ऐसा करने के लिए व्यवस्थापक के रूप में PowerShell को चलाना होगा)।
Set-ExecutionPolicy RemoteSigned
PowerShell स्क्रिप्ट को चलाने का एक और तरीका है, Bypass
को ExecutionPolicy
रूप में उपयोग करना:
powershell.exe -ExecutionPolicy Bypass -File "c:\MyScript.ps1"
या आपके मौजूदा PowerShell कंसोल या ISE सत्र से चलकर:
Set-ExecutionPolicy Bypass Process
निष्पादन नीति के लिए एक अस्थायी समाधान भी प्राप्त किया जा सकता है Powershell निष्पादन योग्य और किसी भी मान्य नीति के रूप में -ExecutionPolicy
पैरामीटर पास करके। नीति केवल प्रक्रिया के दौरान ही लागू होती है, इसलिए रजिस्ट्री के लिए किसी प्रशासनिक पहुंच की आवश्यकता नहीं होती है।
C:\>powershell -ExecutionPolicy RemoteSigned
कई अन्य नीतियां उपलब्ध हैं, और ऑनलाइन साइटें अक्सर आपको Set-ExecutionPolicy Unrestricted
का उपयोग करने के लिए प्रोत्साहित करती हैं। यह नीति परिवर्तित होने तक बनी रहती है और सिस्टम सुरक्षा रुख को कम करती है। यह उचित नहीं है। RemoteSigned
का उपयोग करने की सिफारिश की जाती है क्योंकि यह स्थानीय रूप से संग्रहीत और लिखित कोड की अनुमति देता है, और एक विश्वसनीय रूट से प्रमाण पत्र के साथ दूरस्थ रूप से अधिग्रहीत कोड पर हस्ताक्षर करने की आवश्यकता होती है।
इसके अलावा, सावधान रहें कि निष्पादन नीति को समूह नीति द्वारा लागू किया जा सकता है, ताकि भले ही नीति को Unrestricted
सिस्टम-व्यापी में बदल दिया जाए, लेकिन समूह नीति उस सेटिंग को अपने अगले प्रवर्तन अंतराल (आमतौर पर 15 मिनट) पर वापस ला सकती है। आप Get-ExecutionPolicy -List
का उपयोग करके विभिन्न स्कोपों में सेट की गई निष्पादन नीति देख सकते हैं
TechNet प्रलेखन:
सेट ExecutionPolicy
about_Execution_Policies
उपनाम और समान कार्य
PowerShell में, समान परिणाम प्राप्त करने के कई तरीके हैं। यह सरल और परिचित Hello World
उदाहरण के साथ अच्छी तरह से चित्रित किया जा सकता है:
Write-Host
का उपयोग करना:
Write-Host "Hello World"
Write-Output
का उपयोग करना:
Write-Output 'Hello world'
यह ध्यान देने योग्य है कि हालांकि Write-Output
और Write-Host
दोनों स्क्रीन पर लिखते हैं लेकिन एक सूक्ष्म अंतर है। Write-Host
केवल स्टडआउट (यानी कंसोल स्क्रीन) को लिखता है, जबकि Write-Output
दोनों को stdout और आउटपुट [सफलता] स्ट्रीम को रीडायरेक्ट करने की अनुमति देता है। पुनर्निर्देशन (और सामान्य रूप से धाराएं) एक चर के असाइनमेंट सहित दूसरे के इनपुट के रूप में निर्देशित करने के लिए एक कमांड के आउटपुट की अनुमति देता है।
> $message = Write-Output "Hello World"
> $message
"Hello World"
ये समान कार्य उपनाम नहीं हैं, लेकिन यदि कोई व्यक्ति सफलता की धारा को "प्रदूषण" से बचना चाहता है तो वही परिणाम उत्पन्न कर सकता है।
Write-Output
को Echo
या Write
Echo 'Hello world'
Write 'Hello world'
या, 'हैलो वर्ल्ड' टाइप करके!
'Hello world'
जिसके सभी परिणाम अपेक्षित कंसोल आउटपुट के साथ होंगे
Hello world
PowerShell में उपनामों का एक और उदाहरण दोनों पुराने कमांड प्रॉम्प्ट कमांड और BASH कमांड्स से पावरशेल cmdlets का सामान्य मानचित्रण है। निम्नलिखित सभी वर्तमान निर्देशिका की एक निर्देशिका लिस्टिंग का उत्पादन करते हैं।
C:\Windows> dir
C:\Windows> ls
C:\Windows> Get-ChildItem
अंत में, आप सेट-एलियास cmdlet के साथ अपना खुद का उपनाम बना सकते हैं! एक उदाहरण के रूप में आइए एलाइज़ Test-NetConnection
नेटकॉन्क्शन, जो अनिवार्य रूप से कमांड प्रॉम्प्ट के पिंग कमांड के बराबर है, "पिंग" है।
Set-Alias -Name ping -Value Test-NetConnection
अब आप Test-NetConnection
बजाय ping
उपयोग कर सकते हैं! ध्यान रखें कि यदि उपनाम पहले से उपयोग में है, तो आप एसोसिएशन को अधिलेखित कर देंगे।
सत्र सक्रिय होने तक एलियास जीवित रहेगा। एक बार जब आप सत्र बंद कर देते हैं और अपने अंतिम सत्र में आपके द्वारा बनाए गए उपनाम को चलाने का प्रयास करते हैं, तो यह काम नहीं करेगा। इस समस्या को दूर करने के लिए, आप अपना काम शुरू करने से पहले, अपने सभी उपनामों को एक बार अपने सत्र में एक्सेल से आयात कर सकते हैं।
पाइपलाइन - एक पॉवरशेल cmdlet से आउटपुट का उपयोग करना
लोगों के पास पहले प्रश्नों में से एक है जब वे स्क्रिप्टिंग के लिए पॉवरशेल का उपयोग करना शुरू करते हैं, एक और कार्रवाई करने के लिए एक cmdlet से आउटपुट को कैसे हेरफेर करना है।
पाइपलाइन प्रतीक |
एक cmdlet के अंत में इसका उपयोग किए गए डेटा को लेने और इसे अगले cmdlet को खिलाने के लिए किया जाता है। एक सरल उदाहरण केवल Get-ChildItem से दिखाए गए फ़ाइल की नाम संपत्ति दिखाने के लिए Select-Object का उपयोग कर रहा है:
Get-ChildItem | Select-Object Name
#This may be shortened to:
gci | Select Name
पाइपलाइन का अधिक उन्नत उपयोग हमें एक सेमीडलेट के आउटपुट को फॉर्च लूप में पाइप करने की अनुमति देता है:
Get-ChildItem | ForEach-Object {
Copy-Item -Path $_.FullName -destination C:\NewDirectory\
}
#This may be shortened to:
gci | % { Copy $_.FullName C:\NewDirectory\ }
ध्यान दें कि ऊपर दिया गया उदाहरण $ _ स्वचालित चर का उपयोग करता है। $ _ $ PSItem का लघु उपनाम है जो एक स्वचालित चर है जिसमें पाइप लाइन में वर्तमान वस्तु शामिल है।
टिप्पणी करते हुए
#
(हैश) प्रतीक का उपयोग कर लाइन को तैयार करके पावर स्क्रिप्ट पर टिप्पणी करना
# This is a comment in powershell
Get-ChildItem
आप क्रमशः टिप्पणी के आरंभ और अंत में <#
और #>
का उपयोग करते हुए मल्टी-लाइन टिप्पणियां भी कर सकते हैं।
<#
This is a
multi-line
comment
#>
Get-ChildItem
.Net लाइब्रेरी मेथड्स
Static .Net लाइब्रेरी मेथड्स को PowerShell से तीसरे ब्रैकेट में पूरी कक्षा के नाम को एनकैप करके और फिर विधि का उपयोग करके कॉल किया जा सकता है ::
#calling Path.GetFileName()
C:\> [System.IO.Path]::GetFileName('C:\Windows\explorer.exe')
explorer.exe
स्थैतिक तरीकों को कक्षा से ही बुलाया जा सकता है, लेकिन गैर-स्थिर तरीकों को कॉल करने के लिए .Net वर्ग (एक वस्तु) के उदाहरण की आवश्यकता होती है।
उदाहरण के लिए, AddHours विधि को System.DateTime वर्ग से ही नहीं कहा जा सकता है। इसके लिए कक्षा का एक उदाहरण आवश्यक है:
C:\> [System.DateTime]::AddHours(15)
Method invocation failed because [System.DateTime] does not contain a method named 'AddHours'.
At line:1 char:1
+ [System.DateTime]::AddHours(15)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
इस मामले में, हम पहले एक वस्तु बनाते हैं , उदाहरण के लिए:
C:\> $Object = [System.DateTime]::Now
फिर, हम उस ऑब्जेक्ट के तरीकों का उपयोग कर सकते हैं, यहां तक कि वे तरीके जो सीधे System.DateTime वर्ग से नहीं कहे जा सकते, जैसे AddHours:
C:\> $Object.AddHours(15)
Monday 12 September 2016 01:51:19
वस्तुओं का निर्माण
New-Object
cmdlet का उपयोग ऑब्जेक्ट बनाने के लिए किया जाता है।
# Create a DateTime object and stores the object in variable "$var"
$var = New-Object System.DateTime
# calling constructor with parameters
$sr = New-Object System.IO.StreamReader -ArgumentList "file path"
कई उदाहरणों में, डेटा को निर्यात करने या किसी अन्य कमांडलेट में भेजने के लिए एक नई वस्तु बनाई जाएगी। इसे इस तरह किया जा सकता है:
$newObject = New-Object -TypeName PSObject -Property @{
ComputerName = "SERVER1"
Role = "Interface"
Environment = "Production"
}
ऑब्जेक्ट बनाने के कई तरीके हैं। PSCustomObject
बनाने के लिए निम्न विधि संभवतः सबसे छोटा और सबसे तेज़ तरीका है:
$newObject = [PSCustomObject]@{
ComputerName = 'SERVER1'
Role = 'Interface'
Environment = 'Production'
}
यदि आपके पास पहले से ही एक वस्तु है, लेकिन आपको केवल एक या दो अतिरिक्त गुणों की आवश्यकता है, तो आप Select-Object
का उपयोग करके उस संपत्ति को जोड़ सकते हैं:
Get-ChildItem | Select-Object FullName, Name,
@{Name='DateTime'; Expression={Get-Date}},
@{Name='PropertieName'; Expression={'CustomValue'}}
सभी वस्तुओं को चर में संग्रहीत किया जा सकता है या पाइपलाइन में पारित किया जा सकता है। आप इन वस्तुओं को एक संग्रह में भी जोड़ सकते हैं और फिर अंत में परिणाम दिखा सकते हैं।
निर्यात-सीएसवी (और आयात-सीएसवी) के साथ वस्तुओं का संग्रह अच्छी तरह से काम करता है। CSV की प्रत्येक पंक्ति एक ऑब्जेक्ट है, प्रत्येक कॉलम एक संपत्ति है।
फ़ॉर्मेट कमांड ऑब्जेक्ट्स को डिस्प्ले के लिए टेक्स्ट स्ट्रीम में परिवर्तित करता है। ऑब्जेक्ट्स की प्रयोज्यता बनाए रखने के लिए किसी भी डाटा प्रोसेसिंग के अंतिम चरण तक प्रारूप- * कमांड का उपयोग करने से बचें।