[英]foreach on each element of array
我有一个脚本,其中有2个问题。 第1部分是一系列变量,这些变量具有使用Get-ADUser满足某些条件的用户。 在第2部分中,我想将第1部分中的系统数组添加到列表中,以便在第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。 $集合看起来像:
14:11 C:\\ Users \\ d> $ collection | FL
长度:106 LongLength:106等级:1 SyncRoot:{CN = XXX \\,XXX,OU = XXX,OU = XXX,OU =域对象,DC = XXX,DC = XXX,DC = XXX,CN = XXX \\,XXX ,OU = XXX,OU = XXX,OU =域对象,DC = XXX,DC = XXX,DC = XXX,CN = XXX,OU =资源,OU = XXX,OU =域对象,DC = XXX,DC = XXX ,DC = XXX,CN = XXX \\,XXX,OU = XXX,OU = XXX,OU =域对象,DC = XXX,DC = XXX,DC = XXX ...} IsReadOnly:False IsFixedSize:True IsSynchronized:False Count :106
O365_VIP
长度:600长长度:600等级:1 SyncRoot:{CN = XXX \\,XXX C,OU = XXX,OU = Users,OU = ME-DXB-IIR,OU = Domain Objects,DC = XXX,DC = XXX,XXX = net,CN = XXX \\,XXXv C,OU = XXX,OU =用户,OU = ME-DXB-IIR,OU =域对象,DC = XXX,DC = XXX,DC = XXX,CN = XXX \\,XXX C,OU = XXX,OU =用户,OU = ME-DXB-IIR,OU =域对象,DC = XXX,DC = XXX,DC = XXX,CN = XXX \\,XXXOU =承包商,OU =用户,OU = ME-DXB-IIR,OU =域对象,DC = emea,DC = CorpLAN,DC = net ...} IsReadOnly:False IsFixedSize:True IsSynchronized:False Count:600O365_Transition
14:16 C:\\ Users \\ shielsd> $ collection [0]
...
SamAccountName:XXX
SID:S-1-5-XXX-XXX-XXX-XXX-XXX
姓:XXX
UserPrincipalName:XXX.XXX@XXX.XXX
专有名称:CN = XXX \\,XXX,OU = XXX,OU = XXXXXX,OU =域名
对象,DC = XXX,DC = XXX,DC = XXX
已启用:True
ExtensionAttribute15:XXX; XXX; O365_VIP
GivenName:XXX
名称:XXX,XXX
ObjectClass:用户
ObjectGUID:XXX-XXX-XXX-XXX-XXX
SamAccountName:XXX
SID:S-1-5-21-XXX-XXX-XXX-XXX
姓:XXX
UserPrincipalName:XXX.XXX@XXX.comO365_VIP
我收到的错误是:
方法调用失败,因为[Microsoft.ActiveDirectory.Management.ADUser]不包含名为“ split”的方法。 在第2行:char:5 + $ expression,$ tag = $ _。split(“,”)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo:InvalidOperation:(split:String)[],RuntimeException
您的问题源于您如何对待$collection
,而$O365_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
。 还将把数组展平为空格分隔的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.