我试图通过Powershell从共享日历中获取日历项目,代码如下:
$outlook = new-object -ComObject Outlook.application
$session = $outlook.Session
$session.Logon("Outlook")
$namespace = $outlook.GetNamespace("MAPI")
$recipient = $namespace.CreateRecipient("John Smith")
$theirCalendar = $namespace.GetSharedDefaultFolder($recipient, "olFolderCalendar")
但是我遇到了类型不匹配错误:
无法转换参数“0”,值为:“System .__ ComObject”,“GetSharedDefaultFolder”键入“Microsoft.Office.I” nterop.Outlook.Recipient“:”无法转换“System .__ ComObject”类型“System .__ ComObject#{00063045-0000-00”的值 00-c000-000000000046}“输入”Microsoft.Office.Interop.Outlook.Recipient“。” 在行:1 char:34 + $ namespace.GetSharedDefaultFolder<<<< ($ recip,“olFolderCalendar”) + CategoryInfo:NotSpecified:(:) [],MethodException + FullyQualifiedErrorId:MethodArgumentConversionInvalidCastArgument
我已尝试直接将$收件人投放到Microsoft.Office.Interop.Outlook.Recipient
,这不起作用,我也尝试了invoke-method()
此处详细记录的程序:http://www.mcleod.co.uk/scotty/powershell/COMinterop.htm
似乎后者应该有效,但它似乎没有GetSharedDefaultFolder()
所需的多个参数的规定。
答案 0 :(得分:3)
我已经设法使用System .__ ComObject的InvokeMember方法来实现此功能。为了将多个参数传递给方法,只需将它们括在括号中即可。
此处显示了一行代码示例:
PS C:> $ usercontacts = [System .__ ComObject] .InvokeMember(“GetSharedDefaultFolder”[System.Reflection.BindingFlags] :: InvokeMethod,$ null,$ mapi,($ user,10))
$ user是先前设置的收件人对象。 $ mapi是MAPI命名空间对象(也是先前设置的)。
答案 1 :(得分:0)
尝试使用数字olFolderCalendar
替换9
COM对象需要实际值。它们无法将明文名称转换为常量值。
答案 2 :(得分:0)
在此处找到解决方案:http://cjoprey.blog.com/2010/03/09/getting-another-users-outlook-folder/
Add-Type -AssemblyName Microsoft.Office.Interop.Outlook
$class = @”
using Microsoft.Office.Interop.Outlook;public class MyOL
{
public MAPIFolder GetCalendar(string userName)
{
Application oOutlook = new Application();
NameSpace oNs = oOutlook.GetNamespace("MAPI");
Recipient oRep = oNs.CreateRecipient(userName);
MAPIFolder calendar = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderCalendar);
return calendar;
}
}
“@
Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook