कारण आपको यह देखने का कारण है कि सदस्य-शक्तियां शक्तियां उपयोगी और संग्रह को अनलॉक करने की कोशिश कर रही हैं। यदि आपके पास कई प्रकार के आइटम हैं, तो यह आपको प्रत्येक प्रकार के सदस्यों को दिखाता है (जैसे कि आप 'ls' (Get-ChildItem) हैं और निर्देशिका में FileInfos और DirectoryInfos हैं, और आप पाइप ls | gm , यह आप भी DirectoryInfos के सदस्य) का एक और समूह FileInfos के सदस्यों और दिखाएगा:
(7) C:\ -» ls
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 5/28/2010 8:19 AM .hg
d---- 5/13/2010 3:37 PM Build
…
-a--- 4/22/2010 11:21 AM 2603 TODO.org
(8) C:\ -» ls | gm
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
Mode CodeProperty System.String Mode{get=Mode;}
Create Method System.Void Create(System.Security.AccessControl.Direct...
…
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Mode CodeProperty System.String Mode{get=Mode;}
AppendText Method System.IO.StreamWriter AppendText()
…
क्या मैं आमतौर पर करते हैं, यकीन है कि मैं unrolled सदस्यों पर नहीं देख रहा हूँ बनाने के लिए, कोशिश "$ s.GetType है() .Name "सबसे पहले यह देखने के लिए कि मैं किसके साथ काम कर रहा हूं। आपके मामले में, यह स्पष्ट रूप से और सरणी है, क्योंकि आपने इसे "$ s = @ (इनवो" (@ = यह एक सरणी है)
यह पता लगाने के लिए कि किसी सरणी में कोई आइटम है या नहीं, आप इसका उपयोग कर सकते हैं - शामिल ऑपरेटर:
(9) C:\ -» @(1,2,3) -contains 1
True
मुझे लगता है कि आप तार की एक सरणी मिल गया है, तो आप की तरह शाब्दिक एक स्ट्रिंग का उपयोग कर सकते:
(10) C:\ -» @("Stuff","you've","got","might have","Expired") -contains "Expired"
True
लेकिन अगर समय सीमा समाप्त हो सटीक मेल नहीं है (आप एक तत्व की तलाश में था जिसमें समाप्त हो गया था, जैसे "कनेक्शन समाप्त हो गया 1/1/2010") आपको मैचों को खोजने और वें की जांच करने की आवश्यकता है ई गिनती, मुझे लगता है:
(23) C:\ -» @("Stuff","you've","got","might have","Connection Expired 1/1/2010") -contains "Expired"
False
(24) C:\ -» @("Stuff","you've","got","might have","Connection Expired 1/1/2010") | ?{$_.Contains("Expired")}
Connection Expired 1/1/2010
(33) C:\ -» $xs = @("Stuff","you've","got","might have","Connection Expired 1/1/2010") | ?{$_.Contains("Expired")}
(34) C:\ -» $xs.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
(35) C:\ -» $xs
Connection Expired 1/1/2010
इस मामले में, वहाँ केवल एक मैच है, इसलिए powershell एक स्ट्रिंग के लिए यह unrolled। जर्क। यदि 1 से अधिक मैचों हैं, हालांकि:
(36) C:\ -» $xs = @("Stuff","you've","got","might Expired have","Connection Expired 1/1/2010") | ?{$_.Contains("Expired")}
(37) C:\ -» $xs.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
(38) C:\ -» $xs
might Expired have
Connection Expired 1/1/2010
अब यह एक सरणी है।
सौभाग्य से, दोनों स्ट्रिंग और सरणी लंबाई संपत्ति है:
(39) C:\ -» $xs.Length
2
(40) C:\ -» "Bob".Length
3
तो आपको लगता है कि शामिल "समय सीमा समाप्त" अपने परिणामों की लंबाई की जांच कर रहे हैं, तो देखने के लिए कर सकते हैं के किसी भी समाप्त हो गई है:
(41) C:\ -» $xs = @("Stuff","you've","got","might Expired have","Connection Expired 1/1/2010") | ?{$_.Contains("Expired")}
(42) C:\ -» if ($xs.Length -gt 0) { Write-Host "Whoas, stuff's expired, dog." }
Whoas, shit's expired, dog.
(शायद किसी के पास यह जांचने का एक बेहतर तरीका है कि किसी संग्रह में कोई आइटम है जो कुछ अनुमानित करता है (जैसे कि LINQ का कोई भी)?
धन्यवाद क्रिस है उपयोग करने के लिए है! यह निश्चित रूप से मुझे सही दिशा में मिला। कार्य स्क्रिप्ट: $ s = @ (आह्वान-Sqlcmd -query "उपयोग डीबी GO कार्यकारी Monitor_TEST_ps 'EXPORT_RUN', शून्य, 20" ' -ServerInstance" testdb002 \ testdb_002 ") अगर ($ s | {? $ _ ['स्थिति'] -ईक 'ओके'}) { लिखें-होस्ट "समाप्त हो गया, असफल।" } अन्य { लिखें-होस्ट "नहीं मिला, ठीक है।" } – xbnevan