Yanıtlar:
PowerShell aslında virgülle ayrılmış herhangi bir listeyi bir dizi olarak ele alır:
"server1","server2"
Dolayısıyla @ bu durumlarda isteğe bağlıdır. Bununla birlikte, ilişkilendirilebilir diziler için @ gereklidir:
@{"Key"="Value";"Key2"="Value2"}
Resmi olarak @, "dizi operatörü" dür. PowerShell ile birlikte yüklenen belgelerde veya birlikte yazdığım "Windows PowerShell: TFM" gibi bir kitapta daha fazla bilgi edinebilirsiniz.
PowerShell V2'de @ aynı zamanda Splat operatörüdür .
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
Yukarıdaki yanıtlar yanıtın çoğunu sağlarken - soruya bu kadar geç olsa bile - tam yanıtı sağlamak, zekice:
Dizi alt ifadesi (bkz. About_diziler )
Tekil veya boş olsa bile değeri bir dizi olmaya zorlar, ör. $a = @(ps | where name -like 'foo')
Hash başlatıcı (see about_hash_tables )
Anahtar / değer çiftleriyle bir karma tabloyu başlatır, ör.
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Sıçratma (bkz. About_splatting )
Tek tek numaralandırılmış daha alışılmış parametreler yerine, bir diziden veya karma tablodan parametrelerle bir cmdlet çağıralım, örneğin hemen yukarıdaki karma tabloyu kullanarak, Copy-Item @HashArguments
Burada dizeler ( about_quoting_rules'e bakın )
Genellikle çok satırlı dizeler için kullanılan, kolayca katıştırılmış tırnak işaretleriyle dizeler oluşturalım, örneğin:
$data = @"
line one
line two
something "quoted" here
"@
Bu tür sorular ( PowerShell'de 'x' gösterimi ne anlama geliyor? ) Burada StackOverflow'da ve birçok okuyucu yorumunda çok yaygın olduğu için, Simple-Talk.com'da yayınlanan bir PowerShell noktalama sözlüğü oluşturdum. @,% Ve # ve $ _ ile ilgili her şeyi okuyun ve? ve daha fazlası The Complete Guide to PowerShell Punctuation'da . Makaleye ekli, size her şeyi tek bir sayfada veren bu duvar çizelgesidir:
Ayrıca, @()
geri aldığınız şeyin tek bir öğe yerine bir dizi olduğundan emin olmak için bir cmdlet'in (veya ardışık düzeninin ) çıktısını da sarabilirsiniz .
Örneğin, dir genellikle bir liste döndürür, ancak seçeneklere bağlı olarak tek bir nesne döndürebilir. Bir foreach nesnesi ile sonuçları yinelemeyi planlıyorsanız, bir listeyi geri aldığınızdan emin olmanız gerekir. İşte uydurma bir örnek:
$results = @( dir c:\autoexec.bat)
Bir şey daha var ... boş bir dizi (bir değişkeni başlatmak gibi) belirtilir @()
.
Splatting Operatörü
Bir dizi oluşturmak için bir değişken oluşturup diziyi atarız. Diziler "@" simgesiyle belirtilir. Yukarıdaki tartışmayı ele alalım ve birden çok uzak bilgisayara bağlanmak için bir dizi kullanalım:
$strComputers = @("Server1", "Server2", "Server3")<enter>
Diziler ve karmalar için kullanılırlar.
PowerShell Eğitimi 7: Verileri Biriktirme, Geri Çağırma ve Değiştirme