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