Я видел символ @, используемый в PowerShell для инициализации массивов. Что именно обозначает символ @и где я могу узнать больше об этом?
Что означает символ "@" в Powershell?
Ответ 1
PowerShell будет обрабатывать любой список через запятую как массив:
"server1","server2"
Таким образом, @не является обязательным в этих случаях. Однако для ассоциативных массивов @требуется:
@{"Key"="Value";"Key2"="Value2"}
Официально @является "оператором массива". Вы можете прочитать больше об этом в документации, установленной вместе с PowerShell, или в книге, подобной "Windows PowerShell: TFM", которую я в соавторстве.
Ответ 2
В 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
Ответ 3
В то время как вышеприведенные ответы предоставляют большую часть ответа, полезно - даже это поздно на вопрос - предоставить полный ответ, а именно:
Подвыражение массива (см. 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. ком. Читайте все о @, а также% и # и $_ и? и больше в Полное руководство по пунктуации PowerShell. К этой статье прилагается эта настенная диаграмма, которая дает вам все на одном листе:
Ответ 4
Вы также можете обернуть выходные данные командлета (или конвейера) в @()
чтобы убедиться, что возвращаемое вами значение является массивом, а не одним элементом.
Например, dir обычно возвращает список, но в зависимости от параметров он может возвращать один объект. Если вы планируете перебирать результаты с помощью объекта foreach, вам необходимо убедиться, что вы получили список обратно. Вот надуманный пример:
$results = @( dir c:\autoexec.bat)
Еще одна вещь... пустой массив (например, для инициализации переменной) обозначается @()
.
Ответ 5
Оператор Splatting
Чтобы создать массив, мы создаем переменную и присваиваем массив. Массивы отмечены символом "@". Давайте рассмотрим вышеизложенное и используем массив для подключения к нескольким удаленным компьютерам:
$strComputers = @("Server1", "Server2", "Server3")<enter>
Они используются для массивов и хэшей.
Обучающее руководство по PowerShell 7: накапливайте, извлекайте и изменяйте данные