powershell - 比较 powershell 中的 2 个 csv 用户列表并在 csv 文件上创建所有差异
问题描述
我的代码卡住了,有人可以帮我吗?我得到了 csv 文件,例如:
昨天.csv:
email,UPN
Joe.Jones@test.ch,JoeJ
Mark.Miller@test.ch,MarkM
Bob.Brown@test.ch,BobB
Frank.Funk@test.ch,FrankF
Roger.Fed@test.ch,RogerF
今天.csv:
email,UPN
Joe.Jones@test.ch,JoeJ
Mark.Miller@test.ch,MarkM
Frank.Funk@test.ch,FrankF
Roger.Federer@test.ch,RogerF
代码:
$yesterday = Import-Csv C:\Tools\Scripts\yesterday.csv
$today = Import-Csv C:\Tools\Scripts\today.csv
$users = @()
foreach ($u in $today) {
$u2 = $yesterday | Where-Object { $_.email -ne $u.email -and $_.UPN -eq $u.UPN } | Select email, UPN -First 1
if ($u2)
{ $users += $u2 }
}
$users | Export-Csv -Path C:\Tools\Scripts\csv3.csv -NoTypeInformation -Force
我想要一个包含电子邮件和 UPN 的第三个 csv 文件,其中今天的电子邮件地址已从昨天更改(并保留昨天)以及用户今天未出现的位置(可以删除)
我得到的结果是:
"email","UPN"
"Roger.Federer@test.ch","RogerF"
我想要的是 :
"email","UPN"
"Bob.Brown@test.ch","BobB"
"Roger.Federer@test.ch","RogerF"
解决方案
你可以使用这样的东西。请注意,我正在对 CSV 进行硬编码,您应该改用Import-Csv
指向您的 CSV。我也ConvertTo-Csv
用来在这里显示结果,你应该Export-Csv
改用。
最后,$map
如果您的 Csv 中有 2 个或更多用户具有完全相同的 UPN,则哈希表可能会引发错误。
$yesterday = @'
email,UPN
Joe.Jones@test.ch,JoeJ
Mark.Miller@test.ch,MarkM
Bob.Brown@test.ch,BobB
Frank.Funk@test.ch,FrankF
Roger.Fed@test.ch,RogerF
'@ | ConvertFrom-Csv
$today = @'
email,UPN
Joe.Jones@test.ch,JoeJ
Mark.Miller@test.ch,MarkM
Frank.Funk@test.ch,FrankF
Roger.Federer@test.ch,RogerF
'@ | ConvertFrom-Csv
$map = @{}
$yesterday.ForEach({
$map.Add($_.UPN,$_.email)
})
$(
# Yesterday CSV where the UPN does not exist in Today CSV
$yesterday | Where-Object { $_.UPN -notin $today.UPN }
# Today CSV where UPN exists in Yesterday CSV and
# email is different from yesterday email
$today | Where-Object {
$_.UPN -in $yesterday.UPN -and $_.email -ne $map[$_.UPN]
}
) | ConvertTo-Csv -NoTypeInformation
输出
"email","UPN"
"Bob.Brown@test.ch","BobB"
"Roger.Federer@test.ch","RogerF"
推荐阅读
- ios - 在 Swift 中,如何获取和转换 Firestore 时间戳字段
- python - 使用哪个关键字以便可以检测到点击按钮?
- vba - MS Access 插入到选择中不适用于 vba
- c# - 如何在 WebView2 中获取服务器响应代码
- r - r中堆叠条形图的滚动平均趋势线
- python - 在 pygame 模块中,按右键时,仅加载列表中的第一个精灵
- python - 如何将模型对象作为初始值传递给表单
- laravel - Laravel - 测试 - assertJsonMissingExact
- javascript - es6 类中需要构造方法吗
- mysql - MYSQL 用列值更新列