找不到接受参数't'的位置参数

时间:2019-08-17 13:30:29

标签: powershell syntax parameter-passing

我遇到以下错误

New-AzResourceGroup : A positional parameter cannot be found that accepts argument 't'.
At line:1 char:1
+ New-AzResourceGroup -Name @rgName -Location @location -Tag @{LoB="pla ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-AzResourceGroup], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGrou
pCmdlet

,同时尝试使用以下代码创建新的资源组。问题出在哪里?

$rgName = "storage-dev-rg"
$location = "eastus"
New-AzResourceGroup -Name @rgName -Location @location -Tag @{LoB="platform"; CostCenter="IT"}

2 个答案:

答案 0 :(得分:1)

引用your own answer

  

声明的变量应使用$而不是@引用。

about_Variables解释说,为了在PowerShell中创建和以后引用变量,在两种情况下都用符号$前缀它们的名称;即$rgName$location

如果要执行 splatting (请参阅about_Splatting),则仅在变量名前加上符号@

(符号@还有其他用途,即作为数组子表达式运算符@(...)和哈希表 literal @{ ... },也用在您的命令中。)

Splatting用于将存储在变量中的类似数组的值作为单独的位置参数传递,或更通常地,将包含参数名称-值对的哈希表的条目绑定到如此命名的参数-参见{{3} }。

由于您的变量包含字符串,并且字符串可以被视为类似于数组的字符集(通过System.Collections.IEnumerable接口),因此 string 变量有效地将每个字符作为单独的位置参数传递

PS> $foo = 'bar'; Write-Output @foo # same as: Write-Output 'b' 'a' 'r'
b
a
r

关于您尝试过的事情

-Name @rgName,基于包含字符串$rgName的{​​{1}},将'storage-dev-rg'(仅第一个字符)传递给's',其余字符作为单个字符传递,位置参数。第二个字符-Name是第一个这样的位置参数,并且由于't'不希望有任何 positional 参数,因此它对此有所抱怨。

答案 1 :(得分:0)

我知道了。声明的变量应使用$而不是@引用。