PowerShell
splatting
खोज…
परिचय
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