Powershell 跨不同订阅删除一组用户的Azure角色分配
我正在尝试删除csv文件中为一组用户分配的角色:Powershell 跨不同订阅删除一组用户的Azure角色分配,powershell,azure,Powershell,Azure,我正在尝试删除csv文件中为一组用户分配的角色: $Users = Import-Csv 'C:\Users.csv' | select -ExpandProperty SignInName 然后,我想检索这些用户的所有对象ID,因此我运行以下命令: foreach ($user in $Users) { $Users = (Get-AzureRmADUser -UserPrincipalName $User).Id } 不幸的是,它只检索1个用户的id,而不是工作表中的所有用户
$Users = Import-Csv 'C:\Users.csv' | select -ExpandProperty SignInName
然后,我想检索这些用户的所有对象ID,因此我运行以下命令:
foreach ($user in $Users)
{
$Users = (Get-AzureRmADUser -UserPrincipalName $User).Id
}
不幸的是,它只检索1个用户的id,而不是工作表中的所有用户。
最后,当我尝试使用以下Cmdlet删除生成结果的角色分配时:
Remove-AzureRmRoleAssignment -ObjectId $Users -RoleDefinitionName "*Owner*"
我得到以下错误:
Remove AzureRmRoleAssignment:提供的信息未映射到角色分配
请说明为什么我在循环后只得到一个用户,以及为什么我得到那个错误
更新
为了确保脚本将从不同的订阅中删除用户,我稍微修改了脚本
$Users = Import-Csv 'C:\Users.csv' | select -ExpandProperty SignInName
$Subs = (Import-Csv 'C:\Users.csv').SubscriptionId
foreach ($sub in $Subs)
{
Select-AzureRmSubscription -Subscription $sub
foreach ($user in $Users)
{
$OID = (Get-AzureRmADUser -UserPrincipalName $User).Id
Remove-AzureRmRoleAssignment -ObjectId $OID.Guid -RoleDefinitionName Owner -Scope /subscriptions/$sub -Verbose
}
}
不幸的是,我得到了以下错误:
删除AzureRmRoleAssignment:提供的信息没有映射到角色分配。编辑:因此,从您的编辑中,我认为您不了解ForEach。最后,我将尝试为您解释您的ForEach编辑。但现在,这应该是基于你的信息
$Users = Import-Csv 'C:\Users.csv'
foreach ($user in $Users){
Remove-AzureRmRoleAssignment -RoleDefinitionName Owner -SignInName $_.SignInName -Scope /subscriptions/$_.SubscriptionId -Verbose
}
现在,您编辑的代码出现了问题
# The CSVs can be combined down to one and specific data pulled from them when needed.
$Users = Import-Csv 'C:\Users.csv' | select -ExpandProperty SignInName
$Subs = (Import-Csv 'C:\Users.csv').SubscriptionId
# This says for each object in variable $subs...
foreach ($sub in $Subs)
{
# Select the subscription - But do nothing with it cuz herp.
Select-AzureRmSubscription -Subscription $sub
foreach ($user in $Users)
{
# Searches for the ObjectID of a User based on their SignInName (Email) and assigns to variable
$OID = (Get-AzureRmADUser -UserPrincipalName $User).Id
Remove-AzureRmRoleAssignment -ObjectId $OID.Guid -RoleDefinitionName Owner -Scope /subscriptions/$sub -Verbose
}
}
无论您想做什么,我认为您都应该仔细检查
foreach
循环。是否要在其中使用$User
?仍然不起作用,因为OID为空。另外,在同一个csv文件中,我有他们的订阅ID。我可以自动将其分配给范围吗?您完全可以添加它。您的csv文件的标题是什么?没有看到我不确定该用什么。为你完成了编辑,伙计。尽量限制你的双份套餐的数量。我建议您在使用脚本时添加一些写主机,这样您就可以准确地看到它所获得的数据。感谢您的帮助。当我运行您提供的编辑时,出现以下错误:Remove AzureRmRoleAssignment:无法验证参数“SignInName”上的参数。参数为null或为空。请提供一个不为null或空的参数,然后重试该命令。CSV文件的标题是什么。