2010-07-01 9 views
38

मैं एक WPF अनुप्रयोग के कुछ यूआई स्वचालन के लिए PowerShell स्क्रिप्ट का उपयोग कर रहा हूं। आम तौर पर, वैश्विक चर के मूल्य के आधार पर स्क्रिप्ट समूह के रूप में चलाए जाते हैं। इस चर को मैन्युअल रूप से सेट करने के लिए यह थोड़ा असुविधाजनक है जब मैं केवल एक स्क्रिप्ट चलाने के लिए चाहता हूं, इसलिए मैं इस चर के लिए जांचने के लिए उन्हें संशोधित करने का तरीका ढूंढ रहा हूं और यदि नहीं मिला तो इसे सेट करें।पावरशेल में, मैं कैसे जांच करूं कि वैश्विक दायरे में एक विशिष्ट चर मौजूद है या नहीं?

परीक्षण पथ वैरिएबल:

The variable '$global:foo' cannot be retrieved because it has not been set.

उत्तर

15

संपादित करें: नीचे स्टीज का उत्तर उपयोग करें। मेरा अपना (आंशिक रूप से गलत) एक अभी भी यहाँ संदर्भ के लिए गयी है:


आप

Get-Variable foo -Scope Global 

और जाल त्रुटि है कि जब चर मौजूद नहीं है उठाया है का उपयोग कर सकते हैं।

+1

मैं व्यक्तिगत रूप से stej के उत्तर के साथ जाना होगा; मैंने इस पर टिप्पणी की और मैंने इसे भी ऊपर उठाया। मैं बस इसे अब नहीं हटा सकता। – Joey

+1

मैं नहीं करूँगा। यह उत्तर कोड पठनीयता में सुधार, होने वाली कार्रवाई के लिए अधिक विशिष्ट है। – VertigoRay

+0

@ वर्टिगोरे: अपवादों का उपयोग नियंत्रण-प्रवाह तंत्र के रूप में हमेशा मेरे लिए एक बुरी गंध है। हां, ऐतिहासिक रूप से आपको शैल भाषाओं में ऐसा करने के लिए मजबूर किया गया है, लेकिन इससे यह एक विशेष विचार नहीं बनता है। इस मामले में आप एक चर के अस्तित्व की जांच करना चाहते हैं। परिवर्तनीय प्रदाता पर 'टेस्ट-पथ' बिल्कुल वही करता है। Get-Variable आपको मान या त्रुटि देता है। – Joey

2

अब तक, यह जवाब है कि काम करता है this one है जैसा दिखता है: \ foo काम करने के लिए, के बाद से मैं अभी भी निम्न त्रुटि प्राप्त नहीं लगता है।

आगे इसे बाहर तोड़ने के लिए, क्या मेरे लिए काम किया यह था:

प्राप्त करें-चर -नाम foo -Scope वैश्विक -ea SilentlyContinue | आउट-नल

$? या तो सच या गलत देता है।

+0

इसके अलावा कि सूत्र में साथ, वे उल्लेख है कि टेस्ट-पथ चर: वैश्विक: foo stej के जवाब के अनुसार, काम करेंगे। – Timbo

150

Test-Path एक विशेष वाक्य रचना के साथ प्रयोग किया जा सकता है:

Test-Path variable:global:foo 
+7

चर परिवर्तनीय PsProvider –

+0

Thx के बहुत चालाक उपयोग के लिए +1;) आईएमओ यह सही तरीका है, '-ररएक्शन एलीपली कंटिन्यू' या 'गेट-वेरिएबल' के साथ 'try/catch' जैसे कोई कामकाज नहीं है। – stej

+1

आह, अच्छा है। मैं पीएस प्रश्नों से भी परेशान क्यों हूं ;-)। हालांकि, मैं अब अपना जवाब नहीं हटा सकता। – Joey

0

आप Get-चर के रिटर्न मान पर एक चर असाइन कर सकते हैं तो अगर यह रिक्त है देखने के लिए जाँच:

$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue 

if ($variable -eq $null) 
{ 
    Write-Host "foo does not exist" 
} 

# else... 

बस ध्यान रखें कि परिवर्तनीय को "अस्तित्व" के लिए कुछ सौंपा जाना है। उदाहरण के लिए:

$global:foo = $null 

$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue 

if ($variable -eq $null) 
{ 
    Write-Host "foo does not exist" 
} 
else 
{ 
    Write-Host "foo exists" 
} 

$global:bar 

$variable = Get-Variable -Name bar -Scope Global -ErrorAction SilentlyContinue 

if ($variable -eq $null) 
{ 
    Write-Host "bar does not exist" 
} 
else 
{ 
    Write-Host "bar exists" 
} 

आउटपुट:

foo exists 
bar does not exist 
-4

करना और भी आसान तरीका उपलब्ध नहीं है:

if ($variable) 
{ 
    Write-Host "bar exist" 
} 
else 
{ 
    Write-Host "bar does not exists" 
} 
+0

मुझे यह कोड अभी मुझ पर असफल रहा है। – mbourgon

+6

क्या होगा यदि $ चर मौजूद है, लेकिन $ false के बराबर है? –

2

सरल: [बूलियन] (मिल-चर "VARNAME" -ErrorAction SilentlyContinue)

5

आप इसका उपयोग कर सकते हैं:

if (Get-Variable foo -Scope Global -ErrorAction SilentlyContinue) { 
    $true 
} else { 
    $false 
} 

आउटपुट:

False 

वैकल्पिक रूप से

आप जाल त्रुटि है कि जब चर मौजूद नहीं है उठाया है कर सकते हैं।

try { 
    Get-Variable foo -Scope Global -ErrorAction Stop 
} catch [System.Management.Automation.ItemNotFoundException] { 
    Write-Warning $_ 
} 

आउटपुट:

WARNING: Cannot find a variable with the name 'foo'. 
संबंधित मुद्दे

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