Что делает символ " @ " в Powershell?


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

5 86

5 ответов:

PowerShell будет фактически обрабатывать любой список, разделенный запятыми, как массив:

"server1", "server2"

Так что @ является необязательным в этих случаях. Однако, для ассоциативных массивов, @ требуется:

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

официально, @ - это "оператор выбора."Вы можете прочитать больше об этом в документации, установленной вместе с PowerShell, или в книге, такой как" Windows PowerShell: TFM", которую я написал в соавторстве :).

в 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

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

подвыражения массива (см. в разделе 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. К статье прилагается эта настенная диаграмма, которая дает вам все отдельный лист: enter image description here

вы также можете обернуть выходные данные командлета (или конвейера) в @ (), чтобы убедиться, что вы возвращаете массив, а не один элемент.

например, dir обычно возвращает список, но в зависимости от параметров он может возвращать один объект. Если вы планируете повторять результаты с помощью объекта foreach, вам нужно убедиться, что вы получили список обратно. Вот надуманный пример:

$results = @ (реж. c:\autoexec.летучая мышь)

еще один вещь... пустой массив (например, для инициализации переменной) обозначается символом @().

Оператор Splatting

создать массив, мы создаем переменную и присвоить массив. Массивы отмечаются символом"@". Давайте рассмотрим выше и использовать массив для подключения к нескольким удаленным компьютерам:

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

Они используются для массивов и хэшей.

учебник PowerShell 7: накопление, отзыв и изменение Данные

Литералы Массива В PowerShell