2008-12-12 14 views

उत्तर

53

PowerShell वास्तव में एक सरणी के रूप में किसी भी अल्पविराम से अलग किए व्यवहार करेगा:

"server1", "server2"

तो @ उन मामलों में वैकल्पिक है । हालांकि, साहचर्य सरणियों के लिए, @ आवश्यक है:

@ { "कुंजी" = "मूल्य", "Key2" = "VALUE2"}

आधिकारिक तौर पर, @ है "सरणी ऑपरेटर।" आप इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं जो PowerShell के साथ स्थापित है, या "Windows PowerShell: TFM" जैसी पुस्तक में, जिसे मैंने सह-लेखन किया है :)।

+6

जेफरी स्नोवर का उत्तर नीचे देखें ... @ केवल एक सरणी पहचानकर्ता से अधिक है। –

5

splatting ऑपरेटर

एक सरणी बनाने के लिए, हम एक चर बनाने और सरणी आवंटित। Arrays "@" प्रतीक द्वारा नोट किया जाता है। के ऊपर चर्चा लेने के लिए और एक सरणी का उपयोग करके कई दूरस्थ कंप्यूटर से कनेक्ट करने दें:

$ strComputers = @ ("Server1", "Server2", "Server3")

वे सरणियों और हैश के लिए उपयोग किया जाता है।

PowerShell Tutorial 7: Accumulate, Recall, and Modify Data

Array Literals In PowerShell

22

आप यह सुनिश्चित करने के लिए @() में एक cmdlet (या पाइपलाइन) के आउटपुट को भी लपेट सकते हैं ताकि आप एक आइटम के बजाय एक सरणी हो सकें।

उदाहरण के लिए, डीआईआर आमतौर पर एक सूची देता है, लेकिन विकल्पों के आधार पर, यह एक ही वस्तु को वापस कर सकता है। यदि आप भविष्यवाणियों के साथ परिणामों के माध्यम से पुन: प्रयास करने की योजना बना रहे हैं, तो आपको यह सुनिश्चित करना होगा कि आपको एक सूची वापस मिल जाए। यहाँ एक काल्पनिक उदाहरण है:

$ परिणाम = @ (dir c: \ autoexec.bat)

एक और बात ... एक खाली सरणी (एक चर प्रारंभ करने की तरह) निरूपित किया जाता है @()।

+0

[सरणी] $ एक वाक्यविन्यास कुछ हद तक स्पष्ट, दृष्टि से, लेकिन अच्छी टिप है। –

85

पावरशेल वी 2 में, @ एसपीएलएटी ऑपरेटर भी है।

PS> # First use it to create a hashtable of parameters: 
PS> $params = @{path = "c:\temp"; Recurse= $true} 
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters. 
PS> dir @params 
PS> # That was the equivalent of: 
PS> dir -Path c:\temp -Recurse:$true 

प्रयोग! का आनंद लें! संलग्न!

जेफरी Snover [MSFT] विंडोज प्रबंधन साथी वास्तुकार

+1

ठीक है। मैं इसके लिए ईसीएमए -48 रंगों के साथ असंगतता को माफ कर सकता हूं, क्योंकि वाह बहुत अच्छा है। –

+0

यही वह है जिसे मैं ढूंढ रहा था: इस ऑपरेटर का उपयोग Azure संसाधन समूह परिनियोजन स्क्रिप्ट में विभाजित संदर्भ में किया जाता है। –

22

जबकि इसके बाद के संस्करण की प्रतिक्रियाएं जवाब का सबसे प्रदान यह उपयोगी है -, पूरा जवाब प्रदान करने के लिए बुद्धि के लिए - सवाल का भी इस देर से :

सरणी उप अभिव्यक्ति (about_arrays देखें)

बलों मूल्य एक श्रृंखला होना चाहिए, भले ही एक सिंगलटन या एक अशक्त, जैसे$a = @(ps | where name -like 'foo')

हैश प्रारंभकर्ता (about_hash_tables देखें)

कुंजी-मान जोड़ों, उदा एक हैश तालिका आरंभीकृत $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

splatting (देखें about_splatting)

आइए आप किसी सरणी या एक हैश तालिका बल्कि अधिक प्रथागत व्यक्तिगत रूप से प्रगणित मानकों की तुलना में, उदाहरण के लिए से मानकों के साथ एक cmdlet आह्वान बस ऊपर हैश तालिका का उपयोग कर, Copy-Item @HashArguments

यहाँ तार (about_quoting_rules देखें)

आइए आप आसानी से एम्बेडेड उद्धरण, आम तौर पर बहु ​​लाइन तार के लिए इस्तेमाल किया, जैसे के साथ तार बनाने के लिए:

$data = @" 
line one 
line two 
something "quoted" here 
"@ 

चूंकि इस प्रकार का प्रश्न (पावरशेल में 'x' नोटेशन का अर्थ क्या है?) स्टैक ओवरव्लो के साथ-साथ कई पाठक टिप्पणियों में भी इतना आम है, मैंने पावरशेल विराम चिह्न का एक लेक्सिकॉन रखा है, केवल प्रकाशक सरल- Talk.com पर डी। @ के साथ-साथ% और # और $ _ और सभी के बारे में पढ़ें? और The Complete Guide to PowerShell Punctuation पर और अधिक। आलेख से जुड़ा यह वॉलचार्ट है जो आपको एक ही चादर पर सबकुछ देता है: enter image description here

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