วิธีเปิดผู้ติดต่อ Outlook โดยใช้สคริปต์บรรทัดคำสั่งของ Windows


4

ฉันมักจะเก็บข้อมูลจำนวนมากในช่องหมายเหตุของผู้ติดต่อ Outlook

การเข้าถึงข้อมูลโดยละเอียดสำหรับผู้ติดต่อเฉพาะใน Outlook 2013 ต้องใช้หลายขั้นตอนบนเดสก์ท็อป Windows:

  • เปิด Outlook
  • เปลี่ยนเป็นมุมมองผู้ติดต่อ
  • ค้นหาผู้ติดต่อตามชื่อ
  • การเปิด "มุมมองบุคคล" ของผู้ติดต่อแบบรวม
  • เปิดบัตรผู้ติดต่อ Outlook แบบเต็ม

ในฐานะผู้ใช้ขั้นสูงฉันต้องการใช้สคริปต์แทน:

Win-R oc John Smith

ที่Win-Rเป็นทางลัดที่จะเปิดRun...หน้าต่างและocจะเป็นชนิดบางส่วนของสคริปต์ (PowerShell, VBA, Perl,?) เพื่อเปิดโดยตรงบัตรผู้ติดต่อของ Outlook รายละเอียดสำหรับชื่อที่กำหนด

จะมีวิธีใดในการบรรลุเป้าหมายนี้หรือไม่? รหัสเฉพาะจะดีมาก

(โปรดทราบว่าน่าเสียดายที่ Outlook 2013 ไม่สามารถเข้าถึงเนื้อหาของ Windows Search ได้อีกต่อไป)

ขอบคุณ

คำตอบ:


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)
จากนั้นรับรายการที่ติดต่อทั้งหมดจากโฟลเดอร์
จากนั้นรับรายการที่ติดต่อแรก
และสุดท้ายแสดงชื่อและอีเมลหลักของผู้ติดต่อ ที่อยู่

ข้อมูลเพิ่มเติม:


ฉันสองวิธีนี้ Powershell เป็นราชา
MDT Guy

ขอบคุณสำหรับคำแนะนำที่ดี ฉันหวังว่าจะสามารถเปิดหน้าต่างด้วยที่ติดต่อ Outlook (เพื่ออนุญาตให้คัดลอกแก้ไข ฯลฯ ) คุณนึกถึงวิธีการทำสิ่งนี้โดยทางโปรแกรมหรือไม่?
Hugues

ขอบคุณสำหรับตัวอย่าง! ฉันกำลังมองหาวิธีในการปรับปรุงรายการสมุดที่อยู่ในพื้นที่ของฉันผ่าน Powershell และสิ่งนี้ทำให้ฉันเริ่มต้น มันช่วยให้มี$contact.Save()วิธีด้วย ขอบคุณ!
qJake

0

ขอบคุณสำหรับคำแนะนำ - ฉันใช้สิ่งนี้ก่อนหน้านี้กับ Outlook 2010 อย่างไรก็ตาม Outlook 2013 ไม่ได้ลงทะเบียนเนื้อหาในดัชนี Windows Search ดูgoogle.com/search?q=outlook+2013+windows+search
Hugues

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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.