c#术语“启用邮箱”未被识别为cmdlet

时间:2017-09-22 06:43:12

标签: c# wpf powershell

一切都在VS的开发人员计算机上运行,​​或者从wpf app的bin / release文件运行良好。但是,当我从另一台计算机上的VS或bin / release文件运行相同的项目时,我收到一个错误:“术语'Enable-Mailbox'不被识别为cmdlet,函数,脚本文件或可操作的名称检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。“ 以下是发生错误的代码:

    public static class  ManageMailBox
{
    public static bool CreateMailBox(string strUserID, string admin_user, string pword) //, string str_upn)
    {
        try
        {
            string strExchangeServer = Constants.ExchangeServer; 
            Uri uri = new Uri(@"http://" + strExchangeServer + @"/powershell?serializationLevel=Full"); // orig works

            /// must pass secure string
            char[] passwordChars = pword.ToCharArray();
            SecureString password = new SecureString();
            foreach (char c in passwordChars)
            {
                password.AppendChar(c);
            }
            PSCredential credential = new PSCredential("DOMAIN\\" + admin_user, password);
            Runspace runspace = RunspaceFactory.CreateRunspace();
            PowerShell powershell = PowerShell.Create();
            PSCommand command = new PSCommand();

            command.AddCommand("New-PSSession");
            command.AddParameter("ConfigurationName", "Microsoft.Exchange");
            command.AddParameter("ConnectionUri", uri);
            command.AddParameter("Credential", credential);
            command.AddParameter("Authentication", "Default");
            PSSessionOption sessionOption = new PSSessionOption();
            sessionOption.SkipCACheck = true;
            sessionOption.SkipCNCheck = true;
            sessionOption.SkipRevocationCheck = true;
            command.AddParameter("SessionOption", sessionOption);

            powershell.Commands = command;
            try
            {
                // open the remote runspace
                runspace.Open();

                // associate the runspace with powershell
                powershell.Runspace = runspace;

                // invoke the powershell to obtain the results
                Collection<PSSession> result = powershell.Invoke<PSSession>();

                foreach (ErrorRecord current in powershell.Streams.Error)
                {
                    throw new Exception("Exception: " + current.Exception.ToString());
                    throw new Exception("Inner Exception: " + current.Exception.InnerException);
                }

                if (result.Count != 1)
                    throw new Exception("Unexpected number of Remote Runspace connections returned.");

                // Set the runspace as a local variable on the runspace
                powershell = PowerShell.Create();
                command = new PSCommand();
                command.AddCommand("Set-Variable");
                command.AddParameter("Name", "ra");
                command.AddParameter("Value", result[0]);
                powershell.Commands = command;
                powershell.Runspace = runspace;

                powershell.Invoke();

                // First import the cmdlets in the current runspace (using Import-PSSession)
                powershell = PowerShell.Create();
                command = new PSCommand();
                //command.AddScript("Set-ExecutionPolicy -Unrestricted");
                command.AddScript("Import-PSSession -Session $ra");
                powershell.Commands = command;
                powershell.Runspace = runspace;
                powershell.Invoke();

                // Now run get-ExchangeServer
                powershell = PowerShell.Create();
                command = new PSCommand();

                command.AddCommand("Enable-Mailbox");
                command.AddParameter("Identity", strUserID);
                command.AddParameter("Alias", strUserID);
                command.AddParameter("Database", "IAP Mailbox Database 0948752629");
                powershell.Commands = command;
                powershell.Runspace = runspace;
                powershell.Invoke(); // ERROR !!! The term 'Enable-Mailbox' is not recognized as the name of a cmdlet, function

                return true;
            }
            catch(Exception ex) { 
                    throw new Exception(ex.Message.ToString()); }
            finally
            {
                // dispose the runspace and enable garbage collection
                runspace.Dispose();
                runspace = null;

                // Finally dispose the powershell and set all variables to null to free
                // up any resources.
                powershell.Dispose();
                powershell = null;
            }
        }
        catch (Exception argex)
        {
            throw new ArgumentException(argex.Message.ToString());
        }

    }
}

0 个答案:

没有答案