我正在尝试创建一个循环脚本,该脚本将创建具有不同所有者的多个RG。将其他所有者添加到资源组时遇到问题。
$RGNamesUSE = "RG-01", "RG-02", "RG-03"
$Owner = "user1@mail.com","User2@mail.com", "User3@mail.com"
foreach($rg in $RGNamesUSE)
{
New-AzResourceGroup -Name $rg -Location westeurope
}
我需要为每个RG添加所有者。好像RG-01将拥有所有者user1,RG-02将拥有所有者user2等...我该怎么做?
答案 0 :(得分:1)
您可以尝试下面的脚本,该脚本将创建资源组并将用户分配为资源组的“所有者”:
$RGNamesUSE = "RG-01", "RG-02", "RG-03"
$Owner = "user1@mail.com","User2@mail.com","User3@mail.com"
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
}
答案 1 :(得分:0)
Jagrati发布了正确的答案,它满足了您的要求。相反,我想挑战您的要求:)
我看过像您一样的代码。如果它是解决方案的一部分,而不是一次运行,那么它们将变得非常难以维护并且很容易出错。
例如,如果将来有人添加新的RG,他们需要记住将所有者添加到正确的位置,否则所有内容都会被破坏,并且问题可能会变得更加严重,因为您甚至都可能不会注意到错误在构建时或运行时。
这就是为什么我更喜欢这些类型的结构,其中所有细节都在同一位置并相互关联:(try it here)
$ResourceGroups = @(
@{
"Name"="RG-01";
"Owners"="user1.1@mail.com"
},
@{
"Name"="RG-02";
"Owners"="user2@mail.com"
}
)
然后,部署代码非常简单,无需任何索引或任何其他魔术即可按位置关联多个数据源
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
}
在您需要为每个组或其他属性(例如,不同区域中的每个资源组)添加更多角色分配的情况下,这也将更好地工作