PowerShell स्क्रिप्ट में बैच फ़ाइल से पैरामीटर पारित करें


90

मेरी बैच फ़ाइल में, मैं इस तरह PowerShell स्क्रिप्ट को कॉल करता हूं:

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"

अब, मैं एक स्ट्रिंग पैरामीटर पास करना चाहता हूं START_DEV.ps1। चलो का कहना है कि पैरामीटर है w=Dev

मैं यह कैसे कर सकता हूँ?


1
क्या स्क्रिप्ट नामांकित पैरामीटर या एक अनाम नाम की उम्मीद करती है?
vonPryz

जवाबों:


142

मान लें कि आप Devअपनी बैच फ़ाइल से स्ट्रिंग को एक पैरामीटर के रूप में पास करना चाहते हैं :

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"

अपनी शक्तियां स्क्रिप्ट हेड के अंदर रखें:

$w = $args[0]       # $w would be set to "Dev"

यदि आप अंतर्निहित चर का उपयोग करना चाहते हैं $args। अन्यथा:

 powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""

और आपकी शक्तियाँ स्क्रिप्ट हेड के अंदर:

param([string]$Environment)

यदि आप एक नामित पैरामीटर चाहते हैं।

आपको त्रुटि स्तर वापस करने में भी रुचि हो सकती है:

powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"

त्रुटि स्तर बैच फ़ाइल के अंदर उपलब्ध होगा %errorlevel%


24

अपनी लिपि को मान लेना कुछ इस तरह से है जैसे कि नीचे दिए गए स्निपेट और नाम testargs.ps1

param ([string]$w)
Write-Output $w

आप इसे कमांडलाइन पर कॉल कर सकते हैं:

PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"

यह कंसोल पर "टेस्ट स्ट्रिंग" (w / o कोट्स) प्रिंट करेगा। "टेस्ट स्ट्रिंग" स्क्रिप्ट में $ w का मूल्य बन जाता है।


13

जब कोई स्क्रिप्ट लोड की जाती है, तो पास होने वाले किसी भी पैरामीटर को स्वचालित रूप से एक विशेष चर में लोड किया जाता है $args। आप अपनी स्क्रिप्ट में पहली बार घोषित किए बिना उसका संदर्भ दे सकते हैं।

एक उदाहरण के रूप में, नामक एक फ़ाइल बनाएं test.ps1और बस $argsएक लाइन पर चर को अपने आप से बनाएं । स्क्रिप्ट को इस तरह से आमंत्रित करना, निम्न आउटपुट उत्पन्न करता है:

PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three

एक सामान्य सिफारिश के रूप में, जब पॉवरशेल को कॉल करके किसी स्क्रिप्ट को सीधे इनवॉइस -Fileकरने के बजाय मैं विकल्प का उपयोग करने का सुझाव दूंगा &- यह कमांड लाइन को थोड़ा क्लीनर बना सकता है, खासकर यदि आपको नेस्टेड कोट्स से निपटने की आवश्यकता है।


7

Ps1 फ़ाइल के शीर्ष पर पैरामीटर घोषणा जोड़ें

test.ps1

param(
  # Our preferred encoding
  [parameter(Mandatory=$false)]
  [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
  [string]$Encoding = "UTF8"
)

write ("Encoding : {0}" -f $Encoding)

परिणाम

C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII

6

@ ईमिलियानो का उत्तर उत्कृष्ट है। आप नामांकित पैरामीटर भी पास कर सकते हैं जैसे:

powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"

ध्यान दें कि पैरामीटर कमांड कॉल के बाहर हैं, और आप उपयोग करेंगे:

[parameter(Mandatory=$false)]
  [string]$NamedParam1,
[parameter(Mandatory=$false)]
  [string]$NamedParam2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.