Azure Powershell脚本-使用不同的所有者创建多个资源组

时间:2020-06-02 09:38:59

标签: azure powershell azure-powershell

我正在尝试创建一个循环脚本,该脚本将创建具有不同所有者的多个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等...我该怎么做?

2 个答案:

答案 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
}

在您需要为每个组或其他属性(例如,不同区域中的每个资源组)添加更多角色分配的情况下,这也将更好地工作