मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एकाधिक तर्क लेता है, जो कमांड लाइन से या पाइपलाइन से आ सकता है। तर्क तार या निर्देशिका वस्तुओं हो सकता है।मैं एक फ़ंक्शन कैसे बना सकता हूं जो पाइपलाइन और कमांड लाइन से एकाधिक तर्क प्रकार स्वीकार करता है?
Test-VEnv '.\MyPath', '.\AnotherPath'
Test-VEnv (dir)
'MyPath', 'AnotherPath' | Test-VEnv
dir | Test-VEnv
निम्नलिखित कोड लगभग काम करता है:
function Test-VEnv {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, Position=0,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$true)]
[Alias('FullName')]
[String[]]$Path
)
process {
foreach ($P in $Path) {
...
}
}
}
यह दोनों पाइप लाइन और आदेश तर्क से तार संभालती है, और निर्देशिका वस्तुओं संभालती विचार है कि निम्नलिखित आमंत्रण के किसी भी काम करना चाहिए है पाइपलाइन से (ValueFromPipelineByPropertyName और FullName उपनाम के माध्यम से)। लेकिन यह कमांड लाइन पर निर्देशिका वस्तुओं संभाल नहीं करता, इसलिए
dir | Where-Object { Test-VEnv $_ }
विफल रहता है, के रूप में यह तार करने के लिए निर्देशिका वस्तुओं, जो FullName के बजाय नाम संपत्ति का उपयोग करता है बदल देता है, और बाद में कोड विफल रहता है।
क्या कोई मुझे बता सकता है कि मैं क्या हासिल करना चाहता हूं?
मुझे पता है कि अगर मैं इसे काम करने के लिए भी प्राप्त कर सकता हूं, तो यह विशेष रूप से अच्छा डिज़ाइन नहीं हो सकता है। लेकिन जहां तक मैं कह सकता हूं, यह है कि टेस्ट-पथ में निर्मित कैसे काम करता है, इसलिए मैं अपने स्वयं के आविष्कार से पहले मानक व्यवहार का पालन करना चाहता हूं ...
ठीक है, तो आप जो कह रहे हैं वह यह है कि मेरा कार्य परीक्षण पथ की तरह व्यवहार करता है। मेरी माफ़ी, मुझे लगता है कि मेरा परीक्षण थोड़ा उलझ गया है - मेरे लिए स्पष्टीकरण के लिए धन्यवाद। तो क्या इसका मतलब यह है कि परिणाम प्राप्त करना संभव नहीं है? (कोड में कम से कम गंदे स्पष्ट प्रकार के चेक के बिना नहीं) –
@PaulMoore क्या आप पाइपलाइन का उपयोग करते हैं या नहीं, भले ही स्ट्रिंग के रूप में पूर्ण पथ को '$ पथ' तक सीमित कर रहे हों? –
@PaulMoore 'PsPath' का उपयोग करने का प्रयास करें, यह' टेस्ट-पथ 'का उपयोग करता है। मैंने कुछ उदाहरणों के साथ अपना जवाब अपडेट किया। –