পাওয়ারশেল আইএসই স্ক্রিপ্ট স্কোপটিতে স্ক্রিপ্ট ভেরিয়েবলগুলি বিচ্ছিন্ন করে না কেন?


12

পাওয়ারশেলে, স্কোপিংয়ের মাধ্যমে বিশ্বব্যাপী পরিবেশকে প্রভাবিত করা থেকে স্ক্রিপ্টগুলিতে বস্তু (ভেরিয়েবল, উপকরণ, ফাংশন, ইত্যাদি) রাখার কথা রয়েছে। এটি কমান্ড লাইনে সূক্ষ্মভাবে কাজ করবে বলে মনে হচ্ছে, তবে আইএসই তে নয়।

এখানে কনসোলে একটি প্রদর্শন রয়েছে। আমি এটি পরীক্ষা করে দেখছি যে $xএটি বৈশ্বিক সুযোগে সংজ্ঞায়িত করা হয়নি, এর বিষয়বস্তুগুলি প্রদর্শন করে ScopeTest.ps1এবং তারপর এটি চালান এবং শেষ পর্যন্ত আমি $xআবার সংজ্ঞায়িত কিনা তা পরীক্ষা করে দেখি । যেমনটি প্রত্যাশিত, $xকেবল স্ক্রিপ্টের আওতায় তৈরি করা হয় এবং স্ক্রিপ্টটি সমাপ্ত হওয়ার পরে বৈশ্বিক পরিবেশে স্থির থাকে না।

এখানে চিত্র বর্ণনা লিখুন

আইএসইতে, স্ক্রিপ্টটি কনসোল উইন্ডো ব্যবহার করে কল করা হলে এটি কাজ করবে বলে মনে হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন

তবে, যদি আমি আসলে "স্ক্রিপ্ট রান করুন" বাটন বা এফ 5 ব্যবহার করি তবে স্ক্রিপ্টের মধ্যে ভেরিয়েবলগুলি সম্পূর্ণ হওয়ার পরে এটি অবিরত থাকবে।

এখানে চিত্র বর্ণনা লিখুন

এটি স্ক্রিপ্টগুলি লিখন এবং সমস্যা নিবারণটিকে কিছুটা জটিল করে তুলতে পারে, যদি স্ক্রিপ্টটি ধরে নেয় যে এটি একটি পরিষ্কার পরিবেশ থেকে শুরু হবে (যেমন: স্ক্রিপ্টের মধ্যে যে কোনও ভেরিয়েবল সেট থাকা উচিত নয়)। আইএসই কেন এভাবে আচরণ করে?

এই প্রশ্নের উত্তরটি "ডট-সোর্সিং" উল্লেখ করে কিছুটা সামান্য বিষয়টিকে স্পর্শ করে, তবে আমি এখানে আরও বিশদ ব্যাখ্যা পাব বলে আশা করছি। এছাড়াও, যদি স্ক্রিপ্টটি আইসইতে কনসোলের চেয়ে আলাদাভাবে চালিত হয় সে সম্পর্কে ডকুমেন্টেশন উপস্থিত থাকে, তবে একটি রেফারেন্সও খুব সুন্দর হবে।

উত্তর:


9

আপনার স্ক্রিপ্ট উদাহরণগুলিতে আপনি ভেরিয়েবল তৈরি করেছেন এবং আপনি আপনার স্ক্রিপ্টের শেষে এগুলি ধ্বংস করেন নি। আইএসই পাওয়ারশেলের একটি লাইভ উদাহরণ তৈরি করে যা স্ক্রিপ্টটি লোড করে এবং চালিত ক্লিক করার সময় চালিত করে। পার্থক্য হ'ল সংহত শেল স্ক্রিপ্টটি চালিয়ে যেতে পারে। পরিবেশটি ডিবাগ করার জন্য এবং আপনার যেতে যেতে স্ক্রিপ্ট তৈরি করার জন্য এটি আদর্শ। পরবর্তী লিখিত কোডটি কাজ করেছে তা নিশ্চিত করার জন্য আপনাকে আপনার স্ক্রিপ্টটি বার বার চালিয়ে যেতে হবে না (এমন পরিস্থিতি রয়েছে যেখানে এটি আদর্শ হবে না)। আপনি এটিকে শেলের মধ্যে টাইপ করুন এবং এটি যদি কাজ করে তবে আপনি এটিকে স্ক্রিপ্ট বিভাগে যুক্ত করুন।

এই আচরণটি সম্ভবত এখানে সর্বোত্তমভাবে বর্ণিত হয়েছে: http://technet.microsoft.com/en-us/library/dd819480.aspx

প্রাসঙ্গিক অংশ:

আইএসইতে সমস্ত প্যানগুলি সর্বদা একই স্কোপে থাকে।

আপনার স্ক্রিপ্টটি শেষ হওয়ার পরে যদি আপনি চান না যে আপনার ভেরিয়েবলগুলি শেলের মধ্যে থাকতে Remove-Variableপারে তবে সেগুলি আপনার উচিত ।

উদাহরণ স্বরূপ:

Remove-Variable x

আপনি ফাইল-> নতুন পাওয়ারশেল ট্যাব ক্লিক করে আইএসইতে পাওয়ারশেলের একটি "ক্লিন" উদাহরণ যোগ করতে পারেন


2

আইএসই পাওয়ারশেলটিতে মূলত স্ক্রিপ্টটি শেলের সাথে ফেলে দেওয়া হয় এবং তারপরে এটি চালানো হয়। যেন আপনি এটি শেলের মধ্যে টাইপ করেছেন, তবে এটি কার্যকর করুন। সুতরাং পরিবর্তনশীল যে অধিবেশন জন্য উপলব্ধ। অন্যান্য পার্থক্যগুলি দেখতে, এই এমএসডিএন পোস্টটি দেখুন।


লিঙ্কযুক্ত পোস্টে আমি এই আচরণটি সম্বোধন করে কিছুই দেখছি না।
ইসজি

0

সুতরাং আইএসই গ্লোবাল হিসাবে স্কোপড। আপনি আইএসইতে কাজ করার সময় তৈরি হওয়া সমস্ত ভেরিয়েবলগুলি সরিয়ে না নিলে স্ক্রিপ্ট চলার পরে সমস্ত ভেরিয়েবল উপলব্ধ থাকবে। আমি যখন আমার স্ক্রিপ্টটি তৈরি করতে ISE ব্যবহার করি তখন আমি সর্বদা একটি আলাদা পাওয়ারশেল কনসোল খোলা রেখে পরীক্ষা করব। এটি আমার উদ্দেশ্য হিসাবে সবকিছু কাজ করে তা নিশ্চিত করার অনুমতি দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.