2015-11-04 8 views
6

में घोषित गैर मौजूद फ़ाइल के लिए मजबूत प्रकार की जांच मैं एक PowerShell फ़ंक्शन लिख रहा हूं जो फ़ाइल पर कुछ ऑपरेशन करता है, फ़ाइल के पथ को पैरामीटर के रूप में फ़ंक्शन में पास किया जाता है।फ़ंक्शन पैरामीटर

[Parameter(Mandatory=$true)] 
[ValidateNotNullOrEmpty()] 
[System.Management.Automation.PathInfo]$PathInfo 

आम तौर पर मैं बुला कोड में Resolve-Path का उपयोग एक पाने के लिए होगा: मैं सिर्फ फ़ाइल पथ एक System.String के रूप में मैं बहुत की तरह पैरामीटर परिभाषित किया है गुजर की तो बजाय मजबूत टाइपिंग और पैरामीटर मान्यता के एक प्रशंसक हूँ System.Management.Automation.PathInfo टाइप करें कि मैं इस पैरामीटर को पास कर सकता हूं हालांकि इस मामले में फ़ाइल के लिए यह वैध नहीं है और इसलिए Resolve-Path एक त्रुटि फेंक देगा।

क्या कोई मौजूदा फ़ाइल के लिए System.Management.Automation.PathInfo का उदाहरण तत्काल करना संभव है? यदि हां, तो कैसे? यदि नहीं, तो क्या आपके पास एक सुझाव है कि मैं किसी फ़ंक्शन के लिए एक मौजूदा फ़ाइल पथ कैसे पारित कर सकता हूं और अभी भी मजबूत प्रकार की जांच हो रही है।

+4

क्या FileInfo' के बारे में '? एक 'FileInfo' उदाहरण एक गैर-मौजूद निर्देशिका/फ़ाइल ('$ pathInfo = नया-ऑब्जेक्ट IO.FileInfo C: \ non-existent.txt') को इंगित कर सकता है –

+0

DOH! बहुत आसान। धन्यवाद महोदय। – jamiet

+0

@jamiet आप यह भी जांच सकते हैं कि फ़ाइल मौजूद है या नहीं, सीधे 'FileInfo' ऑब्जेक्ट पर:' ([System.IO.FileInfo] "सी: \ nonexist.ext")। मौजूद है –

उत्तर

2

हालांकि [System.IO.FileInfo] प्रकार का उपयोग शायद इस मामले में neatest समाधान हो सकता है अगर आप एक फ़ोल्डर करने के लिए एक रास्ता दिया जाता है, तो आप समस्या में आ सकते, (एक फ़ाइल के लिए कुछ कर रही है) .Exists रिटर्न के बाद से ऐसे मामलों में झूठी। आप इसके बजाय [System.IO.DirectoryInfo] का उपयोग करना चाहते हैं ...

थोड़ा और अधिक सोचकर आप एक सत्यापन स्क्रिप्ट, esp का उपयोग कर सकते हैं। एक जो कुछ प्रकार के परीक्षण फ़ंक्शन को कॉल करता है, उदाहरण के लिए निम्नलिखित पैरामीटर को अनुमति देना चाहिए जो $null या वैध [System.Management.Automation.PathInfo] प्रकार हैं।

function Test-Parameter { 
    param($PathInfo) 

    if([System.String]::IsNullOrEmpty($PathInfo)) { 
    return $true 

    } elseif($PathInfo -is [System.Management.Automation.PathInfo]) { 
    return $true 

    } else { 
    return $false 
    } 
} 

और फिर आप यह एक [ValidateScript({...})] का उपयोग जाँच अपने पैरामीटर उन (मनमाना) शर्तों को पूरा करता:

function Do-Something { 
    param(
    [Parameter()] 
     [ValidateScript({Test-Parameter $_})] 
     $PathInfo 
) 

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