我有一个脚本,其中有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 =域对象,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:假IsFixedSize:真IsSynchronized:假 数:106
O365_VIP
长度:600长长度:600等级:1 SyncRoot:{CN = XXX \,XXX C,OU = XXX,OU =用户,OU = ME-DXB-IIR,OU =域 对象,DC = XXX,DC = XXX,XXX =净,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 =域 Objects,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
DistinguishedName: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字符:5 + $ expression,$ tag = $ _。split(“,”) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(split:String)[],RuntimeException
答案 0 :(得分:0)
您遇到的问题源于您如何对待$collection
,而$O365_TransitionGroupMembers
所包含的内容可能会加剧这种情况。既然听起来像是另一个收藏。
当前$collection
是一个数组数组。 Also known as a jagged array。由于该逗号被用作数组元素定界符,因此无需拆分。
使用您的代码和示例数据看一下这个例子,这很重要。
$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
。还将把数组展平为以空格分隔的字符串。