2017-12-28 1 views
0

Google 캘린더 이벤트를 검색하고 SQL Server 테이블로 대량 복사하려고합니다.여러 다중 값 속성에서 "Select-Object"하는 방법?

$requestUri = "https://www.googleapis.com/calendar/v3/calendars/.../events" 
$calEvents = Invoke-RestMethod -Headers @{Authorization = "Bearer $accessToken"} -Uri $requestUri -Method Get -Body $Parameters -ContentType "application/json; charset=utf-8" 
$dt = $calEvents.items | Select-Object id, ????????? | Out-DataTable 
... 
$bulkCopy.WriteToServer($dt) 

제 질문은 무엇입니까? 그래서 나는 organizer-email, creator-email, 시작일, 종료일을 테이블에 저장할 수있을 것입니다.

$calEvents.items은 다음과 같습니다

 
created  : 2017-08-28T07:18:19.000Z 
updated  : 2017-08-29T16:41:00.441Z 
summary  : Vacation 
creator  : @{[email protected]; displayName=XXX} 
organizer : @{[email protected]} 
start  : @{date=2018-03-26} 
end   : @{date=2018-03-31} 
... 

그래서 내가 @{} 다 치수에서 전용 이메일과 날짜 요소를 검색 할 수 있습니다. 어떻게 생각하세요? (하나의 속성 만 확장 할 수 있음을 알고 있습니다.)

답변

3

중첩 된 개체 일 가능성이 큽니다. 당신은 calculated properties를 사용하여 데이터를 "결합"할 수 있어야한다 :

$dt = $calEvents.items | 
     Select-Object id, @{n='creator';e={$_.creator.email}}, 
      @{n='organizer';e={$_.organizer.email}}, 
      @{n='start';e={$_.start.date}}, 
      @{n='end';e={$_.end.date}} | 
     Out-DataTable 
+0

고맙습니다 형제! 그거였다. 그래도 또 다른 문제가 있는데, 그 때로는 다음과 같이 보이는 "시작"속성입니다. start : @ {dateTime = 2018-06-27T11 : 00 : 00 + 02 : 00} 및 이와 비슷한 내용 : start : @ date = 2018-03-26} 어떻게 dateTime과 date를 구별 할 수 있습니까? 즉, 날짜와 시간대에 서로 다른 열 이름을 지정하는 것입니다. – Mara

+0

사실, 열 이름으로 "start"는 괜찮지 만 어느 것이 존재하는지에 따라 date 또는 datetime 엔티티 중 하나를 포함해야합니다 (둘 중 하나 여야 함). – Mara

+0

해결 방법 : e = {$ _. start.datetime + $ _. start.date}}. 비록 그것이 최선의 관행인지 모르겠다. – Mara

0

다른 방법

$dt = $calEvents.items | %{ 
[pscustomobject]@{ 
        id=$_.id 
        organizer=$_.organizer.email 
        start=$_.start.date 
        end=$_.end.date 
       } 


} | Out-DataTable 
관련 문제