Powershell中的“@”符号是做什么的?

我已经看到了PowerShell中使用的@符号来初始化数组。 @符号表示什么,我可以在哪里阅读更多内容?

PowerShell实际上将任何逗号分隔列表视为一个数组:

“服务器1”,“服务器2”

所以在这些情况下@是可选的。 但是,对于关联数组,@是必需的:

@ { “密钥”= “值”; “密钥2”= “值2”}

@正式是“arrays操作员”。 您可以在与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 

实验! 请享用! 从事!

Jeffrey Snover [MSFT] Windowspipe理合作伙伴架构师

您也可以在@()中包装cmdlet(或pipe道)的输出,以确保您获取的是一个数组而不是单个项目。

例如,dir通常返回一个列表,但根据选项,它可能会返回一个单一的对象。 如果你打算用foreach对象迭代结果,你需要确保你得到一个列表。 这是一个人为的例子:

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

还有一件事…一个空数组(像初始化一个variables)被表示为@()。

虽然上面的回答提供了大部分的答案,但是提供完整的答案是有用的 – 即使这个问题已经晚了,

数组子expression式 (请参阅about_arrays )

强制将值设为数组,即使是单例或空值,例如$a = @(ps | where name -like 'foo')

哈希初始值设定项 (请参阅about_hash_tables )

用键值对初始化哈希表,例如$HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true } $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

溅 (参见about_splatting )

让我们使用数组或哈希表中的参数来调用cmdlet,而不是使用更习惯的单独枚举参数,例如使用上面的哈希表, Copy-Item @HashArguments

这里string (请参阅about_quoting_rules )

让我们创build带有简单embedded引号的string,通常用于多行string,例如:

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

因为这种types的问题( PowerShell中'x'符号是什么意思? )在StackOverflow以及许多读者注释中很常见,所以我在Simple-Talk.com上发布了一个PowerShell标点符号的词汇表。 阅读所有关于@以及%和#和$ _和? 以及更多“PowerShell标点符号完整指南” 。 附在这篇文章上的是这张墙纸,它为您提供了一张纸上的所有内容: 在这里输入图像说明

Splatting操作员

要创build一个数组,我们创build一个variables并分配数组。 数组由“@”符号表示。 让我们来进行上面的讨论,并使用一个数组连接到多个远程计算机:

$ strComputers = @(“Server1”,“Server2”,“Server3”)

它们用于数组和散列。

PowerShell教程7:累积,调用和修改数据

数组文字在PowerShell中