একটি ব্যাচ ফাইল থেকে পাওয়ারশেল স্ক্রিপ্টে প্যারামিটারটি পাস করুন


90

আমার ব্যাচ ফাইলে, আমি পাওয়ারশেল স্ক্রিপ্টটিকে এভাবে কল করি:

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

এখন, আমি একটি স্ট্রিং প্যারামিটারটি পাস করতে চাই START_DEV.ps1। ধরা যাক প্যারামিটারটি w=Dev

কিভাবে আমি এটি করতে পারব?


4
স্ক্রিপ্টটি কি নামকরণকৃত প্যারামিটার বা একটি বেনামের আশা করবে?
ভনপ্রাইজ

উত্তর:


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

ধরে নিচ্ছি আপনার স্ক্রিপ্টটি নীচের স্নিপেট এবং নামের টেস্টার্গস.পিএস 1 এর মতো কিছু

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

আপনি কমান্ডলাইনে এটিকে কল করতে পারেন:

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

এটি কনসোলে "টেস্ট স্ট্রিং" (ডাব্লু / ও কোট) মুদ্রণ করবে। "টেস্ট স্ট্রিং" স্ক্রিপ্টে $ 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.