如何在Powershell中对自定义对象中的每个单独对象执行foreach循环



我试图在自定义对象中的每个行实例上执行foreach循环,但foreach将自定义对象作为一个整体。

I.e,

$ADUsersCustomObject = New-Object -TypeName pscustomobject
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name email -Value $ADUsers.EmailAddress
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name first_name -Value $ADUsers.givenName
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name last_name -Value $ADUsers.Surname
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name extension_number -Value $ADUsers.IPPhone
$ADToXYCompare = Compare-Object -ReferenceObject $ADUsersCustomObject -DifferenceObject $APACXYUsers.members -Property email -PassThru
foreach ($UserADObject in $ADToXYCompare){
# Do X and Y
}

问题是$UserADObject将返回所有内容作为一个整体:

+--------------------------------------------+---------------+--------------------+--------------------+
| email                                      | first_name    | last_name          | extension_number   |
+--------------------------------------------+---------------+--------------------+--------------------+
| {abc@test.com, def@test.com, ghi@test.com} | {im, a, test} | {bee, sting, wasp} | {4100, 4101, 4102} |
+--------------------------------------------+---------------+--------------------+--------------------+

而不是返回对象的单个实例:

+--------------+------------+-----------+------------------+
| email        | first_name | last_name | extension_number |
+--------------+------------+-----------+------------------+
| abc@test.com | im         | bee       | 4100             |
+--------------+------------+-----------+------------------+

有什么想法吗?

修复!非常感谢。我用

$Fixed = @()
$ADUsers | ForEach-Object{
$ADUsersCustomObject = New-Object -TypeName pscustomobject
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name email -Value $_.EmailAddress
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name first_name -Value $_.GivenName
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name last_name -Value $_.Surname
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name extension_number -Value $_.IPPhone
$Fixed += $ADUsersCustomObject
}

问题来自于以下事实:

Add-Member -MemberType NoteProperty -Name email -Value $ADUsers.EmailAddress

您将所有$ADUsers中的EmailAddress的列表放入email中。

您必须在$ADUsers上循环,为每次使用$ADUsers创建一个$ADUserCustomObject,然后将其添加到$ADUsersCustomObject中。

谢谢!!我用

$Fixed = @()
$ADUsers | ForEach-Object{
$ADUsersCustomObject = New-Object -TypeName pscustomobject
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name email -Value $_.EmailAddress
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name first_name -Value $_.GivenName
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name last_name -Value $_.Surname
$ADUsersCustomObject | Add-Member -MemberType NoteProperty -Name extension_number -Value $_.IPPhone
$Fixed += $ADUsersCustomObject
}

最新更新