2017-12-28 5 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) 

だから私の質問は?オーガナイザーメール、クリエイターメール、開始日、終了日をテーブルに保存することができます。

 
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} 
... 

だから私は@{}多値からのメールのみと日付の要素を取得したい:

$calEvents.itemsは次のようになります。 どのように考えていますか? (私は1つのプロパティだけを展開できます)。

答えて

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

ありがとう仲間!それはそれだった。私は別の問題を抱えていますが、それはときどきこのように見えるプロパティ "開始"です: 開始:@ {dateTime = 2018-06-27T11:00:00 + 02:00} と何かのようなもの: start: @ date = 2018-03-26} dateTimeとdateを区別するにはどうすればいいですか。日付と日付の異なる列名を指定します。 – Mara

+0

実際には、列名としての「開始」はOKですが、どちらが存在するかに応じて(日付と時刻のどちらか一方である必要があります)、日付エンティティまたは日時エンティティのいずれかを含める必要があります。 – 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 
関連する問題