2012-01-24 19 views
7

मैं एक पी एस स्क्रिप्ट है:कैसे को दबाने के लिए PowerShell Get-सामग्री उत्पादन

script.ps1

[System.Xml.XmlDocument] $Config; 

function Get-ScriptDirectory 
{ 
    Split-Path $script:MyInvocation.MyCommand.Path 
} 

function Load-Config 
{ 
    $configPath = Join-Path (Get-ScriptDirectory) config.xml 
    $global:Config = [xml](gc $configPath) 
} 

Load-Config 

config.xml

<Configuration> 
</Configuration> 

स्क्रिप्ट के साथ मैं काम कर रहा हूँ में बाद में $ कॉन्फ़िगर चर। जब मैं इस स्क्रिप्ट को चलाता हूं तो यह कंसोल को आउटपुट लिखता है, जिसमें xml का मूल तत्व होता है। कुछ ऐसा:

Configuration 
-------------- 

क्या इस आउटपुट को दबाने का कोई तरीका मौजूद है?

धन्यवाद।

उत्तर

6

शायद उत्पादन असाइनमेंट कथन (एक अमान्यकरणीय बयान) के कारण नहीं है, लेकिन इस लाइन द्वारा:

[System.Xml.XmlDocument] $Config;

PowerShell में, आम तौर पर , सभी बयान एक मूल्य लौटाते हैं (अयोग्य बयान के अलावा)। मुझे लगता है कि पहली बार जब आप स्क्रिप्ट चलाते हैं तो कोई आउटपुट कंसोल पर नहीं लिखा जाएगा। हालांकि बाद के रनों पर $Config में अभी भी पिछले रन का मान होगा, और इसका मान स्क्रीन पर लिखा जाएगा। बाहर अशक्त cmdlet के लिए

  • पाइपिंग: [System.Xml.XmlDocument] $Config | Out-Null
  • कास्टिंग शून्य करने के लिए: $null = $Config
  • या बस नहीं 'घोषित' $Config चर
: [void][System.Xml.XmlDocument]$Config
  • $ अशक्त करने के लिए बताए

    इस व्यवहार को दबाने के तरीके हैं।

  • 0

    कहीं आप अपनी स्क्रिप्ट से चर को डंप कर रहे हैं। चूंकि यह पाइप से निकलता है, यह आउट-होस्ट को पास हो जाता है और यह आपके द्वारा देखे जाने वाले आउटपुट को उत्पन्न करेगा।

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

    4

    आप एक आदेश के उत्पादन सांत्वना के लिए बाहर मुद्रित करने के लिए नहीं करना चाहते हैं, तो आप यह त्यागने कर सकते हैं पाइपिंग यह या यह Out-Null को पुनः निर्देशित द्वारा। उदाहरण के लिए दोनों काम करेगा:

    $Config | Out-Null 
    $Config > Out-Null 
    

    यदि आप यूनिक्स की तरह ऑपरेटिंग सिस्टम के साथ परिचित हैं, Out-Null/dev/null को धारणात्मक बराबर है।

    +0

    आप '$ null' को भी असाइन कर सकते हैं। किसी भी मामले में, यह वास्तव में वही नहीं है, जैसा कि आप * रीडायरेक्ट * करते हैं/dev/null' लेकिन * पाइप * को 'आउट-नल' पर रीडायरेक्ट करते हैं। – Joey

    +0

    @ जॉय सही, क्योंकि '/ dev/null' को फ़ाइल के रूप में दर्शाया गया है। इस पर ध्यान दिलाने के लिए धन्यवाद। –

    +0

    मैंने अपने प्रश्न का बेहतर वर्णन करने के लिए अपना प्रश्न अपडेट किया है। मैंने आपकी सलाह की कोशिश की है, लेकिन इससे मेरी मदद नहीं हुई है। क्योंकि जब मैं आउटपुट को रीडायरेक्ट करता हूं, तो जब मैं इसे कॉल कर रहा हूं तो मेरे कॉन्फ़िगरेशन वैरिएबल अगले फंक्शन में खाली है। – zosim

    0

    कुछ विकल्प:

    # Pipe to the Out-Null cmdlet 
    $Config | Out-Null 
    
    # Cast to void 
    [void]$Config 
    
    # assign to $null 
    $null = $Config 
    
    # redirect to $null 
    $Config > $null 
    
    संबंधित मुद्दे