如何解决EWS 如何使用 powershell 获取子文件夹
使用此代码:
$folderview = New-Object Microsoft.Exchange.WebServices.Data.FolderView(100)
$folderview.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.Webservices.Data.BasePropertySet]::FirstClassProperties)
$folderview.PropertySet.Add([Microsoft.Exchange.Webservices.Data.FolderSchema]::DisplayName)
$folderview.Traversal = [Microsoft.Exchange.Webservices.Data.FolderTraversal]::Deep
$folderfindResults = $service.FindFolders([Microsoft.Exchange.Webservices.Data.WellKnownFolderName]::Inbox,$folderview)
我可以获取邮箱中的所有文件夹。 但是如何只获取特定文件夹下的子文件夹?
收件箱 过程 一种 ...Z
我想获取所有文件夹(A...Z),以及文件夹中的项目。
解决方法
您需要使用 findFolder 方法首先找到根子文件夹,然后使用该文件夹 ID 查找它的子文件夹(与上面的相同),然后您需要查询每个子文件夹以获取其项目。要获取初始子文件夹,您可以使用类似文件夹的内容,例如在您的上下文中运行它
$Subfolder = Get-FolderFromPath -MailboxName email@dom.com -FolderPath \Inbox\Process -service $service
function Get-FolderFromPath {
param (
[Parameter(Position = 0,Mandatory = $true)] [string]$FolderPath,[Parameter(Position = 1,Mandatory = $true)] [string]$MailboxName,[Parameter(Position = 2,Mandatory = $true)] [Microsoft.Exchange.WebServices.Data.ExchangeService]$service
)
process {
## Find and Bind to Folder based on Path
#Define the path to search should be seperated with \
#Bind to the MSGFolder Root
$psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$PidTagMessageSizeExtended = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0xe08,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Long);
$PR_ATTACH_ON_NORMAL_MSG_COUNT = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x66B1,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Integer);
$psPropset.Add($PidTagMessageSizeExtended)
$psPropset.Add($PR_ATTACH_ON_NORMAL_MSG_COUNT)
$folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Root,$MailboxName)
$tfTargetFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)
#Split the Search path into an array
$fldArray = $FolderPath.Split("\")
if ($fldArray.Length -lt 2) {throw "No Root Folder"}
#Loop through the Split Array and do a Search for each level of folder
for ($lint = 1; $lint -lt $fldArray.Length; $lint++) {
#Perform search based on the displayname of each folder level
$fvFolderView = new-object Microsoft.Exchange.WebServices.Data.FolderView(1)
$fvFolderView.PropertySet = $psPropset
$SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$fldArray[$lint])
$findFolderResults = $service.FindFolders($tfTargetFolder.Id,$SfSearchFilter,$fvFolderView)
$tfTargetFolder = $null
if ($findFolderResults.TotalCount -gt 0) {
foreach ($folder in $findFolderResults.Folders) {
$tfTargetFolder = $folder
}
}
else {
Write-host ("Error Folder Not Found check path and try again") -ForegroundColor Red
$tfTargetFolder = $null
break
}
}
if ($tfTargetFolder -ne $null) {
$tfTargetFolder | Add-Member -Name "FolderPath" -Value $FolderPath -MemberType NoteProperty
$tfTargetFolder | Add-Member -Name "Mailbox" -Value $MailboxName -MemberType NoteProperty
$prop4Val = $null
if ($tfTargetFolder.TryGetProperty($PidTagMessageSizeExtended,[ref] $prop4Val)) {
Add-Member -InputObject $tfTargetFolder -MemberType NoteProperty -Name FolderSize -Value $prop4Val
}
$prop5Val = $null
if ($tfTargetFolder.TryGetProperty($PR_ATTACH_ON_NORMAL_MSG_COUNT,[ref] $prop5Val)) {
Add-Member -InputObject $tfTargetFolder -MemberType NoteProperty -Name PR_ATTACH_ON_NORMAL_MSG_COUNT -Value $prop5Val
}
return,[Microsoft.Exchange.WebServices.Data.Folder]$tfTargetFolder
}
else {
return,$null
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。