2016-10-10 2 views
1

*** редактировал CLARITY:Объединить данные из 2 CSV файлов в 1 новый CSV с помощью Powershell

Мой АДФ CSV содержит эти заголовки точно так, как в списке: Action Дата, Информация о вакансии Дата вступления в силу, название местоположения, Юридическое название, Код статуса сотрудника, имя, фамилия, идентификатор сотрудника, должность, местоположение, местоположение города, класс сотрудников, дата найма, дата прекращения работы, индикатор превышения времени FLSA, статус FLSA.

Мой офис 365 CSV содержит эти заголовки точно, как указано отображаемое имя, адрес электронной почты

Мне нужен CSV, который содержит список: отображаемое имя, адрес электронной почты, город, штат, местоположение и имя, должность.

Мне нужен сценарий Powershell, который объединяет два файла вместе, чтобы оставить меня только с пользователями Office 365 и данными, отсутствующими в их профиле, такими как Город, Штат, Местоположение, Название должности.

Я понимаю, что создаю таблицу хэшей для списка Office 365, но каждый раз, когда я ее создаю, он возвращает «Индекс массива, оцененный как Null», что в моем понимании означает, что я не использую правильные имена заголовков в хэш-таблице.

**** Отредактировано СНОВА! Я прикрепляю свой код. Он делает все, что мне нужно, за исключением того, что столбец электронной почты, который он создает, пуст. У меня больше нет ошибок таблицы.

$ItemsToKeep = 'First Name','Last Name','Employee Status Code','Location Name','Job Title','Location State' 
    $ItemsToKeep += @{Name = "Display Name"; Expression = {$_.'First Name' + ' ' + $_.'Last Name'}} 
    $ItemsToKeep += @{Name = "Email"; Expression = { $EmailLookupTable[$_.'Display Name'] }} 

    $EmailLookupTable = @{} 
    Import-Csv C:\O365LIST.csv |ForEach-Object { 
    $EmailLookupTable[$_.'Display Name'] = $_.'Email Address' 
    } 



    Import-Csv C:\ADPLIST.csv |Where-Object {$_.'Employee Status Code' -eq 'Active'} | Select $ItemsToKeep | export-csv C:\Testing.csv -notypeinformation 

ответ

1

Во-первых, загрузите второй CSV в хэш-таблицу, таким образом, вы можете легко сопоставить имя дисплея с первого CSV на адрес электронной почты:

#Import the second CSV and use a hashtable to store the email address based on the display name 
$EmailLookupTable = @{} 
Import-Csv C:\employee_emails.csv |ForEach-Object { 
    $EmailLookupTable[$_.'Display Name'] = $_.'Email Address' 
} 

С существующий сценарий, вместо экспорта к новому файлу между каждой операцией, соедините их все вместе в одном конвейере - большую часть кода можно автоматизировать с помощью крошечного метапрограммирования!

# Automate away the task of replacing spaces with underscores 
$ColumnsToKeep = "Location Name","Employee Status Code","Job Title","Location State","Location City","First Name","Last Name" 
$PropertiesToSelect = $ColumnsToKeep |ForEach-Object { 
    @{Name = $_ -replace ' ','_'; Expression = [scriptblock]::Create('$_."{0}"' -f $_)} 
} 

# Add the display name property 
$PropertiesToAdd = @(@{Name = "Display_Name"; Expression = {$_.First_Name + ' ' + $_.Last_Name}}) 

# Add the Email address from the lookup table 
$PropertiesToAdd += @{Name = "Email"; Expression = { $EmailLookupTable[$_.First_Name + ' ' + $_.Last_Name] }} 

# 1. Import CSV 
# 2. Filter on status 
# 3. Select the properties to keep/rename 
# 4. Select the properties from the previous step + the new ones 
# 5. Export CSV 
Import-Csv C:\ADPLIST.csv |Where-Object {$_.'Employee Status Code' -eq 'Active'} |Select-Object $PropertiesToSelect |Select-Object *,$PropertiesToAdd |Export-Csv C:\final.csv 
+0

Вы потрясающий! Это очень помогает моей компании. Как бы то ни было, он возвращает ошибку «Индекс массива, оцененный в Null» при попытке создать хеш-таблицу. Кроме того, когда я запускаю свой список из ADP, а другой список из Office 365, заголовки не имеют в них подчеркиваний. Я не получал подчеркивания, пока не запустил свой код, чтобы мы могли удалить шаг замены из этого, пока код использует два оригинальных списка, а не мой измененный ADP csv. Заголовки: – BrandonCrimmins

+0

Office 365 List-DISPLAY NAME, EMAIL ADDRESS (Однако по какой-то причине, когда я экспортирую его, он помещает около 30 пробелов и конец EMAIL ADDRESS, но я могу удалить их вручную и сохранить файл) – BrandonCrimmins

+0

@BrandonCrimmins забыл котировки вокруг имени свойства при создании хеш-таблицы, обновил ответ –

Смежные вопросы