我遇到以下错误
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"}
答案 0 :(得分:1)
声明的变量应使用
$
而不是@
引用。
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)
我知道了。声明的变量应使用$
而不是@
引用。