PowerShell: पकड़ने त्रुटियों लेकिन पाश के बिना जारी रखें?

वोट
0

मुझे लगता है कि करने के लिए मैं PowerShell के साथ बहुत अच्छा हूँ पसंद है, लेकिन मैं थोड़ा यहाँ स्टम्प्ड हूँ।

मैं पर है कि मुझे कुछ आवश्यक फ़ाइल जानकारी है कि मैं पर एनालिटिक्स चलाएँगे दे देंगे फ़ाइलों है कि मैं इस कोड को चलाने के लिए जा रहा हूँ की एक विशाल सूची है। चरण एक बस फ़ाइल सूची हो रही है। तो मैं इस चलाते हैं।

Get-ChildItem $path -Recurse

यह बेकार जानकारी का एक गुच्छा देता है, लेकिन यह भी मुझे लाल के समुद्र देता है। वहाँ नहीं पाया जा सकता है और स्पष्ट रूप से मुझे इनकार फ़ाइलों और फ़ोल्डरों की टन है। मैं तो मैं, प्रासंगिक जानकारी के लिए नीचे उन्हें पार्स कर सकते हैं तो मेरी आंत महसूस मुझसे कहता है ट्राई / कैच उपयोग करने के लिए इन त्रुटियों के सभी को पकड़ने के लिए चाहते हैं।

आम तौर पर आप लूप के एक पाश कहीं बाहर भीतर का प्रयास करें / स्टोर त्रुटि संदेश को पकड़ने का उपयोग, और कहा कि अच्छा काम करता है। लेकिन मैं वास्तव में एक पाश पर जारी करने के लिए नहीं है। मैं अब क्या करना यकीन नहीं है। यहाँ मैं स्रोत कोड है।

function Get-FileInfo {
    Param(
        [Parameter(Mandatory=$True,Position=0)]
        [ValidateNotNull()]
        [string]$path
    )

    $global:errorInfo = @()
    Write-Host I started!

    Try {
        Write-Host I started the Try Statement!
        $fileInfo = Get-ChildItem $path -Recurse -ErrorAction Stop
        Write-Host I finished the main pull!
        Return $fileInfo
    }

    Catch {
        Write-Host I started the Catch Statement!
        $errorObj = New-Object PSObject
        Add-Member -inputObject $errorObj -memberType NoteProperty -name “Type” -value $_.Exception.Message
        Add-Member -inputObject $errorObj -memberType NoteProperty -name “Item” -value $_.Exception.ItemName
        $errorInfo += $errorObj
        Continue
    }

}

मुझे यकीन है कि आप इस मुद्दे को देख रहा हूँ। मैं त्रुटियों कि अनिवार्य रूप से प्रयास करें ब्लॉक के भीतर हो जाएगा पर कब्जा करना चाहते हैं, लेकिन मैं वास्तव में एक पाश जरूरत नहीं है। मैं वास्तव में कैसे एक पाश चीज़ें बेहतर बनाने के लिए के रूप में सेट अप करने के लिए नहीं दिख रहा।

अगर मैं इस कोड को चलाने के लिए, यह लिखेंगे मैं शुरू कर दिया! और फिर उस के लगभग तुरंत बाद मैं कोशिश वक्तव्य शुरू कर दिया। तो फिर यह मिनट एक के बारे में के लिए काम करेंगे। तब मैं एक मिल मैं पकड़ने बयान शुरू कर दिया! और इसे तुरंत समाप्त होता है। यह समझ में क्यों ऐसा होता है बनाता है, लेकिन यह स्पष्ट रूप से इच्छित परिणाम नहीं है।

मैं सिर्फ यह गलत के बारे में सोच रहा हूं?

03/12/2019 को 00:06
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

त्रुटियों आप का वर्णन कर रहे हैं कर रहे हैं गैर समाप्त त्रुटियों, जो आप के साथ एक चर में एकत्र कर सकते हैं आम -ErrorVariableपैरामीटर , पहले त्रुटि पर कमांड (जो क्या है को रोके बिना -ErrorAction Stopकरता है)।

# Silence non-terminating errors and collect them in variable $errs
Get-ChildItem $path -Recurse -ErrorAction SilentlyContinue -ErrorVariable errs
  • नोट कैसे लक्ष्य चर नाम, errsनिर्दिष्ट किया जाना चाहिए बिना$ जब से तुम चर के गुजर रहे हैं, नाम , नहीं अपने मूल्य। $errsएक के रूप में बनाया जाता है स्थानीय चर।

    • यह गुंजाइश सीमाओं के पार चर स्थापित करने से बचने के लिए आम तौर पर बेहतर है, लेकिन यह है में एक चर को लक्षित करना संभव स्क्रिप्ट गुंजाइश / वैश्विक बजाय गुंजाइश, साथ अर्थात्
      -ErrorVariable script:errs/-ErrorVariable global:errs
  • यह भी करने के लिए मौन त्रुटियों, उपयोग -ErrorAction SilentlyContinue, नहीं -ErrorAction Ignore- बाद त्रुटियों को पूरी तरह से दबाने होगा, जिससे $errsखाली।

03/12/2019 को 00:27
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more