পাওয়ারশেল ইস্যু - যদি বিবৃতি কোঁকড়া বন্ধনী


3

আমি পিএস এর সাথে কিছু নিয়ে এসেছি এবং আমি জানি না যে আমি কিছু ভুল করছি বা সম্ভবত এটি পিএস-তে একটি বাগ (এবং আমি উত্তর কোথাও খুঁজে পাচ্ছি না)? আমি বিভিন্ন উইন্ডোজ ওএস ব্যবহার করে PS v4, v5.0 এবং v5.1 এর মাধ্যমে এটি পরীক্ষা করেছি। প্রথমত, এটি মনে হয় যে ওএস কী তা নয় এবং পিএস সংস্করণটি যাই হোক না কেন, যখন আমি নীচে নিম্নলিখিত কোড স্নিপেট সরাসরি পিএস উইন্ডো বা পিএস স্ক্রিপ্টের মাধ্যমে চালনা করি তখন আমি কোনও ত্রুটি পাই না এবং সবকিছু ঠিক আছে বলে মনে হয় appears :

$error.clear()
If ($error -ne $null) { $error }

তবে নির্দিষ্ট ধরণের সিস্টেমে (ওএস-ভিত্তিক সমস্যা বলে মনে হচ্ছে), আমি নিম্নলিখিত কোডটি চালিত করি এবং কখনও কখনও আমি ত্রুটি পাই:

$error.clear()
If ($error -ne $null)
{
$error
}

আমি উইন্ডোজ 10 এবং উইন্ডোজ 2016 সার্ভারগুলিতে উপরের ত্রুটি-উত্পন্ন কোডটি চালাতে পারি এবং সবকিছু ঠিক আছে (কোনও ত্রুটির খবর দেওয়া হয় না)। আমি যদি উইন্ডোজ 2008 আর 2 বা উইন্ডোজ 2012 আর 2 তে ঠিক একই কোডটি চালাই তবে আমি নিম্নলিখিত ত্রুটি বার্তাটি পেয়েছি:

Missing statement block after If ( condition ).

আমার কাছে উইন্ডোজ ২০০৮ আর ২ এবং উইন্ডোজ ২০১২ আর 2 সিস্টেমে পিএস 4, 5 বা 5.1.1 ইনস্টল করা আছে কিনা তা এখনও মনে হচ্ছে না, তবুও ত্রুটিটি পেয়েছি। এবং আমি অ্যাডমিন হিসাবে চালিয়ে যাচ্ছি কি না, একই ফলাফল বলে মনে হচ্ছে না। এবং তারা ডোমেন-যোগ হয়েছে বা ওয়ার্কগ্রুপ সিস্টেম কিনা তা কোনও পার্থক্য বলে মনে হচ্ছে না। আমাদের সমস্ত সিস্টেম মে 2017 প্যাচ মঙ্গলবার আপডেট হিসাবে প্যাচ করা হয়।

এটি কি পিএসের প্রয়োজনীয়তা (উইন্ডোজ ২০০৮ আর ২ এবং উইন্ডোজ ২০১২ আর 2 সিস্টেমে) যে কোনও পিএস "আইএফ" স্টেটমেন্টের খোলার কোঁকড়ানো বন্ধনীটি অবশ্যই আইএফ স্টেটমেন্টের মতো একই লাইনে থাকতে হবে? উইন্ডোজ 10 এবং উইন্ডোজ 2016 সার্ভারের পক্ষে এমনটি মনে হয় না।

আগাম ধন্যবাদ,

ইউজিসির


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

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

@ কিনেক্টাস - যখন সূচিত কোঁকড়া বন্ধনী একই লাইনে থাকে তখন আমরা কোনও ত্রুটি পাই না (তবে এটি কেবল উইন্ডোজ ২০০৮ আর ২ এবং উইন্ডোজ ২০১২ আর 2 এর ক্ষেত্রে প্রযোজ্য)। উইন্ডোজ 10 এবং উইন্ডোজ 2016 ব্র্যাকেটটি কোনও নতুন লাইনে প্রবেশ করেছে কিনা তা মনে করবে না।
এসটিজিডিবি

@ ফ্র্যাঙ্ক থমাস - পিএস উইন্ডো থেকে সরাসরি এটি চালানো (উইন্ডোজ ওএসে নির্মিত একটি) ত্রুটি তৈরি করে। আমি একটি ওয়ার্কগ্রুপে ক্লিন সার্ভার ওএস স্থাপন করেছি (সরাসরি এমএস আইএসও মিডিয়া থেকে) নতুন 2012 আর 2 সার্ভারে একই ফলাফল পেয়েছি (এতে "অতিরিক্ত কিছু" ইনস্টল করা হয়নি এবং ওএস প্যাচ করা হয়নি)। এটি অবশ্যই ওএস সম্পর্কিত বলে মনে হচ্ছে।
এসটিজিডিবি

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

উত্তর:


0

পাওয়ারশেলকে কোডের একটি লাইন (বা ব্লক) খাওয়ানো হয় - এটি সম্পূর্ণরূপে সেই ব্লক (বা লাইন )কে মূল্যায়ন করে

এই ক্ষেত্রে, আপনার প্রথম লাইনটি হ'ল: If ($error -ne $null)

পাওয়ারশেল কীভাবে রেখাটি ফাঁকা করতে জানে, তবে এটির অবৈধ বাক্য গঠন কারণ পাওয়ারশেলের মানদণ্ড পূরণের ইভেন্টে "কী করতে হবে" ব্লক নেই।

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

আপনি যদি সম্পূর্ণরূপে ব্লকটি পাওয়ারশেলকে খাওয়ান - এটি "কী করতে হবে" ব্লকটিকে স্বীকৃতি দেয় এবং এটি কোথায় যেতে হবে তা জানেন:

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

আপনি কোন সিস্টেমে এবং প্ল্যাটফর্মগুলি সন্ধান করছেন যা একক লাইন গ্রহণ করে সে সম্পর্কে আরও বিশদটি জানাতে সক্ষম? আমি এটি এখন উইন 10 (পাওয়ারশেল 5), 2012 আর 2 (পাওয়ারশেল 4 এবং 5), উইন্ডোজ 7 (পাওয়ারশেল 4 এবং 5) এ পরীক্ষা করে দেখেছি এবং তারা সবাই ঠিক একইরকম আচরণ করে।


0

আমার স্টেটমেন্ট ব্লকে একটি এখানে স্ট্রিং অন্তর্ভুক্ত করার সময় আমার একই সমস্যা হয়েছিল

If ($error -ne $null)
{
 $query = @" 
 do some sql;
 do more sql; 
 "@
}

আমি যখন এটিকে এখানে স্ট্রিং ছাড়াই একটি লাইনে পরিবর্তন করেছি তখন এটি কাজ করে

If ($error -ne $null)
{
 $query = "do some sql;do more sql;"
}

আপনার স্টেটমেন্ট ব্লকে এমন কিছু থাকতে পারে যা পাওয়ারশেলটি মাল্টলাইন হিসাবেও অনুমতি দেয় না।

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