by SalvaG at 2013-04-03 03:47:49
Hi all,by JasonHelmick at 2013-04-03 14:06:38
I’m trying to create a mailbox on Exchange 2003 Server, but with no luck. I’ve looked for the error, but many people had the same issue as me (like http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/a7622a26-5d1e-4d97-b2b3-ba3053946d36.
More URLS :
http://www.mikepfeiffer.net/2010/05/create-an-exchange-2003-mailbox-with-powershell-and-cdoexm/
http://www.codeguru.com/csharp/csharp/cs_internet/mail/article.php/c14009/Enterprise-Powershell-Creating-Mailboxes-in-Exchange-2003.htm
The error is :
Exception calling "InvokeMember" with "5" argument(s): "Object does not match target type."
At line:28 char:28
+ $assembly_type.InvokeMember <<<< ("createmailbox", $binding_flags, $null, $account.psbase.nativeobject , $MailboxStoreDN)
+ CategoryInfo : NotSpecified: ( , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Here is the full code:
Function Add-2003Mailbox {
[CmdletBinding()]
param(
[Parameter()]
[System.String]
$User,
[Parameter()]
[System.String]
$MailboxStore
)
begin {
$assembly = Add-Type -Path "C:\temp\Interop.CDOEXM.dll" -PassThru
$assembly_type = $assembly | ?{$.name -eq "IMailboxStore"}
$binding_flags = [Reflection.BindingFlags] "invokemethod,public"
}
process {
$account = [adsi]"LDAP://$(Get-QADUser $User | select -ExpandProperty DN)"
$mailboxstoreDN = Get-QADObject -LdapFilter "(objectClass=msExchPrivateMDB)" `
-SearchRoot (Get-QADRootDSE ).ConfigurationNamingContext |
?{$.name -eq $MailboxStore} |
select -ExpandProperty DN
write-host $mailboxstoreDN
$assembly_type.invokemember("createmailbox", $binding_flags, $null, $account.psbase.nativeobject , $MailboxStoreDN)
$account.psbase.commitchanges()
}
}
Add-2003Mailbox -User "newusername" -MailboxStore "MBXSG101"
Also, if I cannot do it using PS , anyone have the VBS code to create a mailbox to existent user? I’ll create a temp VBS to create the mailbox and run it from PS
Thanks
Hi SalvaG!by SalvaG at 2013-04-04 03:07:00
This isn’t really a PowerShell versus VBS problem, or really a PowerShell problem – as you have discovered its a Interop.CDOEML.DLL problem. There are several descriptions of getting CDOEML into Interop but as the years have gone by, each of these now has it quirks and issues. I have used the Pfeiffer example in the past and it worked fine, but the error your receiving seems to indicate a problem with making it Interop today – Perhaps one of the Dev’s here can help but until then –
– here’s is a VBS source I have used in the past to build scripts - see if it helps.
http://support.microsoft.com/kb/327079
Jason
Hi Jasonby JasonHelmick at 2013-04-04 07:29:53
thanks for your reply.
Do you have those DLLs? Or do you know where can I download them?
Meanwhile I’ll try to do it using VBS…
Thanks again,
Salva.
I’m sorry - i don’t. The CDOEML.DLL is on any computer that has the management tools, so you can grab that one, but I dont have a working interop one.by SalvaG at 2013-04-04 12:53:04
Cheers!
Thanks Jason,by SalvaG at 2013-04-23 03:29:35
I’ve made the interops using Windows XP, management tools DLLs and Windows SDK for framework 2.0, but it seems there is something wrong.
I’ll ask to devs if anyone of them can help me
Thanks again for your help
Cheers,Salva
PS : Can any moderator/admin move this thread to "powershell for devs"? Thanks!
Hi again!
Now I’ve the answer! The problem is shown when you run the script using x64 version of powershell. If you run x86 version it works fine