PowerShell ، إخراج تراكم من Foreach
-
22-09-2019 - |
سؤال
يبدو أن هذا يجب أن يكون بسيطًا ، لكن PowerShell يفوز معركة أخرى معي. ما عليك سوى الرغبة في إخراج اسم جميع الخدمات التي تعمل على النظام ، ومسارها القابل للتنفيذ ، والأنبوب الذي يمكنني استخدامه للبحث من خلاله مثل أقل.
حتى الآن لدي:
$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | less
لكن هذا يعطيني "عنصر الأنابيب الفارغ غير مسموح به". يبدو أنني قد توصلت كثيرًا. يخبرني أي شخص كيفية إصلاح هذا ، إما عن طريق الإخراج إلى ملف وسوء المرور به مع VIM ، أو أنبوب إلى الصفحة/أقل/إلخ حتى أتمكن من إجراء فحص سريع (مع عيني لم يكن برمجيًا بعد).
المحلول
حاول القيام بما يلي
$services | %{ $_.Pathname } | less
تعديل أضف العديد من المسار
$services | %{ "{0} {1}" -f $_.Pathname,$_.Name } | less
نصائح أخرى
إذا كنت تستخدم PowerShell 2.0 ، فقد يعجبك هذا:
gwmi win32_service | select-object Name,PathName | ogv
OGV (الإخراج-GridView) هو cmdlet جديد في 2.0.
get-wmiobject win32_service | select-object name, pathname | more
هذا هو أيضا PowerShell 2.0 وهو قريب من التعليق أعلاه. كنت تحاول فقط استخدام foreach عندما لا تحتاج إلى ذلك في هذه الحالة.
حتى مع Foreach ، كنت على وشك الحصول على إخراج يمكنك العمل معه. كانت الفاصلة في foreach قد أنشأت إخراجًا مثل القائمة ويمكن أن تستخدم الأمر أكثر بدلاً من أقل.
$services = get-WmiObject -query 'select * from win32_service'
foreach($service in $services){$service.Name $service.Pathname} | more
إليك طريقة أخرى لكتابة هذا البيان نفسه.
get-wmiObject win32_service | foreach {$.name ، $.PathName} | أكثر
هذا لا يزال ليس هو نفسه مثالي الأول ، لكنني أردت أن أوضح لك مدى قربك.
يبدو وكأنه سبب وجيه لاستخدام foreach-object:
$services = get-WmiObject -query 'select * from win32_service'
$services|ForEach-Object {$_|Select-Object Name,Pathname}|less
من فضلك معذرة أثناء خطك:
get-WmiObject -query 'select * from win32_service' |ForEach-Object {$_|Select-Object Name,Pathname}|less
سيقوم Foreach-Object بإرجاع كائن إلى خط الأنابيب بناءً على كائن الإدخال.
أفترض أن أقل هو الاسم المستعار في صنعك لأنني لا يبدو أنني أمتلكه.