web-dev-qa-db-ja.com

Windowsコマンドラインスクリプトを使用してOutlookの連絡先を開く方法は?

Outlookの連絡先の[メモ]フィールドに多くの情報を保存する傾向があります。

Outlook 2013で特定の連絡先のこの詳細情報にアクセスするには、Windowsデスクトップで多くの手順を実行する必要があります。

  • outlookを開く
  • 連絡先ビューへの切り替え
  • 名前で連絡先を検索する
  • 連絡先の統一された「ピープルビュー」を開く
  • outlookの連絡先カード全体を開く

パワーユーザーとして、代わりにいくつかのスクリプトを使用したいと思います。

Win-R oc John Smith

ここで、Win-RRun...ウィンドウを開くためのショートカットであり、ocは、詳細なOutlook連絡先カードを直接開くためのスクリプト(PowerShell、VBA、Perlなど)の一種です。与えられた名前。

これを達成する方法はありますか?特定のコードがあれば素晴らしいでしょう。

(残念ながら、Outlook2013ではそのコンテンツにWindowsSearchからアクセスできなくなっていることに注意してください。)

ありがとう。

4
Hugues

始めるためのPowershellの例:

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

OutlookへのCOM接続を作成します(インストールする必要があります)。
次に、連絡先フォルダ(#10)を検索します。
次に、フォルダからすべての連絡先アイテムを取得します。
次に、最初の連絡先アイテムを取得します
そして最後にその連絡先の名とメインのメールアドレスを表示します。

より詳しい情報:

2

多くの実験の結果、次の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;
0
Hugues
0
STTR