निम्नलिखित पॉवर्सशेल स्क्रिप्ट पर विचार करें, जो C: \ में अपने नाम में 'og' के साथ फ़ोल्डर खोजता है:
PS C: \> (ls |% {$ _। Name} | {$ _। समाहित है ("og")}) PerfLogs कार्यक्रम फाइलें Setup.log
अब मैं केवल एक वस्तु प्राप्त करने के लिए खोज को संकुचित करता हूं:
PS C: \> (ls |% {$ _। Name} | {$ _। समाहित है ("प्रोग")) " कार्यक्रम फाइलें
अजीब बात यह है कि पहला ऑपरेशन एक सरणी देता है , जबकि दूसरा ऑपरेशन (जो कि आईएमएचओ शब्दार्थ रूप से एक ही ऑपरेशन है, इसलिए इसे एक ही प्रकार के परिणाम प्राप्त करना चाहिए) एक स्ट्रिंग पैदा करता है । इसे निम्नलिखित परिणाम में देखा जा सकता है:
PS C: \> (ls |% {$ _। Name} | {$ _। समाहित है ("og))") लंबाई। 3 PS C: \> (ls |% {$ _। Name} | {$ _। समाहित है ("Prog))}। लंबाई 13
यह बहुत परेशान कर देने वाला हो सकता है, क्योंकि जाहिर तौर पर 'ओग' से मैच करने वालों की तुलना में 'ओग' से कम फोल्डर होते हैं।
जाहिर है, PowerShell ने एक वस्तु के लिए एक एकल-वस्तु सरणी को 'unboxes' कहा है, और हमें लंबाई 1. कभी नहीं मिलती है। ऐसा लगता है कि हर बार जब मैं पाइपलाइन पर आने वाले परिणामों को गिनना चाहता हूं, तो मुझे जांचना होगा कि क्या मैं ' एक सरणी या नहीं के साथ काम कर रहा हूँ।
मेरे द्वारा इसे होने से कैसे रोका जा सकता है? आप इस के साथ कैसे पेश आएंगे?
$_.Contains
, तो%{,,$_.Name}
काम करता है ...