खोज…


परिचय

Splatting एक एकल इकाई के रूप में एक कमांड में कई मापदंडों को पारित करने की एक विधि है। यह हैशटेबल में की-वैल्यू पेयर के रूप में पैरामीटर और उनके मानों को स्टोर करके किया जाता है और इसे splatting ऑपरेटर @ का उपयोग करके cmdlet में विभाजित किया जाता है।

Splatting एक कमांड को अधिक पठनीय बना सकता है और आपको mulitple कमांड कॉल में मापदंडों का पुन: उपयोग करने की अनुमति देता है।

टिप्पणियों

नोट: ऐरे एक्सप्रेशन ऑपरेटर या @() स्प्लिटिंग ऑपरेटर @ तुलना में बहुत अलग व्यवहार है।

इसके बारे में और पढ़ें_प्लेटिंग @ टेकनेट

स्प्लिटिंग पैरामीटर

एक कमांड कॉल में मापदंडों और मूल्यों के हैशटेबल वाले चर का उपयोग करते समय, स्प्लिटिंग ऑपरेटर @ साथ डॉलर-साइन $ जगह पर स्प्लैटिंग किया जाता है।

$MyParameters = @{
    Name = "iexplore"
    FileVersionInfo = $true
}

Get-Process @MyParameters

ब्याह के बिना:

Get-Process -Name "iexplore" -FileVersionInfo

आप आसानी से अपने कॉल में सामान्य मापदंडों को जोड़ने के लिए चपटा मापदंडों के साथ सामान्य मापदंडों को जोड़ सकते हैं।

$MyParameters = @{
    ComputerName = "StackOverflow-PC"
}

Get-Process -Name "iexplore" @MyParameters

Invoke-Command -ScriptBlock { "Something to excute remotely" } @MyParameters

Splatting का उपयोग करके एक स्विच पैरामीटर पास करना

इस के समान -FileVersionInfo स्विच के साथ Get-Process को कॉल करने के लिए Splatting का उपयोग करें:

Get-Process -FileVersionInfo

यह वैभव का उपयोग करने वाला कॉल है:

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

नोट: यह उपयोगी है क्योंकि आप पैरामाटर्स का एक डिफ़ॉल्ट सेट बना सकते हैं और इस तरह से कई बार कॉल कर सकते हैं

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters -Name WmiPrvSE
Get-Process @MyParameters -Name explorer

पाइपिंग और विभाजन

कई बार या थोड़े बदलाव के साथ, मापदंडों का पुन: उपयोग करने के लिए स्पैट की घोषणा उपयोगी है:

$splat = @{
   Class = "Win32_SystemEnclosure"
   Property = "Manufacturer"
   ErrorAction = "Stop"
}

Get-WmiObject -ComputerName $env:COMPUTERNAME @splat
Get-WmiObject -ComputerName "Computer2" @splat
Get-WmiObject -ComputerName "Computer3" @splat

हालांकि, अगर पुन: उपयोग के लिए स्पैट इंडेंट नहीं है, तो आप इसे घोषित करने की इच्छा नहीं कर सकते। इसके बजाय इसे पाइप किया जा सकता है:

@{
   ComputerName = $env:COMPUTERNAME
   Class = "Win32_SystemEnclosure"
   Property = "Manufacturer"
   ErrorAction = "Stop"
} | % { Get-WmiObject @_ }

शीर्ष स्तर के फंक्शन से लेकर इनर फंक्शन की एक श्रृंखला तक

स्पलैट किए बिना कॉल स्टैक के माध्यम से मानों को कम करने और पारित करने के लिए बहुत बोझिल है। लेकिन अगर आप @PSBoundParameters की शक्ति के साथ splatting को जोड़ते हैं तो आप परतों के माध्यम से शीर्ष स्तर के पैरामीटर संग्रह को पास कर सकते हैं।

Function Outer-Method
{
    Param
    (
        [string]
        $First,
        
        [string]
        $Second
    )
    
    Write-Host ($First) -NoNewline
    
    Inner-Method @PSBoundParameters
}

Function Inner-Method
{
    Param
    (
        [string]
        $Second
    )
    
    Write-Host (" {0}!" -f $Second)
}

$parameters = @{
    First = "Hello"
    Second = "World"
}


Outer-Method @parameters


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow