3

Я склонен хранить много информации в полях Notes контактов Outlook.

Доступ к этой подробной информации для определенного контакта в Outlook 2013 требует много шагов на рабочем столе Windows:

  • открытие Outlook
  • переключение на просмотр контактов
  • поиск контакта по имени
  • открытие унифицированного контакта "Люди видят"
  • открытие полной карты контактов Outlook

Как опытный пользователь, я бы хотел вместо этого использовать некоторый скрипт:

Win-R oc John Smith

где Win-R - это ярлык для открытия окна Run... , а oc - какой-то тип сценария (PowerShell, VBA, Perl,?) напрямую открыть подробную контактную карточку Outlook по указанному имени.

Есть ли способ достичь этого? Конкретный код был бы отличным.

(Обратите внимание, что, к сожалению, Outlook 2013 больше не делает свой контент доступным для поиска Windows.)

Благодарю.

3 ответа3

2

Пример Powershell для начала:

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

Он создает COM-соединение с Outlook (должен быть установлен),
затем ищет папку «Контакты» (# 10),
затем получает все контактные элементы из папки,
затем получает первый элемент контакта
и, наконец, отображает имя этого контакта и основной адрес электронной почты.

Больше информации:

0

После долгих экспериментов я нашел решение, используя следующий скрипт Perl:

#!/usr/bin/perl

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";
$contact->Display;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .