Що робить символ "@" у Powershell?


112

Я бачив символ @, який використовується в PowerShell для ініціалізації масивів. Що саме позначає символ @ і де я можу прочитати більше про нього?

Відповіді:


82

PowerShell насправді буде розглядати будь-який розділений комою список як масив:

"server1","server2"

Таким чином, @ в цих випадках необов’язковий. Однак для асоціативних масивів потрібний @:

@{"Key"="Value";"Key2"="Value2"}

Офіційно @ - "оператор масиву". Докладніше про це ви можете прочитати в документації, встановленої разом із PowerShell, або в книзі на кшталт "Windows PowerShell: TFM", яку я є співавтором.


12
Не забудьте перевірити відповідь Джефрі Сновер нижче ... @ - це більше, ніж просто ідентифікатор масиву.
Ерік Шкоуновер

115

У PowerShell V2 @ також є оператором Splat .

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

1
Це те, що я шукав: цей оператор використовується в контексті splat в сценаріях розгортання групи ресурсів Azure.
Алекс Маршалл

57

Хоча вищезазначені відповіді дають більшість відповідей, корисно - навіть запізнившись на питання - надати повну відповідь, на кмітливість:

Підвираз масиву (див. About_arrays )

Примушує значення бути масивом, навіть якщо сингл або нуль, наприклад $a = @(ps | where name -like 'foo')

Ініціалізатор хешу (див. About_hash_tables )

Ініціалізує хеш-таблицю з парами ключ-значення, наприклад $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Бризкання (див. Про_забризкування )

Давайте ви будете викликати командлет з параметрами масиву або хеш-таблиці, а не більш звичними індивідуально перерахованими параметрами, наприклад, використовуючи хеш-таблицю трохи вище, Copy-Item @HashArguments

Тут рядки (див. About_quoting_rules )

Давайте створимо рядки з легко вбудованими цитатами, зазвичай використовуються для рядкових рядків, наприклад:

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

Оскільки такий тип запитань ( що означає позначення "x" у PowerShell? ) Настільки поширений тут, на StackOverflow, а також у багатьох коментарях читачів, я зібрав лексикон пунктуації PowerShell, щойно опублікований на Simple-Talk.com. Прочитайте все про @, а також% і # і $ _ і? та багато іншого в Повному посібнику з пунктуації PowerShell . До статті додається ця стінна діаграма, яка дає вам все на одному аркуші: введіть тут опис зображення


Дуже ретельне проходження всіх застосувань @. Я прийшов сюди шукати тут-рядок. Дякую!
Ніксфо

27

Ви також можете обернути висновок командлета (або конвеєра), @()щоб гарантувати, що те, що ви отримуєте назад, є масивом, а не одним елементом.

Наприклад, dir зазвичай повертає список, але залежно від параметрів він може повертати один об'єкт. Якщо ви плануєте повторювати результати за допомогою об'єкта foreach, вам потрібно переконатися, що ви отримаєте список. Ось надуманий приклад:

$results = @( dir c:\autoexec.bat)

Ще одне - позначається порожній масив (як ініціалізація змінної) @().


[масив] $ синтаксис дещо чіткіший, візуально, але хороший підказник.
Дон Джонс

7

Оператор бризок

Щоб створити масив, ми створимо змінну і призначимо масив. Масиви відзначаються символом "@". Візьмемо обговорення вище та використаємо масив для підключення до декількох віддалених комп'ютерів:

$strComputers = @("Server1", "Server2", "Server3")<enter>

Вони використовуються для масивів і хешей.

Підручник PowerShell 7: накопичення, виклик та зміна даних

Масив літералів в PowerShell

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.