'How to import multiple vCard VCF contact files into Outlook using Powershell?

How can I import multiple vCard VCF contact files into Outlook using Powershell ?

My script for create vcf is :

    # Création d'un fichier.vcf

New-Item C:\TEST\$($LastName)_$($Name).vcf -type file -force -value "
BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=fr;CHARSET=utf-8:$($Agence) 
FN;CHARSET=utf-8:$($LastName), $($Name)
ORG;CHARSET=utf-8:$($Company)
TITLE;CHARSET=utf-8:$($Title)
TEL;WORK;VOICE:$($WorkNum)
TEL;WORK;VOICE:$($WorkNum2)
TEL;CELL;VOICE:$($MobNum)
LABEL;WORK;PREF;CHARSET=utf-8;ENCODING=QUOTED-PRINTABLE:$($WorkAdress)
X-MS-OL-DEFAULT-POSTAL-ADDRESS:1
EMAIL;CHARSET=utf-8;PREF;INTERNET:$($Email)
X-MS-IMADDRESS;CHARSET=utf-8:$($Email) 
PHOTO;TYPE=JPEG;ENCODING=BASE64:$($encodedImage)

X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns='http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards' ver='1.0' layout='left' bgcolor='ffffff'><img xmlns='' align='fit' area='16' use='cardpicture'/><fld xmlns='' prop='name' align='left' dir='ltr' style='b' color='000000' size='10'/><fld xmlns='' prop='org' align='left' dir='ltr' color='000000' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns=' prop='telwork' align='left' dir='ltr' color='d48d2a' size='8'><label align='right' color='626262'>Bureau</label></fld><fld xmlns='' prop='telhome' align='left' dir='ltr' color='d48d2a' size='8'><label align='right' color='626262'>Domicile</label></fld><fld xmlns='' prop='email' align='left' dir='ltr' color='d48d2a' size='8'/><fld xmlns='' prop='addrwork' align='left' dir='ltr' color='000000' size='8'/><fld xmlns='' prop='im' align='left' dir='ltr' color='000000' size='8'><label align='right' color='626262'>Mess. instant.</label></fld><fld xmlns='' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns=' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/><fld xmlns='' prop='blank' size='8'/></card>
END:VCARD"`


Solution 1:[1]

I haven't found answers at my question, so I used an other technical.

First, I created a Csv and I converted it to XLs with this Powershell code :

    # Creating and Adding the first line of the Csv
  $String = "FullName;CompanyName;Email1Address;Fileas;JobTitle;BusinessTelephoneNumber;Business2TelephoneNumber;MobileTelephoneNumber;BusinessAdress;PathImage"

  $PathCsv = "C:\TEST\Contacts.csv"
  $CsvExists = Test-Path $PathCsv 

 if($CsvExists -eq $True) {
     Clear-Content $PathCsv 
     Add-Content $PathCsv -value $String
 } else {
     New-Item $PathCsv -type file  -value $String   
 }

 For Each .... {

    # Storing Information in variables
  $Name = "..."
  $Last [...] 

    # Adding the information in the Csv
  $string2= "$($Name) $($LastName);$($Corp);$($Email);$($Agence);$($Title);$($NumWork);$($NumWork2);$($NumCell);$($WorkAdress);$($path)"

  Add-Content -path $PathCsv -value $string2


     # Converting Csv to Xls
  $PathXls = "C:\TEST\Contacts.xls"
  $XlsExists= Test-Path $PathXls
  $xl = new-object -comobject excel.application
  $xl.visible = $true
  $Workbook = $xl.workbooks.open($PathCsv) 
  $Worksheets = $Workbooks.worksheets

 if($XlsExists -eq $True) {
   Remove-Item $PathXls -force
 }  
  $Workbook.SaveAs($PathXls,1) 
  $Workbook.Saved = $True

 $xl.Quit()
 }

Second, I created Outlook contact with this VBScript :

  Sub creater()

      Dim strPath
      Dim num1 
      Dim num1toreplace 
      Dim num2 
      Dim num2toreplace 
      Dim num3 
      Dim num3toreplace 
      Dim Corp 

        Const olContactItem = 2

      Set objOutlook = CreateObject("Outlook.Application")
      Set objExcel = CreateObject("Excel.Application")
      Set objWorkbook = objExcel.Workbooks.Open("C:\TEST\Contacts.xls")


       x = 2

    Do Until objExcel.Cells(x, 1).Value = ""

      Set objContact = objOutlook.CreateItem(olContactItem)

      'Add FullName
       objContact.FullName = objExcel.Cells(x, 1).Value

      'Add CompanyName
       objContact.CompanyName = objExcel.Cells(x, 2).Value

      'Add Email1Address
       objContact.Email1Address = objExcel.Cells(x, 3).Value

      'Add Fileas
       objContact.Fileas = objExcel.Cells(x, 4).Value

      'Add JobTitle
       objContact.JobTitle = objExcel.Cells(x, 5).Value

      'Add BusinnesNum
       objContact.BusinessTelephoneNumber  = objExcel.Cells(x, 6).Value

      'Add BusinnesNum2
       objContact.Business2TelephoneNumber = objExcel.Cells(x, 7).Value

      'Add MobileNum
       objContact.MobileTelephoneNumber = objExcel.Cells(x, 8).Value

      'Add BusinessAddress
       objContact.BusinessAddress = objExcel.Cells(x, 9).Value

      'Add Picture
       strPath = objExcel.Cells(x, 10).Value
      If Not strPath = vbNullString Then
         objContact.AddPicture (strPath)
      End If


      objContact.Save

      x = x + 1
    Loop

      objExcel.Quit

 End Sub 
 creater()

Solution 2:[2]

A couple of options:

I. Outlook Object Model - call Namespace.OpenSharedItem (it supports MSG, vCard, and iCal formats) and pass the VCF file name. Outlook will return an instance of the ContactItem object that you can save or move to any folder.

II. If using Redemption (I am its author) is an option, it supports vCard format (among a dozen or so other formats, vCard included) by the Import method (exposed by the RDOMail and objects derived from it, such as RDOContactItem).

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 'or you can use Logon, LogonHostedExchangeMailbox, etc.
set Contact = Session.GetDefaultFolder(olFolderContacts).Items.Add
Contact.Import "c:\Temp\test.vcf ", olVCard
Contact.Save

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2