通过powershell

时间:2017-10-31 23:06:12

标签: powershell outlook

当我检查ContactItem时,所有Email#Address值都为空。我已经尝试设置值然后打印值。此更改反映在Outlook中,但是,无法通过PowerShell检索任何值。

以下是一些片段:

$Outlook=NEW-OBJECT –comobject Outlook.Application
$Contacts=$Outlook.session.GetDefaultFolder(10).items
$Contactsfolders = $Outlook.session.GetDefaultFolder(10).Folders
$testFolder = $Contactsfolders | Where-Object {$_.Name -eq 'Test Folder'}
$testContact = $testFolder.Items(1)

echo $testContact
$testContact.Email1Address = "BobDoe3@doe.com"
echo $testContact

以上是上述执行的输出。请注意,我删除了一些不感兴趣的信息以缩短。

First Echo

Application                  : Microsoft.Office.Interop.Outlook.ApplicationClass
Class                        : 40
Session                      : Microsoft.Office.Interop.Outlook.NameSpaceClass
ConversationTopic            : John Doe
FormDescription              : System.__ComObject
GetInspector                 : System.__ComObject
Importance                   : 1
LastModificationTime         : 10/31/2017 5:57:04 PM
MAPIOBJECT                   : System.__ComObject
MessageClass                 : IPM.Contact
OutlookInternalVersion       : 154971
OutlookVersion               : 15.0
Saved                        : True
Sensitivity                  : 0
Size                         : 11614
Subject                      : Bob Doe
UserProperties               : System.__ComObject
Account                      : 
Anniversary                  : 1/1/4501 12:00:00 AM
AssistantName                : 
AssistantTelephoneNumber     : 
Birthday                     : 1/1/4501 12:00:00 AM
CompanyAndFullName           : The Doe Company
                               Doe, Bob
CompanyLastFirstNoSpace      : 
CompanyLastFirstSpaceOnly    : 
CompanyMainTelephoneNumber   : 
CompanyName                  : The Doe Company
ComputerNetworkName          : 
CustomerID                   : 
Department                   : 
Email1Address                : 
Email1AddressType            : 
Email1DisplayName            : 
Email1EntryID                : 
Email2Address                : 
Email2AddressType            : 
Email2DisplayName            : 
Email2EntryID                : 
Email3Address                : 
Email3AddressType            : 
Email3DisplayName            : 
Email3EntryID                : 
FileAs                       : Doe, Bob
FirstName                    : Bob
FTPSite                      : 
FullName                     : Bob Doe
FullNameAndCompany           : Doe, Bob
                               The Doe Company
Gender                       : 0
GovernmentIDNumber           : 
Hobby                        : 
Home2TelephoneNumber         : 
HomeAddress                  : 
HomeAddressCity              : 
HomeAddressCountry           : 
HomeAddressPostalCode        : 
HomeAddressPostOfficeBox     : 
HomeAddressState             : 
HomeAddressStreet            : 
HomeFaxNumber                : 
HomeTelephoneNumber          : 
Initials                     : B.D.
InternetFreeBusyAddress      : 
ISDNNumber                   : 
JobTitle                     : 
Journal                      : False
Language                     : 
LastFirstAndSuffix           : 
LastFirstNoSpace             : 
LastFirstNoSpaceCompany      : 
LastFirstSpaceOnly           : 
LastFirstSpaceOnlyCompany    : 
LastName                     : Doe
LastNameAndFirstName         : Doe, Bob

Second Echo

Application                  : Microsoft.Office.Interop.Outlook.ApplicationClass
Class                        : 40
Session                      : System.__ComObject
Subject                      : Bob Doe
UnRead                       : False
UserProperties               : System.__ComObject
Account                      : 
Anniversary                  : 1/1/4501 12:00:00 AM
AssistantName                : 
AssistantTelephoneNumber     : 
Birthday                     : 1/1/4501 12:00:00 AM
Business2TelephoneNumber     : 
BusinessAddress              : 
BusinessAddressCity          : 
BusinessAddressCountry       : 
BusinessAddressPostalCode    : 
BusinessAddressPostOfficeBox : 
BusinessAddressState         : 
BusinessAddressStreet        : 
BusinessFaxNumber            : 
BusinessHomePage             : 
BusinessTelephoneNumber      : 
CallbackTelephoneNumber      : 
CarTelephoneNumber           : 
Children                     : 
CompanyAndFullName           : The Doe Company
                               Doe, Bob
CompanyLastFirstNoSpace      : 
CompanyLastFirstSpaceOnly    : 
CompanyMainTelephoneNumber   : 
CompanyName                  : The Doe Company
ComputerNetworkName          : 
CustomerID                   : 
Department                   : 
Email1Address                : 
Email1AddressType            : 
Email1DisplayName            : 
Email1EntryID                : 
Email2Address                : 
Email2AddressType            : 
Email2DisplayName            : 
Email2EntryID                : 
Email3Address                : 
Email3AddressType            : 
Email3DisplayName            : 
Email3EntryID                : 
FileAs                       : Doe, Bob
FirstName                    : Bob
FTPSite                      : 
FullName                     : Bob Doe
FullNameAndCompany           : Doe, Bob
                               The Doe Company
Gender                       : 0
GovernmentIDNumber           : 
Hobby                        : 
Home2TelephoneNumber         : 
HomeAddress                  : 
HomeAddressCity              : 
HomeAddressCountry           : 
HomeAddressPostalCode        : 
HomeAddressPostOfficeBox     : 
HomeAddressState             : 
HomeAddressStreet            : 
HomeFaxNumber                : 
HomeTelephoneNumber          : 
Initials                     : B.D.
InternetFreeBusyAddress      : 
ISDNNumber                   : 
JobTitle                     : 
Journal                      : False
Language                     : 
LastFirstAndSuffix           : 
LastFirstNoSpace             : 
LastFirstNoSpaceCompany      : 
LastFirstSpaceOnly           : 
LastFirstSpaceOnlyCompany    : 
LastName                     : Doe
LastNameAndFirstName         : Doe, Bob

我在玩不同的结果和解决方案时发现了一些有趣的东西。 我发现以下两个查询都会产生相同的匹配,这让我感到困惑,因为我认为myString -ne ''正在检查字符串是否为空。似乎myString -ne ''[String]::IsNullOrEmpty($myString)都可以返回true,这似乎是不可能的,但我认为在某些情况下可能会发生这种情况。另请注意,IsNullOrEmpty功能非常快。

$Listconstact=$session.GetDefaultFolder(10).Folders | %{$session.GetFolderFromID($_.EntryID).Items | where Email1Address -NE ''}

$Listconstact=$session.GetDefaultFolder(10).Folders | %{$session.GetFolderFromID($_.EntryID).Items | where {[String]::IsNullOrEmpty($_.Email1Address)}}

tukan回答的结果:

VERBOSE: From:
VERBOSE: Subject: How are things
VERBOSE: From:
VERBOSE: Subject: See you soon
VERBOSE: From:
VERBOSE: Subject: Meeting Times

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

$Outlook=NEW-OBJECT –comobject Outlook.Application
$session=$Outlook.session
$Listconstact=$session.GetDefaultFolder(10).Folders | %{$session.GetFolderFromID($_.EntryID).Items | where Email1Address -ne ''}

#only one item
Write-Host "First element mail : $($Listconstact[0].Email1Address)`n`n" 


#All mails
Write-Host "All element mail :"
$Listconstact.Email1Address

答案 1 :(得分:0)

我对你要达到的目标有点模糊。对我来说,似乎你把两件事混合在一起 - 联系人和文件夹。

我不确定您是否尝试从Outlook电子邮件或地址簿中获取信息(因为您使用的是文件夹,我猜它是第一个)。如果不能解决您的问题,我很乐意纠正解决方案。

注意:我没有相同的配置但足够接近:Outlook版本: 15.0.0.4420 和PowerShell版本: 4.0.30319

我会尽力报道我认为你想要在我眼中解决的问题 - 从“测试文件夹”@Outlook

# Making sure we have the assembly loaded
Add-Type -assembly "Microsoft.Office.Interop.Outlook" 
# saving the mapping
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]

# new object
$Outlook=NEW-OBJECT –comobject Outlook.Application
# setting the correct namespace
$namespace = $Outlook.GetNameSpace("MAPI")

# getting all folders in Outlook inbox
$inbox = $namespace.GetDefaultFolder($olFolders::olFolderInbox)
# filtering out all but the "Test Folder"
$targetFolder = $inbox.Folders.Item("Test Folder")

# iteration on email message 
ForEach($emailMessage in $targetFolder.items) {
    # getting all the information from the message 
    Write-Verbose -message "From: $($emailMessage.GetProperty) $($emailMessage.SenderEmailAddress)" -Verbose
    Write-Verbose -message "Subject: $($emailMessage.Subject)" -Verbose
}

为什么 MAPI 名称空间?好吧因为MSDN says so

  

我原以为myString -ne''正在检查字符串是不是   空。

是的,它确实这样做了。区别在于方法[String]::IsNullOrEmpty($myString)正在检查字符串中的Null OR 为空。如果您有$null值,那么您可以同时为true。它不是空的,是$ null。 (有关更多信息,请参阅具有$null值的含义)