我写了下面的脚本,它的工作是获取一个(格式良好的)Excel文件,然后在Outlook中逐行创建新的联系人。
我运行的是Windows 11,所有的东西都是最近更新的(实际上是今天早上)。
在PowerShell中(以管理员身份运行),脚本运行时不会引发任何错误。输出到屏幕的数据表明Excel文件正在正确读取。
在Outlook中创建新联系人。
但是,**没有任何数据正在读取到联系人中。如果您能解释一下我错过了什么,我将不胜感激。**可能是新联系人没有正确保存以保留数据?
# Create an Excel application object
$excel = New-Object -ComObject Excel.Application
# Open the workbook
$workbook = $excel.Workbooks.Open("C:\Users\DW-ECM\Scripts\test_xl.xlsx")
# Select the first worksheet
$worksheet = $workbook.Worksheets.Item(1)
# Define the range of cells that contain the data
$range = $worksheet.UsedRange
# Creates a new instance of the Outlook application object
# using the COM (Component Object Model) interface in PowerShell
$outlook = New-Object -ComObject Outlook.Application
Write-Host "Selected workbook: $($workbook.Name)"
Write-Host "Selected worksheet: $($worksheet.Name)"
# Loop through each row in the range
for ($i = 2; $i -le $range.Rows.Count; $i++) {
# Get the current row
$row = $range.Rows.Item($i)
# Create a new contact object
$contact = $outlook.CreateItem(2)
# Set the properties of the contact object
$contact.Account = $row.Cells.Item(1).Value2
$contact.Business2TelephoneNumber = $row.Cells.Item(2).Value2
$contact.BusinessAddress = $row.Cells.Item(3).Value2
$contact.CompanyName = $row.Cells.Item(4).Value2
$contact.Department = $row.Cells.Item(5).Value2
$contact.Email1Address = $row.Cells.Item(6).Value2
$contact.FirstName = $row.Cells.Item(7).Value2
$contact.JobTitle = $row.Cells.Item(8).Value2
$contact.LastName = $row.Cells.Item(9).Value2
$contact.MobileTelephoneNumber = $row.Cells.Item(10).Value2
$contact.User1 = $row.Cells.Item(11).Value2
$contact.User2 = $row.Cells.Item(12).Value2
# Save the contact to Outlook
$contact.Save()
Write-Host "Creating contact for $($row.Cells.Item(8).Value2) $($row.Cells.Item(10).Value2)"
}
# Close the workbook and quit Excel
$workbook.Close()
$excel.Quit()
# Save and close the Outlook instance
$outlook.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook)
Remove-Variable outlook
# Stop the Outlook process
Stop-Process -ProcessName OUTLOOK -Force
- 编辑的清晰度,我要求的帮助和一个错字。
2条答案
按热度按时间gjmwrych1#
作为管理员运行是一个坏主意- Outlook是一个单体,如果它已经运行,您的脚本将附加到现有的示例。COM系统将拒绝在不同安全上下文中运行的两个应用程序(PS和Outlook)之间编组调用。
yhived7q2#
您的PowerShell脚本(其中两个Office应用程序- Excel和Outlook是自动化的)看起来不错,我没有看到任何奇怪的地方。请注意,您不能同时运行Outlook进程的两个示例(与Excel不同),因此,如果它已经运行,您将获得一个正在运行的示例。这意味着如果您已经打开Outlook并由用户运行(没有管理权限),您以管理权限从命令行(或任何其他shell)运行的代码将无法连接到正在运行的Outlook示例,并且不会添加联系人。
在PowerShell中(以管理员身份运行),脚本运行时不会引发任何错误。
确保在相同的安全上下文下运行所有应用程序和PowerShell脚本以便能够在Outlook中添加联系人。这意味着当您以管理员身份运行脚本时,Outlook应关闭(不运行)。