powershell - 从两个列表中提取数据比较并将其导出到一个
问题描述
我正在尝试导入一个 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”以及下面的所有值。
解决方案
虽然添加-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
推荐阅读
- javascript - 如何使用外部API为jitsi meet video room设置密码
- python - Python在numpy数组中拆分字符串
- mysql - 使用模数运算符在检查约束中出错
- azure - 在编写获取存储帐户密钥的命令时。会有两个密钥,如何在变量中存储一个值
- javascript - 使用 JavaScript 将海报图片替换为 Wordpress 特色图片
- mysql - Mysql:ALTER TABLE 不锁定表?
- perl - 使用 crontab 通过 perl 调用 Java 程序时不运行
- javascript - 是否可以向使用 ReactJS 制作的 Todo 应用程序添加编辑功能?
- java - 如何强制特定的测试类在单独的 jvm 中执行?
- haskell - 安装 zlib 时 ghc.exe 无法执行 ld.exe