2011-10-03 7 views
11

मैं पावरहेल सीखने की कोशिश कर रहा हूं और यदि कोई अन्य कथन बनाने की कोशिश की गई है:पावरशेल: अगर सही हो तो कैसे प्राप्त करें?

if ((Get-Process | Select-Object name) -eq "svchost") { 
    Write-Host "seen" 
    } 
    else { 
    Write-Host "not seen" 
    } 

यह "नहीं देखा" में समाप्त होता है, हालांकि svchost प्रक्रियाएं होती हैं। सही परिणाम प्राप्त करने के लिए इसे कैसे संशोधित करें?

उत्तर

10

आपका अगर-बाकी निर्माण एकदम सही है, लेकिन नीचे की तरह अगर हालत बदलने के लिए:

(Get-Process | Select-Object -expand name) -eq "svchost" 

शुरू में आप "svchost" जो गलत पर मूल्यांकन करेंगे करने के लिए एक वस्तु की तुलना कर रहे थे। -expandProperty ध्वज के साथ, आप ऑब्जेक्ट की उस संपत्ति को प्राप्त कर रहे हैं, जो एक स्ट्रिंग है और इसकी तुलना "svchost" से ठीक से की जा सकती है।

ध्यान दें कि उपर्युक्त में आप तारों की सरणी की तुलना कर रहे हैं, जिसमें प्रक्रिया का नाम "svchost" है। सरणियों के मामले में -eq "svchost" इस मामले में, सच है अगर सरणी अन्य अभिव्यक्ति शामिल

वहाँ अन्य "बेहतर" के साथ-साथ जांच करने के लिए तरीके हैं:

if (Get-Process | ?{ $_.Name -eq "svchost"}) { 
    Write-Host "seen" 
} 
else { 
    Write-Host "not seen" 
} 
2

आप बस जाओ पूछ सकते हैं - प्रक्रिया के बाद आप प्राप्त करने के लिए प्रक्रिया:

if (Get-Process -Name svchost -ErrorAction SilentlyContinue) 
{ 
    Write-Host "seen" 
} 
else 
{ 
    Write-Host "not seen" 
} 
+0

लेकिन यदि कोई प्रक्रिया नहीं है तो वह त्रुटि देगा। यही कारण है कि मैंने इसका सुझाव नहीं दिया। या इसे 'silentlycontinue' – manojlds

+0

के साथ जटिल करें, मुझे इसे स्वयं जोड़ना चाहिए था। वैसे भी, यह त्रुटिएक्शन विकल्प में उपयोगकर्ता को पेश करने का एक और तरीका है। –

+0

लोगों के लिए बस एक संकेत है कि अभी तक इसका उपयोग नहीं किया गया है: '-इररएक्शन SilentlyContinue' को' -ea 0' 'में संक्षिप्त किया जा सकता है। गोल्फिंग और इंटरैक्टिव उपयोग के लिए बढ़िया, अगर आपको इसकी ज़रूरत है। हालांकि, स्क्रिप्ट में इसका उपयोग न करें। – Joey

संबंधित मुद्दे