답변:
이 시도:
위의 Outlook 2007에서는 작동하지 않습니다. 다음을 수행해야합니다.
다시 Outlook 2013에서 이것은 다음과 같이 변경되었습니다.
여기 내가 작성한 powershell 스크립트가 있습니다. 폴더 이름을 검색하거나 전체 폴더 트리를 나열 할 수 있습니다. 사용법 :
매개 변수없이 모든 폴더를 표시합니다
PS>.\get-MailboxFolders.ps1
└@conserver
└_Licences, codes etc.
└2 Clic
└Axter Ltd
└Chili
└Pérou
매개 변수를 전달하면 해당 용어가 포함 된 폴더 이름을 검색하고 경로를 출력합니다
PS>.\get-MailboxFolders.ps1 201
The term *201* was found in :
\\mailbox@domain.com\2015
\\mailbox@domain.com\archivage\2010
\\mailbox@domain.com\archivage\2011
메일 함 매개 변수를 사용하여 특정 계정을 검색 할 수 있습니다
PS>.\get-MailboxFolders.ps1 -mailbox "infor"
Account selected = ENT, Service Informatique
└Archives
└Boîte de réception
여기 스크립트가 있습니다 :
<#
.Synopsis
search outlook folders or display the folders tree
.Description
This script uses the outlook COM object.
.Parameter folder
Part of the folder's name to search for. If this parameter is not set the script will output
the complete folders tree
#>
[CmdletBinding()]
param(
[Parameter(Position=0, Mandatory=$false,ValueFromPipeline = $true)]
[System.String]
$folder=$null,
[Parameter(Position=1, Mandatory=$false)]
[System.String]
$mailbox=$null
)
$output=""
$find=@()
function Get-MailboxFolder($folder,$prefix, $search=$null, $firstrun=$false){
if(($search -ne $null) -and ($folder.name -match $search)) {
$script:find+=$folder.folderpath # if foldername match search term add it to the result
}
if($firstrun -eq $true){$script:output=$script:output+"$prefix$($_.name)`n"} # top level directories
if ($folder.folders.count -gt 0 ){ # If there are subfolders
if($firstrun -eq $false){
$script:output=$script:output+"$prefix$($folder.name)`n"
}
$prefix=" "+$prefix # preffix padding
$folder.folders |sort -property name| %{ get-MailboxFolder $_ $prefix $search} #recursivity
}
# No subfolder
if($folder.folders.count -eq 0 -and $firstrun -eq $false){$script:output=$script:output+"$prefix$($folder.name)`n"}
}
# Start outlook
$o=New-Object -ComObject outlook.application
$ns=$o.GetNamespace("MAPI")
if($mailbox -ne $null){
$bal=$ns.Folders |?{$_.name -match $mailbox}
}
else{
$bal=$ns.Folders.Item(1) # select the default mail account // you can let $bal=$ns.Folders to search through all accounts
}
write-host "Account selected = $($bal.name)"
$prefix="└"
$i=1
$bal.folders|sort -property name |%{
$percent=$i*100/($bal.folders.count)
write-progress -activity "Searching, please wait" -currentoperation "$($_.name)" -percentcomplete $percent
get-MailboxFolder $_ $prefix $folder $true
$i++
}
if(($folder -ne $null) -and ($folder -ne "")){ # are we searching ?
if ($find.count -eq 0){write-host "No folder *$folder* could be found"}
else{write-host "The term *$folder* was found in : ";$find}
}
else{$script:output} # display tree
$o.quit()
Exchange 서버에서 powershell에 액세스 할 수있는 경우 다음 스크립트를 실행하여 Exchange 시스템의 모든 폴더를 덤프 할 수 있습니다 ( https://blogs.msdn.microsoft.com/deva/2012/05/10/exchange- powershell-how-to-get-get-list-list-mailboxes-folders-folders-subfolders-items-in-folder-foldersize-programmatically / ) :
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.* -erroraction SilentlyContinue
$saveto = $env:USERPROFILE + "\\OutlookFolderList.csv"
Get-Mailbox | Select-Object alias | foreach-object {Get-MailboxFolderStatistics -Identity $_.alias | select-object Identity, ItemsInFolder, FolderSize} | Export-csv $saveto -NoTypeInformation
특정 사용자에 대한 정보를 원하면 다음과 같이 사용할 수 있습니다.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.* -erroraction SilentlyContinue
$who = $args[0]
$saveto = $env:USERPROFILE + "\\OutlookFolderListFor$who.csv"
Get-MailboxFolderStatistics -Identity $who | select-object Identity, ItemsInFolder, FolderSize | Export-csv $saveto -NoTypeInformation
이 방법은 스프레드 시트에서 쉽게 열고 검색 할 수있는 CSV 파일을 만듭니다.