अब यह शायद एक बहुत ही सरल समाधान है, लेकिन मुझे यह समझ में नहीं आ रहा है। मैं एक विशिष्ट फ़ाइल प्रकार के लिए एक निर्देशिका और उसके उप-फ़ोल्डर खोजने की कोशिश कर रहा हूं। फ़ाइल मौजूद होने पर मेरा कोड वर्तमान में सत्य के रूप में लौटता है, लेकिन मैं इसे टर्मिनल पर झूठी वापसी करने की भी कोशिश कर रहा हूं। नीचे मेरा कोड है

Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"| ForEach-Object {Test-Path $_}

अब यह टर्मिनल पर उस फ़ोल्डर के लिए true के रूप में वापस आ जाएगा जिसमें PEM फ़ाइल है। लेकिन मैं चाहता हूं कि यह उस फ़ोल्डर के लिए टर्मिनल पर false के रूप में भी वापस आए, जिसमें फ़ाइल नहीं है, क्योंकि मैं प्रदर्शन करने के लिए true और false का उपयोग करने की योजना बना रहा हूं। कोड के विभिन्न सेट।

1
Fitzgery 24 मार्च 2020, 18:33
रुको ... यह पहले से ही $false वापस आ जाना चाहिए ... इसका कारण यह कभी भी झूठा नहीं लौट रहा है क्योंकि आप पहले से ही वस्तुओं की एक सूची लौटाकर अस्तित्व के लिए परीक्षण कर रहे हैं, Get-ChildItem के माध्यम से जो विंडोज़ प्रदान कर रहा है जो हमेशा होगा मौजूद है ... इसलिए आपको कभी भी झूठ नहीं मिल रहा है क्योंकि आप जिन वस्तुओं को पास कर रहे हैं, वे पहले से मौजूद हैं।
 – 
thepip3r
24 मार्च 2020, 18:43
ठीक है, जिस मुद्दे पर मुझे लगता है कि मैं मुख्य रूप से चल रहा हूं, मैं इसे $true और $false वापस करने के लिए प्राप्त कर सकता हूं लेकिन यह प्रत्येक फ़ोल्डर में प्रत्येक फ़ाइल की जांच करता है और 1 सत्य और 8 गलत लौटाएगा। मैं यह पता लगाने की अधिक कोशिश कर रहा हूं कि क्या फ़ोल्डर में विशिष्ट फ़ाइल एक्सटेंशन मौजूद है $true और यदि यह मौजूद नहीं है तो $false लौटाएं। तो अंततः यह 1 $true और 1 $false दिखाएगा
 – 
Fitzgery
24 मार्च 2020, 18:50
तो स्पष्टीकरण के लिए, आप जो चाहते हैं वह यह जानना है कि किस निर्देशिका में .PEM फाइलें हैं और आप रिपोर्ट करना चाहते हैं कि किन निर्देशिकाओं में कितनी PEM फाइलें हैं?
 – 
thepip3r
24 मार्च 2020, 18:52
ठीक है, मैं जानना चाहता हूं कि निर्देशिका में पीईएम फ़ाइल है या नहीं। मैं आखिरकार जो करने की कोशिश कर रहा हूं वह है; यदि उसके पास PEM फ़ाइल होती है तो वह Y करेगी और यदि उसके पास PEM फ़ाइल नहीं है तो वह चरण X और फिर Y करेगी।
 – 
Fitzgery
24 मार्च 2020, 18:55
आपको इस तरह से प्रारंभ करवाया जाना चाहिए।
 – 
thepip3r
24 मार्च 2020, 19:07

2 जवाब

सबसे बढ़िया उत्तर
$s = 'C:\Users\user\Desktop\Source'

foreach ($d in (Get-ChildItem -Recurse $s -Directory:$true)) {
    if ($d.GetFiles('*.pem')) { 
        $true 
    } else { 
        $false 
    }
}

यह आपको शुरू करना चाहिए... मैं वास्तव में चाहता हूं कि पावरशेल में एक अंतर्निर्मित टर्नरी निर्माण हो ...

1
thepip3r 24 मार्च 2020, 19:03
1
पावरशेल 7 में एक टर्नरी ऑपरेटर है: https://toastit.dev/ 2019/09/25/टर्नरी-ऑपरेटर-पॉवरशेल-7/
 – 
RoadRunner
24 मार्च 2020, 19:05
मेरे पास पीएस 7 है, इसलिए मैं टर्नरी ऑपरेटर चीज़ को देख लूंगा। मुझे यकीन नहीं है कि मैं इसका उपयोग करूंगा क्योंकि मुझे अभी भी 5.1.1 का समर्थन करना है। लेकिन शुरुआत के लिए धन्यवाद और मुझे लगता है कि मैं अपनी जरूरतों के लिए वह काम कर सकता हूं!
 – 
Fitzgery
24 मार्च 2020, 19:33
टर्नरी कार्यान्वयन: @($($True),$($False))[!$false] या @ शैडो2020 द्वारा दिखाया गया। $() सबएक्सप्रेशन ऑपरेटर में कोई भी अभिव्यक्ति हो सकती है।
 – 
Wasif
24 मार्च 2020, 20:30
1
मुझे नहीं लगता कि टर्नरी कार्यान्वयन इसके लायक है। सरल if..else कोड में कुछ भी गलत नहीं है। यह पठनीय और समझने में आसान है।
 – 
RoadRunner
25 मार्च 2020, 07:00
मैं इस उदाहरण में इसका उपयोग करने की अपेक्षा इसे अपने स्वयं के उपयोग के लिए अधिक विलाप कर रहा था ... लेकिन उचित नोट।
 – 
thepip3r
25 मार्च 2020, 18:30

यह आसान है। यदि $target_files का कोई मान है तो यह सत्य लौटाता है, यदि असत्य नहीं लौटाता है।

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"

if($target_files){
    write-host "This returns true if there are files."
}
else{
    write-host "This returns false if there are no files."
}

यदि आपके पास पावरहेल 7 है तो आप टर्नरी ऑपरेटर का उपयोग कर सकते हैं, हालांकि हम सभी के पास पावरहेल 7 नहीं है, इसलिए यदि आप आईएफ/ईएलएसई विधि में नहीं हैं तो भी इसे प्राप्त करने का एक तेज़ छोटा तरीका है। फ़ाइलें मौजूद हैं या नहीं, इस पर निर्भर करते हुए $result एक सही या गलत लौटाएगा।

$target_files = Get-ChildItem "$ScriptPath\$kit" -recurse -include "*.pem"
$result = (${true}, ${false})[-NOT $target_files]
3
shadow2020 24 मार्च 2020, 19:35