Как выполнить слияние двух-многих файлов CSV с Powershell? - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть два разных CSV.Одним из них является отчет о глобальных группах, локальных группах и системах.Другой - это список пользователей, идентификаторов входа и глобальных групп.

Как видите, глобальные группы 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" 

1 Ответ

0 голосов
/ 04 ноября 2011

Вы можете использовать скрипт Join-Collections .

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...