2016-10-10 2 views
1

사용하여 하나의 새로운 CSV로 2 개 CSV 파일에서 데이터를 결합 :는 *** 명확성을 위해 수정 됨 파워 쉘

내 ADP CSV는 이러한 헤더가 포함되어 정확히 나와 같은 : 액션 날짜, 작업 정보 유효 날짜, 위치 이름, 법률 이름, 직원 상태 코드, 이름, 성, 직원 ID, 직위, 위치 상태, 위치 도시, 직원 클래스, 고용 날짜, 작업 종료 날짜, FLSA 초과 근무 시간 표시기, FLSA 상태.

내 오피스 365 CSV가 나열된 것과 꼭 이러한 헤더가 포함되어 표시 이름, 이메일 주소,시, 주, 지역 이름, 직위 : 표시 이름, 이메일 주소

나는 나열 CSV이 필요합니다.

두 파일을 결합하여 Office 365 사용자와 도시, 주, 위치 이름, 직책과 같은 프로필에 누락 된 데이터만을 남기는 Powershell 스크립트가 필요합니다.

Office 365 목록에 대한 해시 테이블을 만드는 것을 이해합니다. 그러나 "해시 테이블에 올바른 헤더 이름을 사용하고 있지 않습니다.

**** 수정 됨 다시! 내 코드를 첨부하고 있습니다. 생성하는 Email 열이 비어 있다는 점을 제외하면 필요한 모든 작업을 수행합니다. 더 이상 hast 테이블 오류가 발생하지 않습니다. 대신 수출의 기존 스크립트와

#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' 
} 

:

$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를로드 각각의 연산 사이에 새로운 파일이 생기면 이들을 모두 하나의 파이프 라인으로 연결하십시오. 대부분의 코드는 아주 작은 메타 프로그래밍을 통해 자동화 될 수 있습니다!

# 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 목록 - DISPLAY NAME, EMAIL ADDRESS (그러나 수출 할 때 약 30 칸과 EMAIL ADDRESS의 끝을 넣지 만 손으로 ​​지우고 파일을 저장할 수 있습니다.) – BrandonCrimmins

+0

@BrandonCrimmins 해시 테이블을 만들 때 속성 이름 주위에 따옴표를 잊어 버렸습니다. 답변을 업데이트했습니다. –