Arrays 数组中每个元素上的foreach

Arrays 数组中每个元素上的foreach,arrays,powershell,Arrays,Powershell,我有一个脚本,有两个部分,我有一个问题。第#1部分是一系列变量,这些变量让用户使用Get ADUser满足某些条件。第2部分,我想将第一部分中的系统数组添加到一个列表中,这样在第3部分“添加”中,数据与$tag一起添加到一个大数组中,这样在第4部分(未显示)中,所有内容都可以一次处理 重要的是,第1部分中的所有变量都以单个数组中的一个标记结束,并且在第1部分中添加更多变量时很容易添加到。这背后的想法是,人们可以添加到第1部分,在第2部分中引用它,而不必重复第3部分和第4部分中的代码 问题: 在第

我有一个脚本,有两个部分,我有一个问题。第#1部分是一系列变量,这些变量让用户使用Get ADUser满足某些条件。第2部分,我想将第一部分中的系统数组添加到一个列表中,这样在第3部分“添加”中,数据与$tag一起添加到一个大数组中,这样在第4部分(未显示)中,所有内容都可以一次处理

重要的是,第1部分中的所有变量都以单个数组中的一个标记结束,并且在第1部分中添加更多变量时很容易添加到。这背后的想法是,人们可以添加到第1部分,在第2部分中引用它,而不必重复第3部分和第4部分中的代码

问题:
在第3部分的第2行,我无法将$collection数组拆分为数组和标记,以添加到$data数组中

#1
...
$O365_TransitionGroupMembers = $O365_TransitionGroupMembers | Select-Object -Unique

#2
$collection = `
(($VIPUser),"O365_VIP"),
(($O365_TransitionGroupMembers),"O365_Transition")
...

#3
$collection | ForEach-Object {
    $expression,$tag = $_.split(",")

    $data = ForEach ($User in $expression) {
        #Create new object for passing back the required information
        $Result = New-Object PSObject
        $Result | Add-Member -MemberType NoteProperty -name DistinguishedName -value NotSet
...
        $Result.Tag = $tag
...
编辑:

第1部分中的$collection和$vars都是系统数组,第1部分中的$vars看起来像get aduser。$collection看起来像:

14:11 C:\Users\d>$collection|fl

长度:106长长度:106秩:1同步根 :{CN=XXX\,XXX,OU=XXX,OU=XXX,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX, CN=XXX\,XXX,OU=XXX,OU=XXX,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX, CN=XXX,OU=Resources,OU=XXX,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX, CN=XXX\,XXX,OU=XXX,OU=XXX,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX…} IsReadOnly:False IsFixedSize:True IsSynchronized:False 计数:106

O365_VIP
长度:600长度:600等级:1 SyncRoot:{CN=XXX\,XXX C、 OU=XXX,OU=Users,OU=ME-DXB-IIR,OU=Domain 对象,DC=XXX,DC=XXX,XXX=net,CN=XXX\,XXXv C、 OU=XXX,OU=Users,OU=ME-DXB-IIR,OU=Domain 对象,DC=XXX,DC=XXX,DC=XXX,CN=XXX\,XXX C、 OU=XXX,OU=Users,OU=ME-DXB-IIR,OU=Domain 对象,DC=XXX,DC=XXX,DC=XXX,CN=XXX\, XXXOU=承包商,OU=用户,OU=ME-DXB-IIR,OU=域 对象,DC=emea,DC=CorpLAN,DC=net…}IsReadOnly:False IsFixedSize:真IsSynchronized:假计数:600

O365_跃迁

14:16 C:\Users\shielsd>$collection[0]

SamAccountName:XXX
SID:S-1-5-XXX-XXX-XXX-XXX-XXX-XXX
姓氏:XXX
用户名:XXX。XXX@XXX.XXX
区分名称:CN=XXX\,XXX,OU=XXX,OU=XXXXXX,OU=Domain
对象,DC=XXX,DC=XXX,DC=XXX
已启用:真
扩展属性15:XXX;XXX;O365_VIP
GivenName:XXX
姓名:XXX,XXX
对象类:用户
对象GUID:XXX-XXX-XXX-XXX-XXX
SamAccountName:XXX
SID:S-1-5-21-XXX-XXX-XXX-XXX
姓氏:XXX
用户名:XXX。XXX@XXX.com

O365_贵宾

我收到的错误是:

方法调用失败,因为 [Microsoft.ActiveDirectory.Management.ADUser]不包含 名为“split”的方法。第2行字符:5 +$expression,$tag=$\分割(“,”) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidOperation:(拆分:字符串)[],运行时异常


您的问题源于您如何处理
$collection
,而
$O365\u TransitionGroupMembers
所包含的内容可能会加剧您的问题。因为它听起来像另一个收藏

当前,
$collection
是一个数组数组。因为逗号被用作数组元素分隔符,所以没有要拆分的内容

请使用您的代码和示例数据来看看这个示例,这些数据应该可以证明这一点

$VIPUser = "Matt"
$O365_TransitionGroupMembers = "Tim","John"

$collection = (($VIPUser),"O365_VIP"),
(($O365_TransitionGroupMembers),"O365_Transition")

$collection | ForEach-Object{
    write-host ("This element contains {0} items and the second on is: {1}" -f $_.count, $_[1])
}

数组元素中的实际数据不包含逗号(从我们看到的情况来看),因此拆分只能填充
$expression
。也会将数组展平为以空格分隔的字符串。

能否显示
$collection
包含的内容的示例?您正在用逗号拆分
$collection
,但您分配它的方式使我认为值是
行分隔的
,而不是
逗号分隔的
。我们需要了解
$vipuser
是什么,以及
$O365_TransitionGroupMembers
。当将集合放到控制台时,它是什么样子可以提供更好的洞察力。@Matt-或者我应该说,
$VIPUser
$O365\u TransitionGroupMembers
的值将是令人感兴趣的。但不管是什么情况,我认为逗号分隔的拆分在这里是行不通的。同意(为什么我删除了评论)。我认为第一个是标量,另一个是数组。乍一看,这可能是一个锯齿状的2d数组。>此元素包含2项,第二项为:O365_VIP>此元素包含2项,第二项为:O365_TransitionAnks您的答案是,我不太明白从这里开始该怎么做,所以我可能会问:如何构建我的$collection数组,以便在for循环的每一行/索引上调用2个‘things’?拆分只是达到目的的一种手段,我只需要能够说,'对于$collections数组中的每一行,对数组执行X,对文本执行Y,我建议阅读链接文章,这有助于处理锯齿数组。这样,您就知道如何访问循环中的数据结构。我的回答还显示了一个你应该能够推断的例子。我不能确切地告诉你该怎么做,因为我没有你的数据。在我的代码中,文本是
$\[1]
,第一部分可以通过
$\[0]
访问,但是其中有多种数据类型,因此没有单一的解决方案。可能是
ForEach($User in$\u0])
或类似的东西。这取决于你的最终目的是什么。