Azure powershell 脚本 - 创建具有不同所有者的多个资源组
Azure powershell script - create multiple resource groups with different owners
我正在尝试创建一个循环脚本,该脚本将创建多个具有不同所有者的 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 等...我该怎么做?
您可以尝试下面的脚本,这将创建一个资源组并将用户分配为资源组的 "Owner":
$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
}
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
}
如果您需要为每个组或其他属性(例如不同区域中的每个资源组)添加更多角色分配,这也会更好
我正在尝试创建一个循环脚本,该脚本将创建多个具有不同所有者的 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 等...我该怎么做?
您可以尝试下面的脚本,这将创建一个资源组并将用户分配为资源组的 "Owner":
$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
}
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
}
如果您需要为每个组或其他属性(例如不同区域中的每个资源组)添加更多角色分配,这也会更好