Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I tend to store a lot of information in the Notes fields of Outlook contacts.

Accessing this detailed info for a specific contact in Outlook 2013 requires many steps on the Windows desktop:

  • opening Outlook
  • switching to Contacts view
  • searching for the contact by name
  • opening the contact's unified "People view"
  • opening the full Outlook Contact card

As a power-user, I'd like to instead use some script:

Win-R oc John Smith

where Win-R is the shortcut to open a Run... window, and oc would be some type of script (PowerShell, VBA, Perl, ?) to directly open the detailed Outlook contact card for the given name.

Would there be any way to achieve this? Specific code would be great.

(Please note that unfortunately Outlook 2013 no longer makes its content accessible to Windows Search.)


share|improve this question

Powershell example to get you started:

$outlook = new-object -com Outlook.Application
$contactFolder = $outlook.session.GetDefaultFolder(10)
$contacts = $contacts.Items
$firstContact = $contacts.GetFirst()

It creates a COM connection to Outlook (must be installed),
then looks up the Contacts folder (#10),
then gets all the contact Items from the folder,
then Gets the first Contact item
and finally displays that contact's First Name and primary Email Address.

More info:

share|improve this answer
I second this method. Powershell is king. – MDT Guy May 28 '13 at 19:30
Thanks for the good pointers. I was hoping to be able to open the window with the Outlook Contact (to allow copying, editing, etc). Can you think of any way to do this programmatically? – Hugues May 29 '13 at 2:26
Thanks for the example! I was looking for a way to update my local address book entries via Powershell and this got me started. It helps that there's a $contact.Save() method, too. Thanks! – qJake Sep 23 '13 at 14:31

Windows Desktop Search 4.0:

Windows Desctop Search 4.0

Command line, if need:

WindowsSearch /url search-ms:query=(jaiPhone)kind:contacts

Learn How to Use Windows 7′s Advanced Search Operators

Mastering Windows Search using Advanced Query Syntax

Advanced Query Syntax

Top 7 Windows Search Tricks Used by Pro Users

Windows Search with Windows 7 and Outlook 2007

share|improve this answer
Thanks for the suggestion -- I was using something like this previously with Outlook 2010. However, Outlook 2013 does not register its content in the Windows Search index. See . – Hugues May 29 '13 at 2:20

After much experimentation, I found a solution using the following Perl script:


use strict;
use warnings;

use Win32::OLE qw(in with);
$Win32::OLE::Warn = 2;
use Win32::OLE::Variant;  # to get Date scalar

my $olFolderContacts = 10;  # = olFolderContacts

my $outlook;
eval {
  $outlook = Win32::OLE->GetActiveObject('Outlook.Application');
die "$@\n" if $@;
if (!defined $outlook) {
  $outlook = Win32::OLE->new('Outlook.Application')
    or die "Oops, cannot start Outlook: ", Win32::OLE->LastError, "\n";

my $mapi = $outlook->GetNamespace('MAPI');  # see class NameSpace

my $searchname = "@ARGV";
my $contacts = $mapi->GetDefaultFolder($olFolderContacts); # (FolderType As OlDefaultFolders) As Folder
#  also olFolderCalendar, olFolderDeletedItems, olFolderDrafts, olFolderInbox, olFolderSuggestedContacts, ...
my @found;
for my $contact (in $contacts->{Items}) {
  my $name = $contact->{"FullName"};
  if ($name =~ /\b${searchname}\b/i) { push(@found, $contact); }
if (!@found) { die "Contact '$searchname' not found\n"; }
if (@found>1) {
  warn "Found multiple contacts matching '$searchname':\n";
  for (@found) { my $name = $_->{"FullName"}; warn "$name\n"; }
  exit 1;
my $contact = $found[0];
my $name = $contact->{"FullName"};
warn "Found '$name'\n";
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.