मैं अपने सर्वर से परिवर्तन और संबंधित वर्कइटम के बारे में कुछ जानकारी प्राप्त करने के लिए PowerShell में TFS PowerTools Cmdlets का उपयोग कर रहा हूं। मैंने समस्या को हल करने के लिए समस्या को उबाल दिया है और मुझे उम्मीद है कि यह टीएफएस विशिष्ट नहीं है (इसलिए कोई व्यक्ति मुझे समस्या की व्याख्या करने में सक्षम हो सकता है :))पावरशेल फॉरएच/पाइपिंग भ्रम
यहां एकमात्र आदेश है जो मैं कर सकता हूं काम करने के लिए मिल:
Get-TfsItemHistory C:\myDir -recurse -stopafter 5 | % { Write-Host $_.WorkItems[0]["Title"] }
यह मैं क्या उम्मीद करता है - Get-TfsItemHistory 5 changesets की सूची लौटाता है, और यह पाइप एक foreach कि पहली जुड़े WorkItem का शीर्षक बाहर प्रिंट करने के लिए उन। तो मेरी समस्या क्या है? मैं एक बड़ी लिपि लिखने की कोशिश कर रहा हूं, और मैं सी # प्रोग्राम की तरह दिखने के लिए चीजों को कोड करना पसंद करता हूं (पावरहेल सिंटैक्स मुझे रोता है)। जब भी मैं उपर्युक्त लिखित किसी भी अन्य तरीके से करने की कोशिश करता हूं, तो WorkItems संग्रह शून्य है।
निम्न कमांड (जो मैं तार्किक बराबर होने का व्याख्या) काम नहीं करते (WorkItems संग्रह रिक्त है):
$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5 $items | ForEach-Object { Write-Host $_.WorkItems[0]["Title"] }
एक मैं वास्तव में पसंद करेंगे:
$items = Get-TfsItemHistory C:\myDir -recurse -stopafter 5 foreach ($item in $items) { $item.WorkItems[0]["Title"] # do lots of other stuff }
मैंने पढ़ा 'foreach' ऑपरेटर और फॉरएच-ऑब्जेक्ट सीएमडीलेट के बीच अंतर के बारे में एक लेख, लेकिन ऐसा लगता है कि यह एक प्रदर्शन बहस का अधिक है। यह वास्तव में एक मुद्दा है जब पाइपिंग का उपयोग किया जा रहा है।
मुझे यकीन नहीं है कि इन तीनों में से तीन दृष्टिकोण क्यों काम नहीं करते हैं। किसी भी अंतर्दृष्टि की सराहना की है।
मुझे यकीन नहीं है कि समस्या क्या है, लेकिन यह निश्चित रूप से टीएफएस सीएमडीलेट्स के लिए विशिष्ट है (वे बल्कि भयानक, आईएमओ हैं)। ऐसा प्रतीत होता है कि cmdlet आलसी लोडिंग कर रहा था, और एक बार पाइपलाइन समाप्त होने के बाद, डेटा संदर्भ समाप्त हो गया है और डेटा लोड करने में बहुत देर हो चुकी है, लेकिन cmdlets का डिज़ाइन इतनी गड़बड़ है कि मैं इसे अब तक ट्रैक नहीं कर सकता । – Jaykul