পাওয়ারশেলে কীভাবে বস্তু গণনা করবেন?


140

আমি যেমন পাওয়ারশেল ব্যবহারকারী গাইডে পড়ছি, মূল পাওয়ারশেল ধারণাগুলির মধ্যে একটি হ'ল কমান্ডগুলি পাঠ্যের পরিবর্তে বস্তু গ্রহণ করে এবং ফেরত দেয় । সুতরাং উদাহরণস্বরূপ, দৌড়ানো get-aliasআমাকে বেশ কয়েকটি System.Management.Automation.AliasInfoঅবজেক্ট ফিরিয়ে দেয় :

পিএস জেড:।> গেট-ওরফে

কমান্ডটাইপ নাম সংজ্ঞা
----------- ---- ----------
এলিয়াস% ফর ইচ-অবজেক্ট
আলিয়াস? কোথায়-বস্তুর
অন্যান্য অ্যাড-সামগ্রী
এলিয়াস asnp অ্যাড-পিএসএসএনপিআইএন
এলিয়াস বিড়াল গেট-কনটেন্ট
এলিয়াস সিডি সেট-লোকেশন
উপস্থাপনা chdir সেট-অবস্থান
...

এখন, আমি কীভাবে এই জিনিসগুলির গণনা পেতে পারি?

উত্তর:


201

এটি আপনাকে গণনা করবে:

get-alias | measure

আপনি ফলাফল হিসাবে অবজেক্ট হিসাবে কাজ করতে পারেন:

$m = get-alias | measure
$m.Count

এবং আপনি যদি কিছু ভেরিয়েবলেরও এলিয়াস রাখতে চান তবে আপনি টি-অবজেক্টটি ব্যবহার করতে পারেন:

$m = get-alias | tee -Variable aliases | measure
$m.Count
$aliases

মেজার-অবজেক্ট সেমিডলেট সম্পর্কিত আরও কিছু তথ্য প্রযুক্তিতে রয়েছে

এটি পরিমাপ-কমান্ডের সিএমডিলেট দিয়ে বিভ্রান্ত করবেন না যা সময় পরিমাপের জন্য। (আবার প্রযুক্তিতে )


3
$Counter = $(get-alias | measure).Countআপনি যেমন বলেছিলেন কেবল তেমন একটি ঘটনা ঘটলে আমি সর্বদা 1 মান প্রদান করে থাকি বলে আমি ব্যবহার করেছি ।
ডার্কলাইট 1

6
আরেকটি বিকল্প:get-alias | measure | % { $_.Count }
শমীর

fyi: measureসংক্ষিপ্ত জন্য Measure-Object; মত - এবং অন্যান্য উপাদান অনেক ফেরৎ Average, Sum, Maximum, ইত্যাদি ...
BrainSlugs83

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

3
@ শমীর যখন আমরা এটিতে থাকি তখন কেউ এর Get-Alias | Measure-Object | Select-Object -ExpandProperty Countথেকে মুক্তি %এবং ব্যবহার করতে পারে {}। যা লিখতে ও পড়তে সহজ তা অন্য আলোচনার জন্য।
লসম্যানোস

110

@ জাম্বোয়ের সংক্ষিপ্তর উত্তরটি :-) আপনি এটি আরও বেশি সংক্ষেপে করতে পারেন। এটি কেবল Countপূর্বের সাব-এক্সপ্রেশন দ্বারা ফিরে আসা অ্যারের সম্পত্তিটি দেয়:

@(Get-Alias).Count

একটি দম্পতি লক্ষণীয়:

  1. আপনি স্থানে একটি নির্বিচারে জটিল অভিব্যক্তি রাখতে পারেন Get-Alias, উদাহরণস্বরূপ:

    @(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count
  2. শক্তিশালী সমাধানের জন্য প্রাথমিক এ-সাইন (@) প্রয়োজনীয় । যতক্ষণ উত্তর দুটি বা তার বেশি হয় আপনি @ এর সাথে বা তার বাইরেও সমমানের উত্তর পাবেন তবে উত্তরটি শূন্য বা এক হলে আপনার @ সাইন না থাকলে কোনও আউটপুট পাবেন না ! (এটি Countআউটপুটটিকে অ্যারে হিসাবে জোর করে সম্পত্তিটি অস্তিত্ব করতে বাধ্য করে))

2012.01.30 আপডেট

উপরেরটি পাওয়ারশেল ভি 2 এর ক্ষেত্রে সত্য। পাওয়ারশেল ভি 3 এর নতুন বৈশিষ্ট্যগুলির একটি হ'ল আপনার কাছে Countএমনকি সিঙ্গলটনের জন্যও সম্পত্তি রয়েছে, তাই এ-সিনটি এই দৃশ্যের জন্য গুরুত্বহীন হয়ে ওঠে।


3
আমি জানি এটি পুরানো, তবে অন্যেরা যারা এটি সন্ধান করছেন তাদের জন্য ... v3 + যদি Set-StrictMode -Version Latestব্যবহার করা হয় তবে <গণনার জন্য <2 ছাড়াই কাজ করবেন না বলে মনে হয় । আমি আজ এটির মধ্যে দৌড়েছি (5.1 এ) - এমন কিছু ইন্টারেক্টিভভাবে কাজ করেছে যা কোনও ফাংশনে কাজ করে না। আমি এটিকে ফাংশনটিতে সারণি করেছি - এতে সেট-স্ট্রাইকডমড রয়েছে; আমি যখন ইন্টারেক্টিভভাবে কড়া মোড সেট করি তখন তা কার্যকর হয় না।
vr8ce

ভাল ক্যাচ, @ ভিআর 8 এস! আমিও এর প্রবল উকিল Set-StrictMode, তাই আমার এটা লক্ষ্য করা উচিত ছিল।
মাইকেল সোরেন্স

@ Vr8ce এর পরামর্শকে প্রসারিত করার জন্য, আমি বিদ্যমান (অবজেক্ট) উপর একটি গণনা পেতে @ ($ myObject) ব্যবহার করতে পারিনি। সুতরাং আমি গণনা সম্পত্তিটি পরীক্ষা করার চেষ্টা করার আগে একটি if ($myObject.PSobject.Properties.Name -contains "count")( স্ট্যাকওভারফ্লো.com/ জিজ্ঞাসা / 26997511/… থেকে ) ব্যবহার করি । আমি ঘৃণা করি যে পিওএসএইচ আমাকে এই কাজটি করে তোলে তবে স্ট্রাইক মোড এটির পক্ষে মূল্যবান।
duct_tape_coder

21

কেবল বন্ধনী এবং 'গণনা' ব্যবহার করুন। এটি পাওয়ারশেল ভি 3-র ক্ষেত্রে প্রযোজ্য

(get-alias).count

1
এটি প্রশ্নের উত্তর সরবরাহ করে না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন।
জো

@ ড্যামিয়েন ঠিক আছে আমি সম্পাদনা করেছি। SO এ লোকেরা সাধারণত শেষের প্রথম উত্তর থেকে আসে। তারা হঠাৎ তৃতীয় উত্তরে ঝাঁপিয়ে পড়বে এবং বিভ্রান্ত হবে। যাতে আমি এটি প্রথম দুটি উত্তরের ধারাবাহিকতা হিসাবে তৈরি করেছি। এই উত্তরটি আরও সার্থক করে তোলে তবে এটি সম্পাদিত।
প্রভাকরণ

1
এটি ইতিমধ্যে এই উত্তরে isাকা পড়েছে । আপনার মূলত যা বলা হয়েছে তার দু'বছর পরে ইতিমধ্যে যা বলা হয়েছে তা পুনরায় পুনরাবৃত্তি করুন।
লিয়াম

1
@ লিয়াম এই উত্তরটি পাওয়ারশেল ভি 2 এর জন্য। আমার উত্তর পাওয়ারশেল v3 এর জন্য। যেমনটি আপনি বলেছিলেন যে এই উত্তরটি উত্তরটিতে আক্ষরিকভাবে আপডেট হয়েছে (2012.01.30 আপডেট) এর সাথে আক্ষরিকভাবে বলা হয়েছে। আমি শুধু কোডিং অংশ দিয়েছি।
প্রভাকরণ

5

@($output).Countসর্বদা সঠিক ফলাফল দেয় না। আমি ($output | Measure).Countপদ্ধতিটি ব্যবহার করেছি ।

আমি এটি ভিএমওয়্যার গেট-ভিএমকিউশন সিএমডিলেট দিয়ে পেয়েছি:

$output = Get-VmQuestion -VM vm1
@($output).Count

উত্তরটি একটি দিয়েছে, যদিও

$output

কোনও আউটপুট উত্পাদিত হয়নি ( Measureপদ্ধতির সাথে উত্পাদিত হিসাবে সঠিক উত্তরটি 0 ছিল )।

এটি কেবল 0 এবং 1 এর ক্ষেত্রে বলে মনে হয়েছিল 1 টির উপরে যে কোনও কিছুই সীমাবদ্ধ পরীক্ষার মাধ্যমে সঠিক ছিল।


ক্রিস, আমি আপনাকে যা করতে চেয়েছিলাম তা পাওয়ার জন্য আমি মনে করি যে এটি করা দরকার: @ (গেট-ভিএমকিউশন -ভিএম ভিএম 1) । আপনি কি করছেন
ড্যানিয়েল পিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.