Powershell 跨不同订阅删除一组用户的Azure角色分配

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,而不是工作表中的所有用户

我正在尝试删除csv文件中为一组用户分配的角色:

$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文件的标题是什么。