我试图创建一个循环脚本,以创建多个不同所有者的RG。我在添加不同的所有者到资源组中时遇到了问题,我需要为每个RG添加所有者。
$RGNamesUSE = "RG-01", "RG-02", "RG-03"
$Owner = "[email protected]","[email protected]", "[email protected]"
foreach($rg in $RGNamesUSE)
{
New-AzResourceGroup -Name $rg -Location westeurope
}
我需要为每个RG添加所有者。它应该像RG-01将有所有者用户1,RG-02将有所有者用户2等。我如何才能做到这一点?
你可以试试下面的脚本,它将创建一个资源组,并将用户指定为资源组的 "所有者"。
$RGNamesUSE = "RG-01", "RG-02", "RG-03"
$Owner = "[email protected]","[email protected]","[email protected]"
For ($i=0; $i -le ($RGNamesUSE.length - 1); $i++) {
$rg = $RGNamesUSE[$i];
$userName = $Owner[$i];
New-AzResourceGroup -Name $rg -Location westeurope
New-AzRoleAssignment -SignInName $userName -RoleDefinitionName "Owner" -ResourceGroupName $rg
}
Jagrati发布了一个正确的答案,它符合你的要求。相反,我想挑战一下你的要求:)
我见过像你这样的代码。如果它是一个解决方案的一部分,而不是只是一次性运行,那么它们就会变得非常难以维护,而且非常容易犯错。
例如,如果有人在将来添加一个新的RG,他们需要记住在适当的地方添加所有者,否则一切都会被破坏,问题可能会更糟糕,因为你可能甚至没有注意到错误,无论是在构建时还是运行时。
这就是为什么我更喜欢这种类型的结构,所有的细节都在同一个地方,并且相互关联: (试试这里)
$ResourceGroups = @(
@{
"Name"="RG-01";
"Owners"="[email protected]"
},
@{
"Name"="RG-02";
"Owners"="[email protected]"
}
)
那么部署的代码就非常简单了,不需要任何索引或其他魔法就可以将多个数据源按位置关联起来。
foreach($rg in $ResourceGroups)
{
Write-Host "Creating resource group Name: $($rg.Name) with Owners: $($rg.Owners)"
# Create the Resource group
New-AzResourceGroup -Name $rg.Name -Location westeurope
# Assign roles.
New-AzRoleAssignment -SignInName $rg.Owners -RoleDefinitionName "Owner" -ResourceGroupName $rg.Name
}
在您需要为每个组添加更多的角色分配,或其他属性的情况下,如每个资源组在不同的区域,这也将更好地工作。