【问题标题】:How to do a many to many merge of two CSV files with Powershell?如何使用 Powershell 对两个 CSV 文件进行多对多合并?
【发布时间】:2011-11-03 22:56:10
【问题描述】:

我有两个不同的 CSV。一个是全球组、本地组和系统的报告。另一个是用户、登录 ID 和全局组的列表。

如您所见,全局 AD 组是通用列,在两个文件中都标记为“成员”。成员中的某些项目实际上是本地用户或域用户。本地用户需要被过滤掉,域用户需要被移植到结果中。

使这项任务变得困难的原因是连接是多对多的。此外,我需要能够轻松地将新列添加到脚本中。我已经知道如何获取您创建的任何脚本的输出并根据需要重新排序列。

理想情况下,每个 CSV 文件中的列都无关紧要,脚本应根据公共列将两个文件中的所有列连接在一起。不过,如果可以在调用函数时指定公共列,那就太好了。

因此示例数据如下所示:

$CSV1
"Members","LocalGroup","System"
"System1\local-user","Guests","System1"
"adminaccounts","Administrators",System2"
"adminaccounts","Auditors","System2"
"System3\User1","Administrators","System3"
"System3\Temp","Guests","System3"
"System4\Temp","Guests","System4"
"System5\Temp","Guests","System5"
"Domain1\ngd","Users","System6"
"Domain1\Group1","Administrators","System7"
"Domain1\Group1","Administrators","System8"
"Domain1\Group1","Administrators","System9"
"Domain1\Group1","Administrators","System10"
"Domain1\Group2","Administrators","System1"
"Domain1\Group2","Administrators","System4"
"Domain1\Group2","Administrators","System7"
"Domain1\Group3","Administrators","System3"
"Domain1\Group3","Administrators","System1"
"Domain1\Group4","Administrators","System4"
"Domain2\Group1","Administrators","System5"
"Domain2\Group1","Administrators","System6"
"Domain2\Group1","Administrators","System2"

$CSV2
"Members","Username","Logon ID"
"Domain1\Group1","Pauline S. Trotter","pst"
"Domain1\Group1","Caroline T. Gartner","ctg"
"Domain1\Group1","Albert F. Hollis","afh"
"Domain1\Group1","Todd C. Cope","tcc"
"Domain1\Group1","Rebecca D. Bergman","rdb"
"Domain1\Group1","Robert A. Wagner","raw"
"Domain1\Group2","Daniel R. Dalton","drd"
"Domain1\Group2","Christopher V. Alderbrook","cva"
"Domain1\Group2","Brittany L. Stone","bls"
"Domain1\Group2","Susan K. Holman","skh"
"Domain1\Group2","Mark P. Bett","mpb"
"Domain1\Group2","Francine U. Zen","fuz"
"Domain1\Group2","Holly M. Fulton","hmf"
"Domain1\Group3","Edgar X. Indiana","exi"
"Domain1\Group3","John Q. Pullit","jqp"
"Domain1\Group3","Victor E. Emmerson","vee"
"Domain1\Group3","Robert A. Wagner","raw"
"Domain1\Group3","Pauline S. Trotter","pst"
"Domain1\Group4","Noreen G. Dulles","ngd"
"Domain1\Group4","Lois H. Crantz","lhc"
"Domain1\Group4","Brad F. Quilt","bfq"
"Domain1\Group4","Zoren T. Maranda","ztm"
"Domain1\Group4","William K. Entz","wke"
"Domain1\Group4","Quils U. Naruz","qun"
"Domain2\Group1","Zoren T. Maranda","ztm"
"Domain2\Group1","Robert A. Wagner","raw"
"Domain2\Group1","Holly M. Fulton","hmf"
"Domain2\Group1","Brad F. Quilt","bfq"
"Domain2\Group1","Pauline S. Trotter","pst"
"Domain2\Group1","Noreen G. Dulles","ngd"

提前感谢您的帮助。

问候,

亚历克斯

以下是一些带有示例输出的简化数据:

$CSV1 
"Members","LocalGroup","System" 
"System1\local-user","Guests","System1" 
"adminaccounts","Administrators",System2" 
"adminaccounts","Auditors","System2" 
"System3\User1","Administrators","System3" 
"System3\Temp","Guests","System3" 
"System4\Temp","Guests","System4" 
"System5\Temp","Guests","System5" 
"Domain1\ngd","Users","System6" 
"Domain1\Group1","Administrators","System7" 
"Domain1\Group1","Administrators","System8" 
"Domain1\Group2","Administrators","System1" 
"Domain1\Group3","Administrators","System3" 
"Domain1\Group3","Administrators","System1" 
"Domain1\Group4","Administrators","System4" 
"Domain2\Group1","Administrators","System5" 

$CSV2 
"Members","Username","Logon ID" 
"Domain1\Group1","Pauline S. Trotter","pst" 
"Domain1\Group1","Caroline T. Gartner","ctg" 
"Domain1\Group1","Albert F. Hollis","afh" 
"Domain1\Group2","Daniel R. Dalton","drd" 
"Domain1\Group2","Christopher V. Alderbrook","cva" 
"Domain1\Group3","Pauline S. Trotter","pst" 
"Domain1\Group4","Noreen G. Dulles","ngd" 
"Domain1\Group4","Quils U. Naruz","qun" 
"Domain2\Group1","Zoren T. Maranda","ztm" 
"Domain2\Group1","Noreen G. Dulles","ngd" 

Output 
"Username","Logon ID","Members","LocalGroup","System" 
,,"System1\local-user","Guests","System1" 
,,"adminaccounts","Administrators",System2" 
,,"adminaccounts","Auditors","System2" 
,,"System3\User1","Administrators","System3" 
,,"System3\Temp","Guests","System3" 
,,"System4\Temp","Guests","System4" 
,,"System5\Temp","Guests","System5" 
"Pauline S. Trotter","pst","Domain1\Group1","Administrators","System7" 
"Pauline S. Trotter","pst","Domain1\Group1","Administrators","System8" 
"Pauline S. Trotter","pst","Domain1\Group3","Administrators","System3" 
"Pauline S. Trotter","pst","Domain1\Group3","Administrators","System1" 
"Caroline T. Gartner","ctg","Domain1\Group1","Administrators","System7" 
"Caroline T. Gartner","ctg","Domain1\Group1","Administrators","System8" 
"Albert F. Hollis","afh","Domain1\Group1","Administrators","System7" 
"Albert F. Hollis","afh","Domain1\Group1","Administrators","System8" 
"Daniel R. Dalton","drd","Domain1\Group2","Administrators","System1" 
"Christopher V. Alderbrook","cva","Domain1\Group2","Administrators","System1" 
"Noreen G. Dulles","ngd","Domain1\Group4","Administrators","System4" 
"Noreen G. Dulles","ngd","Domain2\Group1","Administrators","System5" 
"Quils U. Naruz","qun","Domain1\Group4","Administrators","System4" 
"Zoren T. Maranda","ztm","Domain2\Group1","Administrators","System5" 

【问题讨论】:

    标签: powershell csv many-to-many


    【解决方案1】:

    您可以使用Join-Collections script

    $csv1 = import-csv csv1.csv
    $csv2 = import-csv csv2.csv
    $collection = Join-Collections -FirstCollection $csv1 -FirstJoinColumn Members -SecondCollection $csv2 -SecondJoinColumn Members
    $collection | export-csv result.csv
    

    【讨论】:

    • 该脚本的更高版本不起作用,但我会尝试这个版本。
    猜你喜欢
    • 2015-06-19
    • 2013-01-11
    • 2021-09-08
    • 2015-03-09
    • 2021-05-17
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多