数组为 null @ $DynamicGroupSet
Array is null @ $DynamicGroupSet
Import-Module AzureADPreview
$keyCarrierGroups = @()
$DynamicGroupSet = @()
$storeInfo = @{}
$keyCarrierGroups = (Get-ADGroup -Filter {DisplayName -like "*_Key_Carriers"})
foreach ($group in $keyCarrierGroups){
$DynamicGroupSet.Add((Get-AzureADMSGroup -Id $group.Name.Split("_")[1]))
}
foreach($group in $DynamicGroupSet){$storeInfo.add($group.DisplayName.Split("_")[0],$group.Id)}
foreach($store in $storeinfo.Keys){Set-AzureADMSGroup -Id $storeinfo.Item($store) -MembershipRule {(user.Department -contains $store) -and (user.extensionAttribute3 -eq "A") -and (user.extensionAttribute6 -contains "10005") -or (user.extensionAttribute6 -contains "10006") -or (user.extensionAttribute6 -contains "10013") -or (user.extensionAttribute6 -contains "10064") -or (user.extensionAttribute6 -contains "10070") -or (user.extensionAttribute6 -contains "10078") -or (user.extensionAttribute6 -contains "10146") -or (user.extensionAttribute6 -contains "205") -or (user.extensionAttribute6 -contains "10158") -or (user.extensionAttribute6 -contains "10173") -or (user.extensionAttribute6 -contains "40057") -or (user.extensionAttribute6 -contains "10012") -or (user.extensionAttribute6 -contains "10022") -or (user.extensionAttribute6 -contains "10023") -or (user.extensionAttribute6 -contains "10104") -or (user.extensionAttribute6 -contains "10123") -or (user.extensionAttribute6 -contains "70017") -or (user.extensionAttribute6 -contains "70029") -or (user.extensionAttribute6 -contains "70056") -or (user.extensionAttribute6 -contains "70099") -or (user.extensionAttribute6 -contains "80004") -or (user.extensionAttribute6 -contains "80016") -or (user.extensionAttribute6 -contains "80076") -or (user.extensionAttribute6 -contains "80143") -or (user.extensionAttribute6 -contains "80156") -or (user.extensionAttribute6 -contains "10166") -or (user.extensionAttribute6 -contains "10179") -or (user.extensionAttribute6 -contains "80178") -or (user.extensionAttribute6 -contains "80217") -or (user.extensionAttribute6 -contains "80224") -or (user.extensionAttribute6 -contains "10010") -or (user.extensionAttribute6 -contains "80003") -or (user.extensionAttribute6 -contains "80011") -or (user.extensionAttribute6 -contains "80014") -or (user.extensionAttribute6 -contains "80066") -or (user.extensionAttribute6 -contains "80090") -or (user.extensionAttribute6 -contains "10136") -or (user.extensionAttribute6 -contains "10159") -or (user.extensionAttribute6 -contains "10181") -or (user.extensionAttribute6 -contains "10183") -or (user.extensionAttribute6 -contains "10185") -or (user.extensionAttribute6 -contains "70128") -or (user.extensionAttribute6 -contains "80177") -or (user.extensionAttribute6 -contains "80191")}}
到目前为止,我已经尝试了 $DynamicGroupSet += 和 .add。调试数组时为空。我已经确认 (Get-AzureADMSGroup -Id $group.Name.Split("_")[1]) returns 我在找什么。无法弄清楚为什么它没有填充到数组中。
正如评论者 Lee_Dailey 正确指出的那样,.Add()
方法不适用于数组。当我在数组上调用 .Add()
时,我收到以下错误消息,它解释得很清楚:
Exception calling "Add" with "1" argument(s): "Collection was of a
fixed size."
PowerShell 的 +=
运算符通过在您每次调用运算符时重新创建具有新大小的数组来解决此问题。当然这不是很有效,所以应该避免 +=
除非数组非常小。
在大多数情况下,甚至不需要 +=
,因为当您将 cmdlet 或脚本块的输出分配给变量时,PowerShell 会自动(并且更有效地)创建一个数组。您甚至可以将 foreach
、if
和 switch
等控制语句的输出分配给变量。
所以,删除这一行...
$DynamicGroupSet = @()
...改为这样做:
$DynamicGroupSet = foreach ($group in $keyCarrierGroups){
Get-AzureADMSGroup -Id $group.Name.Split("_")[1]
}
您会看到代码甚至变得更加清晰。
PowerShell 自动捕获在 foreach
主体中运行的所有内容的输出并将其添加到 $DynamicGroupSet
,如果有多个元素,它将是一个数组。
Import-Module AzureADPreview
$keyCarrierGroups = @()
$DynamicGroupSet = @()
$storeInfo = @{}
$keyCarrierGroups = (Get-ADGroup -Filter {DisplayName -like "*_Key_Carriers"})
foreach ($group in $keyCarrierGroups){
$DynamicGroupSet.Add((Get-AzureADMSGroup -Id $group.Name.Split("_")[1]))
}
foreach($group in $DynamicGroupSet){$storeInfo.add($group.DisplayName.Split("_")[0],$group.Id)}
foreach($store in $storeinfo.Keys){Set-AzureADMSGroup -Id $storeinfo.Item($store) -MembershipRule {(user.Department -contains $store) -and (user.extensionAttribute3 -eq "A") -and (user.extensionAttribute6 -contains "10005") -or (user.extensionAttribute6 -contains "10006") -or (user.extensionAttribute6 -contains "10013") -or (user.extensionAttribute6 -contains "10064") -or (user.extensionAttribute6 -contains "10070") -or (user.extensionAttribute6 -contains "10078") -or (user.extensionAttribute6 -contains "10146") -or (user.extensionAttribute6 -contains "205") -or (user.extensionAttribute6 -contains "10158") -or (user.extensionAttribute6 -contains "10173") -or (user.extensionAttribute6 -contains "40057") -or (user.extensionAttribute6 -contains "10012") -or (user.extensionAttribute6 -contains "10022") -or (user.extensionAttribute6 -contains "10023") -or (user.extensionAttribute6 -contains "10104") -or (user.extensionAttribute6 -contains "10123") -or (user.extensionAttribute6 -contains "70017") -or (user.extensionAttribute6 -contains "70029") -or (user.extensionAttribute6 -contains "70056") -or (user.extensionAttribute6 -contains "70099") -or (user.extensionAttribute6 -contains "80004") -or (user.extensionAttribute6 -contains "80016") -or (user.extensionAttribute6 -contains "80076") -or (user.extensionAttribute6 -contains "80143") -or (user.extensionAttribute6 -contains "80156") -or (user.extensionAttribute6 -contains "10166") -or (user.extensionAttribute6 -contains "10179") -or (user.extensionAttribute6 -contains "80178") -or (user.extensionAttribute6 -contains "80217") -or (user.extensionAttribute6 -contains "80224") -or (user.extensionAttribute6 -contains "10010") -or (user.extensionAttribute6 -contains "80003") -or (user.extensionAttribute6 -contains "80011") -or (user.extensionAttribute6 -contains "80014") -or (user.extensionAttribute6 -contains "80066") -or (user.extensionAttribute6 -contains "80090") -or (user.extensionAttribute6 -contains "10136") -or (user.extensionAttribute6 -contains "10159") -or (user.extensionAttribute6 -contains "10181") -or (user.extensionAttribute6 -contains "10183") -or (user.extensionAttribute6 -contains "10185") -or (user.extensionAttribute6 -contains "70128") -or (user.extensionAttribute6 -contains "80177") -or (user.extensionAttribute6 -contains "80191")}}
到目前为止,我已经尝试了 $DynamicGroupSet += 和 .add。调试数组时为空。我已经确认 (Get-AzureADMSGroup -Id $group.Name.Split("_")[1]) returns 我在找什么。无法弄清楚为什么它没有填充到数组中。
正如评论者 Lee_Dailey 正确指出的那样,.Add()
方法不适用于数组。当我在数组上调用 .Add()
时,我收到以下错误消息,它解释得很清楚:
Exception calling "Add" with "1" argument(s): "Collection was of a fixed size."
PowerShell 的 +=
运算符通过在您每次调用运算符时重新创建具有新大小的数组来解决此问题。当然这不是很有效,所以应该避免 +=
除非数组非常小。
在大多数情况下,甚至不需要 +=
,因为当您将 cmdlet 或脚本块的输出分配给变量时,PowerShell 会自动(并且更有效地)创建一个数组。您甚至可以将 foreach
、if
和 switch
等控制语句的输出分配给变量。
所以,删除这一行...
$DynamicGroupSet = @()
...改为这样做:
$DynamicGroupSet = foreach ($group in $keyCarrierGroups){
Get-AzureADMSGroup -Id $group.Name.Split("_")[1]
}
您会看到代码甚至变得更加清晰。
PowerShell 自动捕获在 foreach
主体中运行的所有内容的输出并将其添加到 $DynamicGroupSet
,如果有多个元素,它将是一个数组。