首页 > 解决方案 > 从两个列表中提取数据比较并将其导出到一个

问题描述

我正在尝试导入一个 csv 文件,如果来自该文件的信息通过每个 AD 用户运行它比较电子邮件地址并将广告中的数据导出到一个新文件中。

$CATO = Import-Csv -Path "C:\test\testimport.csv"
$adinfo = get-aduser -filter * -properties Name, Office, UserPrincipalName | Select-Object Name, Office, UserPrincipalName

foreach($CATOitem in $CATO){

    $CATOname = $CATOitem.'First Name' + " " + $CATOitem.'Last Name'
    $CATOemail = $CATOitem.Email

    foreach($aditem in $adinfo){

        $adname = $aditem.Name
        $adoffice = $aditem.Office
        $ademail = $aditem.UserPrincipalName

        if($CATOemail -in $ademail){
            $res = $adname, $adoffice, $ademail
            $res | Out-File -FilePath "C:\test\testresult.txt" 
        }

    }

}

我只得到最后一个返回的值,而我想要每个值(应该是大约 500 个值)

我想要一个 csv 文件中的结果,其中包含列“NAME”“OFFICE”以及下面的所有值。

标签: powershellactive-directory

解决方案


虽然添加-Append会让你的代码工作,但它确实是非常低效的代码。

另外,当您有要写入的对象而不是 CSV 文件时,为什么要使用纯文本文件作为输出?

试试下面:

$CATO = Import-Csv -Path "C:\Users\yclaeys\Documents\PSScripts\Michel script CATO\vpnusers.csv"
# get an array of Email addresses from the CSV (remove empty fields)
$CATOemail = $CATO.Email | Where-Object { $_ -match '\S' }

# get users with UserPrincipalName corresponding to the `Email` column in your CSV file
# and export as proper new CSV file
Get-ADUser -Filter * -Properties Name, Office, UserPrincipalName | 
    Where-Object { $CATOemail -contains $_.UserPrincipalName } |
    Select-Object Name, Office, UserPrincipalName |
    Export-Csv -Path "C:\Users\yclaeys\Documents\PSScripts\Michel script CATO\res.csv" -NoTypeInformation

推荐阅读