Я видел символ @, используемый в PowerShell для инициализации массивов. Что именно обозначает символ @ и где об этом подробнее?





Оператор Splatting
Чтобы создать массив, мы создаем переменную и назначаем массив. Массивы отмечены символом «@». Давайте возьмем вышеприведенное обсуждение и воспользуемся массивом для подключения к нескольким удаленным компьютерам:
$strComputers = @("Server1", "Server2", "Server3")<enter>
Они используются для массивов и хэшей.
PowerShell будет обрабатывать любой список, разделенный запятыми, как массив:
"server1","server2"
Таким образом, @ в этих случаях необязателен. Однако для ассоциативных массивов @ требуется:
@{"Key" = "Value";"Key2" = "Value2"}
Официально @ - это «оператор массива». Вы можете узнать больше об этом в документации, устанавливаемой вместе с PowerShell, или в такой книге, как «Windows PowerShell: TFM», соавтором которой я являюсь.
Вы также можете заключить вывод командлета (или конвейера) в @(), чтобы гарантировать, что вы получите массив, а не отдельный элемент.
Например, dir обычно возвращает список, но в зависимости от параметров может возвращать один объект. Если вы планируете перебирать результаты с помощью объекта foreach, вам необходимо убедиться, что вы получили список обратно. Вот надуманный пример:
$results = @( dir c:\autoexec.bat)
Еще одна вещь ... пустой массив (например, для инициализации переменной) обозначается @().
[array] $ a синтаксис несколько яснее, визуально, но хороший совет.
В 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
Это то, что я искал: этот оператор используется в контексте splat в сценариях развертывания группы ресурсов Azure.
Хотя приведенные выше ответы предоставляют наиболее ответа, полезно - даже на этом позднем этапе вопроса - дать полный ответ, а именно:
Подвыражение массива (см. about_arrays)
Заставляет значение быть массивом, даже если одноэлемент или ноль, например $a = @(ps | where name -like 'foo')
Инициализатор хэша (см. about_hash_tables)
Инициализирует хеш-таблицу парами ключ-значение, например
$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }
Брызги (см. about_splatting)
Давайте вызовем командлет с параметрами из массива или хеш-таблицы, а не с более привычными индивидуально перечисляемыми параметрами, например используя хеш-таблицу чуть выше, Copy-Item @HashArguments
Здесь струны (см. about_quoting_rules)
Давайте создадим строки с легко встраиваемыми кавычками, обычно используемыми для многострочных строк, например:
$data = @"
line one
line two
something "quoted" here
"@
Поскольку этот тип вопросов (что означает обозначение «x» в PowerShell?) так часто встречается здесь, в StackOverflow, а также во многих комментариях читателей, я собрал лексикон пунктуации PowerShell, только что опубликованный на Simple-Talk.com. Прочтите все о @, а также о% и # и $ _ и? и многое другое на Полное руководство по пунктуации PowerShell. К статье прилагается эта настенная диаграмма, которая дает вам все на одном листе:

Очень подробный обзор всех случаев использования @. Я пришел сюда в поисках строки. Спасибо!
Обязательно ознакомьтесь с ответом Джеффри Сновера ниже ... @ - это больше, чем просто идентификатор массива.