0

Exchange管理シェル:

[PS] C:\Windows\system32>$AddressBook = Get-PublicFolderItemStatistics -Identity "\Shared Company Address Book"

[PS] C:\Windows\system32>$AddressBook [0] | format-list

RunspaceId           : d8e95055-1f3e-4e7f-a1fc-d5b97ecbcb96
ServerName           : MAILMAN
DatabaseName         : Public Folder Database 0524088380
Subject              : John Q User
PublicFolderName     : \Company Address Book
LastModificationTime : 11/12/2012 2:57:49 PM
CreationTime         : 11/12/2012 2:56:28 PM
HasAttachments       : False
ItemType             : IPM.Contact
MessageSize          : 6.598 KB (6,756 bytes)
Identity             : 000000001A447390AA6611CD9BC800AA002FC45A0900580787449ABF5E4891DD89178938242C0000000250AE00001BE1
                       A5309D57D5439914FD70BDC745C100000B8942FD0000
MapiIdentity         : 000000001A447390AA6611CD9BC800AA002FC45A0900580787449ABF5E4891DD89178938242C0000000250AE00001BE1
                       A5309D57D5439914FD70BDC745C100000B8942FD0000
OriginatingServer    : mailman.company.com
IsValid              : True

[PS] C:\Windows\system32>

わかりました...ExchangeServer2010の連絡先リストに連絡先をエクスポートしようとしています。私の世界では、このばかげたものから「データ」を取り出す方法を理解することはできません。

$AddressBookをやったら| Format-List、すべての連絡先が一覧表示されるので、私は正しい球場にいることがわかります。

このリストからすべての情報を取得するにはどうすればよいですか?姓、名、電子メールアドレス、会社の電話番号など。

4

3 に答える 3

3

これは古い投稿ですが、数日間同じ問題があり、理解できませんでした。そこで、@WernerCD が使用した道を使用することを選択し、この道を進むことにした場合に役立つ PowerShell スクリプトを追加したいと思います。

始める前に、私の問題を説明させてください。連絡先が含まれる複数のフォルダーがあります。これらの連絡先には、移行の問題が原因で含まれるフォルダーに追加されなかったユーザー定義フィールドが含まれています。Outlook を使用している間、現在のビューでこれらのフィールドを表示できる必要があります。ただし、UDF 列を追加しようとすると、空の「フォルダー内のユーザー定義フィールド」しか使用できません。

以下は、Outlook 内のパブリック フォルダー (およびそのサブフォルダー) をチェックし、すべての連絡先の UserProperties (UDF に相当) をチェックし、それらを配列に入れ、各連絡先の UDF が含まれているフォルダー (UserDefinedProperties) に存在するかどうかをチェックする PowerShell スクリプトです。 )、存在しない場合は、値のないテキスト フィールドとして追加されます。

すべての連絡先フォルダーは、共有連絡先フォルダーと呼ばれるフォルダーの下にあることに注意してください。

コード

# Connection to Outlook
$Outlook       = New-Object -com Outlook.Application 
$Namespace     = $outlook.GetNamespace("MAPI") 

# "Location" of public folders (Change me@example.com)
$PublicFolder  = $Namespace.Folders.Item("Public Folders - me@example.com")
$PublicFolders = $PublicFolder.Folders.Item("All Public Folders")

# Folder that you would like to check. We will check Shared Contacts under Shared Contacts Folder
$SharedContactsFolder   = $PublicFolders.Folders.Item("Shared Contacts Folder")
$SharedContacts   = $SharedContactsFolder.Folders.Item("Shared Contacts")

Write-Host ("<----------------------------------------------------------->") -foreground Yellow

function CheckContacts($MyFolder){

    # Check if this folder has subfolder
    If ( $MyFolder.Folders.Count -gt 0) {

        Write-Host ("Folder '" + $MyFolder.Name + "' contains subfolders ("  + $MyFolder.Folders.Count + ")")  -BackgroundColor Yellow -foreground DarkBlue

        Foreach ( $Subfolder in $MyFolder.Folders ) {

            CheckContacts($Subfolder)

        }

    }

    Write-Host ("Working on folder: " + $MyFolder.Name)  -BackgroundColor White -foreground DarkBlue

    $All_UDF = @()

    # Check User Defined Fields (UDF) for each contact and add them to array
    foreach ( $Contacts in $MyFolder.Items ) {

        foreach ( $UDF in $Contacts.UserProperties ) {

            # Check if field was previously added to array
            If ($All_UDF -notcontains $UDF.Name) {
                $All_UDF += $UDF.Name
            }

        }

    }

    # Add all UDF to Folder's UDF
    Write-Host ("We will add the following UDF into '" + $MyFolder.Name + "': ") -foreground Green
    Write-Host ($All_UDF -join "`n") -foreground Green

    Foreach ( $UDF in $All_UDF ){

        # Only add if UDF does not exist on folder's UDF
        if( (CheckFolderUDF $MyFolder $UDF) -eq $false) {
            # Add - Always add UDF as Text field (1)
            Write-Host ("Adding '" + $UDF + "' to '" + $MyFolder.Name + "'")
            $MyFolder.UserDefinedProperties.Add($UDF, 1)
        }else{
            Write-Host ("Already present: " + $UDF)
        }

    }

    Write-Host ("<----------------------------------------------------------->") -foreground Yellow
}

Function CheckFolderUDF ( $MyFolder, $MyUDFName ) {
    $Result = $false

    Foreach ( $Folder_UDF in $MyFolder.UserDefinedProperties ){

        If ( $Folder_UDF.Name -eq $MyUDFName ) {
            $Result = $true
            break
        }

    }

    return $Result

}

# Start - Check Shared Contacts
CheckContacts($SharedContacts) 

このコードを実行/テストするにはどうすればよいですか?

1) Windows PowerShell ISE (Windows 内) を開きます。

2) 上記のコードをコピーして、PowerShell ISE ウィンドウに貼り付けます。

3) コードを読んで理解する。

4) 必要に応じて変更します。

PS: これに「コメント」を追加しようとしましたが、十分なポイントがありません。

于 2016-10-09T07:11:13.820 に答える
1

多くの痛みと苦しみの後...そして[この投稿]に出くわしました。これは Powershell (Exchange Powershell コンソールではない) と私のコンピューター (サーバーの MailMan ではない) にあります。

$Outlook       = New-Object -com Outlook.Application 
$Namespace     = $outlook.GetNamespace("MAPI") 
$PublicFolder  = $Namespace.Folders.Item("Public Folders - me@example.com")
$PublicFolders = $PublicFolder.Folders.Item("All Public Folders")
$AddressBook   = $PublicFolders.Folders.Item("Company Address Book")
$Contacts      = $AddressBook.Items
$Contacts | Select FullName

これにより、実際に連絡先情報が取得されます。私はまだサーバー側 (Exchange Powershell コンソール) でそれを行う方法を検討していますが、これは必要なフィールドを選択し、必要に応じてデータベースにプッシュするための優れた基盤になるはずです。

「Public Folders - dummy_user@example.com」を取得する方法を理解できれば、サーバー上で同じことができるはずです。

また、これを行うためのより簡単な方法があると思います (一度に 1 つずつではなく、プル パスを使用するなど) が、これは機能します。

ここで、UserDefinedFields を取得する方法を確認します....

于 2012-11-13T15:23:25.330 に答える
0

Get-Contactの代わりに使用しないのはなぜGet-PublicFolderItemStatisticsですか?

于 2012-11-12T21:09:50.570 に答える