arrays - 对数组的每个元素进行 foreach
问题描述
我有一个脚本,其中有 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。$collection 看起来像:
14:11 C:\Users\d>$collection | 佛罗里达州
长度 : 106 LongLength : 106 Rank : 1 SyncRoot : {CN=XXX\, XXX,OU=XXX,OU=XXX,OU=Domain Objects,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=Domain Objects,DC=XXX,DC=XXX,DC=XXX...} IsReadOnly : False IsFixedSize : True IsSynchronized : 错误计数: 106
O365_VIP
长度 : 600 LongLength : 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=Users,OU=ME-DXB-IIR,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX, CN=XXX\, XXX C,OU=XXX,OU=Users,OU=ME-DXB-IIR,OU=Domain Objects,DC=XXX,DC=XXX,DC=XXX,CN=XXX\,XXXOU=Contractors,OU=Users,OU =ME-DXB-IIR,OU=Domain Objects,DC=emea,DC=CorpLAN,DC=net...} IsReadOnly : False IsFixedSize : True IsSynchronized : False 计数: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
DistinguishedName : CN=XXX\, XXX,OU=XXX,OU=XXXXXX,OU=Domain
Objects,DC=XXX,DC=XXX,DC=XXX已
启用 : True
ExtensionAttribute15 : XXX;XXX;O365_VIP
GivenName : XXX
Name : XXX, XXX
ObjectClass:用户
ObjectGUID:XXX-XXX-XXX-XXX-XXX
SamAccountName:XXX
SID:S-1-5-21-XXX-XXX-XXX-XXX
姓氏:XXX
用户主体名称:XXX.XXX@XXX.comO365_VIP
我收到的错误是:
方法调用失败,因为 [Microsoft.ActiveDirectory.Management.ADUser] 不包含名为“split”的方法。在 line: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
. 还将您的数组展平为空格分隔的字符串。
推荐阅读
- python - 如何在python函数中有多个arg参数
- python - 在python中,如何将两个非常大的列表与关联的计数列表组合成具有关联计数列表的单个列表?
- excel - 您可以在不嵌套的情况下对许多值使用 SUBSTITUTE 吗?
- python - FastAPI 取决于用例应用程序
- mlr3 - 如何从学习者那里获得 mlr3 重要性分数?
- jira - 如何使用 API 在 Jira 中为 sprint 中的项目添加时间戳或删除时间戳
- java - 使用 Optional (Java 8) 时获取异常 ClassCastException java.lang.Integer 不能强制转换为 java.lang.Long,否则不能
- python - 使用 Python 查找两个 CSV 文件的差异
- java - “变量可能尚未初始化”在哪里使用 switch case 进行初始化?
- networking - 在路由器上阻止 YouTube 后,仍可通过 Chrome 移动浏览器访问 YouTube