这是一个旧帖子,但我有几天同样的问题,无法弄清楚。因此,我选择使用 @WernerCD 使用的道路,并希望添加我的 PowerShell 脚本,以在您决定走这条道路的情况下为您提供帮助。
在开始之前,请允许我解释一下我的问题。我们有多个包含联系人的文件夹。这些联系人包含由于迁移问题而未添加到其包含文件夹的用户定义字段。当我们使用 Outlook 时,我们需要能够在当前视图中看到这些字段。但是,当我们尝试添加 UDF 列时,它只允许我们使用“文件夹中的用户定义字段”,它是空的。
下面是 PowerShell 脚本,它将检查 Outlook 中的公用文件夹(及其子文件夹),检查每个联系人 UserProperties(相当于 UDF),将它们放入一个数组中,然后它将检查每个联系人的 UDF 是否存在于其包含的文件夹中(UserDefinedProperties ),如果它不存在,它会将其添加为没有值的文本字段。
请记住,我们所有的联系人文件夹都在一个名为“共享联系人文件夹”的文件夹下。
代码
# 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:我试图添加这个“评论”,但我没有足够的积分。