EWS 如何使用 powershell 获取子文件夹
EWS How can I get subfolders with 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 方法首先找到根子文件夹,然后使用该 folderid 找到它的子文件夹(与上面相同),然后您需要查询每个子文件夹以获取其项目。要获取初始子文件夹,您可以使用文件夹之类的东西,例如在您的上下文中您会 运行 它喜欢
$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
}
}
}
使用此代码:
$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 方法首先找到根子文件夹,然后使用该 folderid 找到它的子文件夹(与上面相同),然后您需要查询每个子文件夹以获取其项目。要获取初始子文件夹,您可以使用文件夹之类的东西,例如在您的上下文中您会 运行 它喜欢
$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
}
}
}