簡體   English   中英

EWS | Powershell:加載日歷項擴展屬性

[英]EWS | Powershell: Load Calendar Item Extended Property

我正在嘗試將擴展屬性集加載到其他日歷約會對象中,以報告和操作它們。 但是,我一直對此感到困擾。 每當到達需要加載擴展屬性的行時,都會出現以下錯誤:“ 異常調用” Load“,帶有” 1“參數:”無法使用屬性標簽指定自定義屬性“。GUID和ID /名稱組合必須改為使用

我遇到的問題是: $ apApointment.Load($ psPropset);

整個代碼如下。 任何幫助表示贊賞。 順便說一句,我仍然是EWS的初學者。 謝謝

 Report = @() $MailboxList = Read-Host "Enter path to txt file where users are saved." $StartDate = Get-Date 1/1/2013 $EndDate = Get-Date 4/1/2013 #$StartDate = new-object System.DateTime(2014, 08, 27) #$EndDate = new-object System.DateTime(2015, 02, 28) #Logon to Exchange Web Service with default credentials Add-Type -Path "C:\\Program Files\\Microsoft\\Exchange\\Web Services\\2.2\\Microsoft.Exchange.WebServices.dll" $sid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value $user = [ADSI]"LDAP://<SID=$sid>" $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList ([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2) $service.AutodiscoverUrl($user.Properties.mail) Write-Progress -Activity "Preparing" -Status "Retrieving mailbox list" -PercentComplete 0 $Mailboxes = cat $MailboxList | get-mailbox $Count = $Mailboxes.Count #Go through each users found ForEach ($Mailbox in $Mailboxes){ $DisplayName = $Mailbox.DisplayName # $i = $i + 1 # $pct = $i/$Count * 100 # Write-Progress -Activity "Collecting mailbox details" -Status "Processing mailbox $i of $Count - $DisplayName" -PercentComplete $pct Try { $Ok = $true $Mailbox = (Get-Mailbox $mailbox.WindowsEmailAddress -ErrorAction Stop ).PrimarySMTPAddress} catch [System.Exception]{ $Ok = $false } if ($Ok){ #Set EWS up for impersonation of all users $ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId -ArgumentList ([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress),$Mailbox $service.ImpersonatedUserId = $ImpersonatedUserId #Open user folder and bind calendar folder to the EWS service. Then, set each calendar default view to 1000 $folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar,$Mailbox) $CalendarFolder = [Microsoft.Exchange.WebServices.Data.CalendarFolder]::Bind($service,$folderid) $cvCalendarview = new-object Microsoft.Exchange.WebServices.Data.CalendarView($StartDate,$EndDate,1000) #Query the calendar and return the appointments $cvCalendarview.PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) $frCalendarResult = $CalendarFolder.FindAppointments($cvCalendarview) foreach ($apApointment in $frCalendarResult.Items){ #Go through each calendar items and collect thier attributes $psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) #Create extended properties $PR_SENT_REPRESENTING_NAME = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x42,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) $PR_SENDER_NAME = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0xc1a,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) $dispidApptTZDefStartDisplay = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x825E,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) $dispidApptTZDefEndDisplay = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x825F,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) $ptagSentRepresentingSimpleDispName = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x4031,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) #Add extended properties to properties set $psPropset.Add($PR_SENDER_NAME); $psPropset.Add($PR_SENT_REPRESENTING_NAME); $psPropset.Add($dispidApptTZDefStartDisplay); $psPropset.Add($dispidApptTZDefEndDisplay); $psPropset.Add($ptagSentRepresentingSimpleDispName); #Add properties to calendar view $cvCalendarview.PropertySet = $psPropset; #Load properties into current appointment **$apApointment.Load($psPropset);** $SENDER_NAME = @() $SENT_REPRESENTING_NAME = @() $TZDefStartDisplay = @() $TZDefEndDisplay = @() $ptagSentRepSimpleName = @() $apApointment.TryGetProperty($PR_SENT_REPRESENTING_NAME, [ref] $SENT_REPRESENTING_NAME) $apApointment.TryGetProperty($PR_SENDER_NAME, [ref] $SENDER_NAME) $apApointment.TryGetProperty($dispidApptTZDefStartDisplay, [ref] $TZDefStartDisplay) $apApointment.TryGetProperty($dispidApptTZDefEndDisplay, [ref] $TZDefEndDisplay) $apApointment.TryGetProperty($ptagSentRepresentingSimpleDispName, [ref] $ptagSentRepSimpleName) $app = $apApointment.Subject $start = $apApointment.Start $End = $apApointment.End $WhenCreated = $apApointment.DateTimeCreated $Organizer = ($apApointment.Organizer).Address $Required = $apApointment.RequiredAttendees.Count $Recurring = $apApointment.IsRecurring #Prepare objects needed for reports $Obj = New-Object -TypeName PSObject $Obj | Add-Member -MemberType NoteProperty -Name MeetingSubject -Value $app $Obj | Add-Member -MemberType NoteProperty -Name MeetingStartTime -Value $start $Obj | Add-Member -MemberType NoteProperty -Name MeetingEndTime -Value $End $Obj | Add-Member -MemberType NoteProperty -Name WhenCreated -Value $WhenCreated $Obj | Add-Member -MemberType NoteProperty -Name ReoccuringMeeting -Value $Recurring $Obj | Add-Member -MemberType NoteProperty -Name MeetingOrganizer -Value $Organizer $Obj | Add-Member -MemberType NoteProperty -Name SentRepresentingName -Value $SENT_REPRESENTING_NAME $Obj | Add-Member -MemberType NoteProperty -Name SenderName -Value $SENDER_NAME $Obj | Add-Member -MemberType NoteProperty -Name RequiredAttendeeCount -Value $Required $Obj | Add-Member -MemberType NoteProperty -Name MailboxOwner -Value $Mailbox $Obj | Add-Member -MemberType NoteProperty -Name MailboxOwnerDisplay -Value $DisplayName $Report += $Obj Write-Host "$Mailbox Calendar is being processed" } } } #Get all reports and save them into respective paths $Report | Export-Csv c:\\CorruptCalender.csv -NoTypeInformation 

問題是您定義了$dispidApptTZDefStartDisplay$dispidApptTZDefEndDisplay的兩個屬性。 您已使用0x8000范圍內的常量屬性標記值定義了它們。 該范圍內的MAPI標記被命名為屬性,並且它們的實際標記值未設置(它們在郵箱之間變化)。 您需要根據屬性集GUID和屬性ID定義它們。

您擁有的值實際上是屬性ID值,而不是標簽值。 因此,您需要將它們與屬性集GUID結合使用以使它們起作用。 托管API實際上為這些屬性所屬的Appointment屬性集定義了一個常量,因此您可以將這些行更改為:

$dispidApptTZDefStartDisplay = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition([Microsoft.Exchange.WebServices.Data.DefaultExtendedPropertySet]::Appointment, 0x825E,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Binary)
$dispidApptTZDefEndDisplay = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition([Microsoft.Exchange.WebServices.Data.DefaultExtendedPropertySet]::Appointment, 0x825F,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Binary)

並且它應該清除該錯誤(除非我使Powershell語法令人厭煩:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM