PowerShell中如何将Azure AD组的ObjectId属性正确赋值给变量?
问题原因
你当前返回的$Group是包含ObjectId属性的PowerShell自定义对象,而非单纯的ObjectId字符串值,根源是Select-Object -Property ObjectId只会保留对象的指定属性,不会直接提取属性的原始值。
解决方法
把Select-Object的参数替换为-ExpandProperty,即可直接提取属性的字符串值,同时注意Add-AzureADGroupMember的RefObjectID参数也需要传入用户的ObjectId,直接传UPN可能触发报错,修正后代码如下:
$UPN = "someuser@domain.com" $Selected = "Group Display Name" # 提取组的ObjectId字符串 $GroupObjectId = Get-AzureADGroup -Filter "DisplayName eq '$Selected'" -All $true | Select-Object -ExpandProperty ObjectID # 提取用户的ObjectId $UserObjectId = Get-AzureADUser -ObjectId $UPN | Select-Object -ExpandProperty ObjectID Add-AzureADGroupMember -ObjectID $GroupObjectId -RefObjectID $UserObjectId
可选优化方案
可以增加异常判断逻辑,覆盖组不存在、重名组的场景:
$UPN = "someuser@domain.com" $Selected = "Group Display Name" $GroupObjectId = Get-AzureADGroup -Filter "DisplayName eq '$Selected'" -All $true | Select-Object -ExpandProperty ObjectID # 组不存在判断 if ($null -eq $GroupObjectId) { Write-Error "未找到显示名称为 $Selected 的组,请检查输入是否正确" return } # 重名组判断 if ($GroupObjectId -is [array]) { Write-Error "找到 $($GroupObjectId.Count) 个显示名称为 $Selected 的组,请使用更精确的筛选条件" return } $UserObjectId = Get-AzureADUser -ObjectId $UPN | Select-Object -ExpandProperty ObjectID Add-AzureADGroupMember -ObjectID $GroupObjectId -RefObjectID $UserObjectId
你也可以不做属性展开,直接引用对象的属性值完成调用,写法如下:
$Group = Get-AzureADGroup -Filter "DisplayName eq '$Selected'" -All $true $User = Get-AzureADUser -ObjectId $UPN Add-AzureADGroupMember -ObjectID $Group.ObjectId -RefObjectID $User.ObjectId
内容的提问来源于stack exchange,提问作者iBowler
相关产品推荐
相关产品推荐

