使用PowerShell创建日历约会咨询(已尝试EWS)
嘿,我来帮你搞定用PowerShell创建日历约会的事儿!你提到尝试过EWS但拿不准操作是否正确,那我先把EWS的标准步骤理清楚,另外也给你补充下现在针对Exchange Online更常用的模块方法,按需选择就行~
方法一:使用Exchange Web Services (EWS)
EWS适合本地Exchange或者需要兼容旧版本的场景,先确保你已经准备好了EWS Managed API:
- 可以通过NuGet安装:
Install-Package Microsoft.Exchange.WebServices - 或者手动下载安装包,找到对应的程序集路径
接下来是具体的PowerShell代码步骤,每一步都给你标清楚了:
# 加载EWS程序集(根据你的安装路径调整) Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" # 创建EWS服务实例 $exchangeService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016) # 设置身份验证(这里用当前用户的Windows身份,也可以用用户名密码) $exchangeService.UseDefaultCredentials = $true # 设置Exchange服务器的EWS URL(如果是Exchange Online,直接用Outlook的EWS地址) $exchangeService.Url = New-Object Uri("https://outlook.office365.com/EWS/Exchange.asmx") # 创建日历约会对象 $appointment = New-Object Microsoft.Exchange.WebServices.Data.Appointment($exchangeService) # 设置约会基本属性 $appointment.Subject = "团队同步会议" $appointment.Body = "讨论Q3项目进度,准备好各自的报告" $appointment.Start = Get-Date "2024-09-15 14:00:00" $appointment.End = Get-Date "2024-09-15 15:30:00" $appointment.Location = "会议室B302" # 添加参会人(可选) $appointment.RequiredAttendees.Add("john.doe@contoso.com") $appointment.OptionalAttendees.Add("jane.smith@contoso.com") # 设置提醒(提前15分钟) $appointment.ReminderMinutesBeforeStart = 15 # 保存约会到日历(SendAndSaveCopy会发送邀请给参会人,Save只是保存到自己日历) $appointment.Save([Microsoft.Exchange.WebServices.Data.SendInvitationsMode]::SendAndSaveCopy) Write-Host "日历约会创建成功!"
如果之前操作有问题,大概率是程序集路径不对,或者EWS URL没设置正确——Exchange Online的话直接用上面的地址就好,本地Exchange需要换成你自己服务器的EWS地址。
方法二:使用Exchange Online Management模块(推荐Exchange Online用户)
如果你的邮箱是Exchange Online(Office 365/微软365),用官方的模块会更简单,不需要折腾EWS:
- 先安装模块(需要管理员权限):
Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber
- 连接到Exchange Online:
Connect-ExchangeOnline -UserPrincipalName "your-email@contoso.com"
- 创建日历约会:
New-CalendarItem -Subject "客户需求沟通会" ` -Body "确认客户最新需求细节" ` -Start "2024-09-16 10:00:00" ` -End "2024-09-16 11:00:00" ` -Location "线上会议(Teams链接)" ` -RequiredAttendees "client.contact@external.com" ` -ReminderMinutesBeforeStart 30 ` -SendInvites SendToAllAndSaveCopy
这个方法更直观,官方维护的模块也更稳定,权限方面只要你有邮箱的日历编辑权限就行。
一些注意事项
- 时区:如果需要指定时区,EWS里可以用
$appointment.StartTimeZone = [Microsoft.Exchange.WebServices.Data.TimeZoneInfo]::FindSystemTimeZoneById("China Standard Time"),模块方法里加-TimeZone "China Standard Time"参数 - 权限:不管用哪种方法,都需要当前账号有创建日历项的权限,添加参会人的话还要有发送邮件的权限
- 本地Exchange:如果是本地Exchange,EWS的版本要和服务器版本对应,避免兼容性问题
内容的提问来源于stack exchange,提问作者Adrian Schulz
相关产品推荐
相关产品推荐

