During the installation of Symantec Mail Security for Microsoft Exchange (SMSMSE) the installer prompts for credentials for the service account used by SMSMSE. The installer validates if this service account has an exchange mailbox. When this validation fails one of the following error messages is displayed:
Failed to verify SMSMSE user has mailbox |
User does not have mailbox, please change username or create mailbox for the user |
The remainder of this article describes troubleshooting steps that can lead to a solution. Before embarking on these steps see if one of the related articles below is causing the issue.
Verification of the mailbox is a two step process. The first step invokes the executable execMonadCmdLet.exe in the following way from the installer:
ExecMonadCmdLet.exe "C:\Program Files\Microsoft\Exchange Server\V14\bin\exshell.psc1" .\CheckMailBox.ps1 "<domain>\<serviceAccount>"
If the EXE returns a non-zero result code then the error message "Failed to verify SMSMSE user has mailbox" is reported. The Powershell script CheckMailBox.ps1 runs the following Powershell commands:
md "HKLM:\SOFTWARE\Wow6432Node\Symantec"
md "HKLM:\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install"
$error.clear()
Get-Mailbox "<username>"
print $error[0]
Set-ItemProperty -path "HKLM:\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install" -name "IsMailboxUser" -value "Yes"
NOTE: The value of <username> is the sevice account name.
The error message "User does not have mailbox, please change username or create mailbox for the user" is displayed by the installer when the value of the registry key HKLM\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install is not present or the value is not Yes.
1. Use the installation log to determine the exact error.
Open the installation log SMSMSE65_Setup.log (default location is %TEMP%) and search for CheckMailbox.ps1 and find a line like this:
"ExecMonadCmdLet.exe" "C:\Program Files\Microsoft\Exchange Server\V14\bin\exshell.psc1" .\CheckMailBox.ps1 \""benexchange2010\administrator""
The following is an example where the verification succeeded:
"ExecMonadCmdLet.exe" "C:\Program Files\Microsoft\Exchange Server\V14\bin\exshell.psc1" .\CheckMailBox.ps1 \""benexchange2010\administrator""
fnCheckMailbox SUCCESS
Yes
returning success
This shows the installer running the command. The next line shows that the EXE succeeded with a zero return code. The Yes is the value read from the registry key HKLM\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install. In this case the Powershell script CheckMailBox.ps1 was able to verify that the user benexchange2010\administrator has a mailbox.
The following is an example where the installer reports a non-zero error return from the ExecMonadCmdLet.exe process:
"ExecMonadCmdLet.exe" "C:\Program Files\Microsoft\Exchange Server\V14\bin\exshell.psc1" .\CheckMailBox.ps1 \""symantec\administrator""
fnCheckMailbox: Process Execution Failed, exit code : 100
DisplayMessageBox
The following is an example where the ExecMonadCmdLet.exe program runs successfully but the Powershell script CheckMailBox.ps1 is unable to verify that the user has a mailbox:
"ExecMonadCmdLet.exe" "C:\Program Files\Microsoft\Exchange Server\V14\bin\exshell.psc1" .\CheckMailBox.ps1 \""benexchange2010\administrator""
fnCheckMailbox SUCCESS
No
DisplayMessageBox
2. If the installer reports a non-zero error from the program ExecMonadCmdLet.exe run the following steps.
a. Run the installer until the error message is displayed.
b. Copy the following files from the directory C:\Users\Administrator\AppData\Local\Temp\{03E91804-3466-4F92-9248-98E506733B8B}:
ExecMonadCmdLet.exe
CheckMailBox.ps1
to the Microsoft Exchange bin directory, typically C:\Program Files\Microsoft\Exchange Server\V14\bin.
NOTE: The directory {03E91804-3466-4F92-9248-98E506733B8B} is where the installer extracts the installations files. This is specified by the TEMP environment variable. An easy way to locate this is by typing %TEMP% into the windows explorer address bar.
c. Open a command prompt and cd to the Microsoft Exchange bin directory.
d. Run the following command from the command prompt:
replace <service account name> with the name of the SMSMSE service account. For example the following is the command to check the user adminuser1 in the domain testdomain:
e. Get the error and start troubleshooting.
When the program runs successfully the following is displayed:
The following is an example where the program does not run successfully and reports an error messsage:
ExecMonadCmdLet : Value cannot be null.
Parameter name: value
ExecMonadCmdLet : tracing set to off
ExecMonadCmdLet : argument 0 exshell.psc1
ExecMonadCmdLet : argument 1 .\CheckMailBox.ps1
ExecMonadCmdLet : argument 2 SignatureCraft\SEP
.\CheckMailBox.ps1 SignatureCraft\SEP
ExecMonadCmdLet : Done with RunspaceConfiguration.Create
ExecMonadCmdLet : Done with RunspaceFactory.CreateRunspace
ExecMonadCmdLet : command =
.\CheckMailBox.ps1 SignatureCraft\SEP
ExecMonadCmdLet : Done with new RunspaceInvoke
ExecMonadCmdLet : command =
.\CheckMailBox.ps1 SignatureCraft\SEP
ExecMonadCmdLet : myCommand =
ExecMonadCmdLet : .\CheckMailBox.ps1 SignatureCraft\SEP
ExecMonadCmdLet : Exception : System.Management.Automation.CmdletInvocationException: Value cannot be null.
Parameter name: parameters ---> System.ArgumentNullException: Value cannot be null.
Parameter name: parameters
at Microsoft.Exchange.Configuration.Tasks.TaskVerboseStringHelper.FormatUserSpecifiedParameters(PropertyBag parameters)
at Microsoft.Exchange.Configuration.Tasks.Task.LogCmdletIterationEvent()
at Microsoft.Exchange.Configuration.Tasks.Task.BeginProcessing()
at System.Management.Automation.Cmdlet.DoBeginProcessing()
at System.Management.Automation.CommandProcessorBase.DoBegin()
--- End of inner exception stack trace ---
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input, Hashtable errorResults, Boolean enumerate)
at System.Management.Automation.PipelineNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
3. If the installer log shows success running the EXE but is unable to verify the mailbox use Powershell to troubleshoot.
a. Open an Exchange Management Shell.
b. Run the following commands:
md "HKLM:\SOFTWARE\Wow6432Node\Symantec"
md "HKLM:\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install"
$error.clear()
Get-Mailbox "<username>"
print $error[0]
Set-ItemProperty -path "HKLM:\SOFTWARE\Wow6432Node\Symantec\SMSMSE-Install" -name "IsMailboxUser" -value "Yes"
NOTE: The value of <username> is the sevice account name.
NOTE: If the md commands report errors that the registry entries already exist they can be ignored.
Troubleshoot any errors reported. Troubleshoot if the Get-Mailbox command fails.