title: Unable to run Disable-Mailbox Powershell in C#
body: <p>I'm trying to reproduce the following working chunk of Powershell in C#.
  We are connecting on an Exchange2010 instance.</p>
  
  <pre><code>$ExURI = "http://ExchangeUrl/PowerShell/"
  
  $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $ExURI -Authentication Kerberos
  $userName = "patatem"
  
  Import-PSSession $Session -AllowClobber -EA SilentlyContinue | Out-Null
  
  Get-Recipient $userName
  
  Disable-Mailbox -Identity $userName -Confirm:$False
  #enable-mailbox -identity $userName -Alias $userName -database "AnExchangeDatabase"
  
  remove-PSSession $Session  
  </code></pre>
  
  <p>I've been following the steps referenced here : <a href="https://blogs.msdn.microsoft.com/wushuai/2016/09/18/access-exchange-online-by-powershell-in-c/" rel="nofollow noreferrer">https://blogs.msdn.microsoft.com/wushuai/2016/09/18/access-exchange-online-by-powershell-in-c/</a></p>
  
  <p>In the following block of code, I get positive results when I call <code>Get-Mailbox</code>, <code>Get-Recipient</code>.</p>
  
  <p>When calling <code>Disable-Mailbox</code>, I get the following error </p>
  
  <blockquote>
    <p>The term 'Disable-Mailbox' is not recognized as the name of a cmdlet,
    function, script file, or operable program. Check the spelling of the
    name, or if a path was included, verify that the path is correct and
    try again.</p>
  </blockquote>
  
  <p>Why is it recognizing <code>Get-Mailbox</code> but not <code>Disable-Mailbox</code>?</p>
  
  <p>(I've tried adding another chunk of code to do the Import session section of Powershell but that didn't change anything.)</p>
  
  <pre><code>   public void EnableCommand(string identity, string database)
              {
                  if (!string.IsNullOrWhiteSpace(identity))
                  {
                      using (var runspace = RunspaceFactory.CreateRunspace())
                      {
                          runspace.Open();
                          var powershell = PowerShell.Create();
  
                          var command = new PSCommand();
                          command.AddCommand("New-PSSession");
                          command.AddParameter("ConfigurationName", "Microsoft.Exchange");
                          command.AddParameter("ConnectionUri", new Uri(Constants.DefaultOutLookUrl));
                          command.AddParameter("Authentication", "Kerberos");
                          powershell.Commands = command;
  
                          powershell.Runspace = runspace;
                          var result = powershell.Invoke();
                          if (powershell.Streams.Error.Count &gt; 0 || result.Count != 1)
                          {
                              throw new Exception("Fail to establish the connection");
                          }
  
                          powershell = PowerShell.Create();
                          command = new PSCommand();
                          command.AddCommand("Invoke-Command");
                          command.AddParameter("ScriptBlock", System.Management.Automation.ScriptBlock.Create("Get-Mailbox"));
                          command.AddParameter("Session", result[0]);
                          powershell.Commands = command;
                          powershell.Runspace = runspace;
                          var mailBoxes = powershell.Invoke();
  
  // This will give me a result
                          var returnValue = new StringBuilder();
                          foreach (var item in mailBoxes)
                          {
                              returnValue.AppendLine(item.ToString());
                          }
  
  
                          // check the other output streams (for example, the error stream)
                          if (powershell.Streams.Error.Count &gt; 0)
                          {
                              returnValue.AppendLine($"{powershell.Streams.Error.Count} errors: ");
                              foreach (var err in powershell.Streams.Error)
                              {
                                  returnValue.AppendLine($"{err.ToString()}");
                              }
                          }
  
  // This will also work
                          powershell = PowerShell.Create();
                          command = new PSCommand();
                          command.AddCommand("Invoke-Command");
                          command.AddParameter("ScriptBlock", System.Management.Automation.ScriptBlock.Create("Get-Recipient SomeEmail"));
                          command.AddParameter("Session", result[0]);
                          powershell.Commands = command;
                          powershell.Runspace = runspace;
                          var mailBoxes2 = powershell.Invoke();
  
                          foreach (var item in mailBoxes2)
                          {
                              returnValue.AppendLine(item.ToString());
                          }
  
  
                          if (powershell.Streams.Error.Count &gt; 0)
                          {
                              returnValue.AppendLine($"{powershell.Streams.Error.Count} errors: ");
                              foreach (var err in powershell.Streams.Error)
                              {
                                returnValue.AppendLine($"{err.ToString()}");
                              }
                          }
  
  // this will give me The term 'Disable-Mailbox' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
  
                          powershell = PowerShell.Create();
                          command = new PSCommand();
                          command.AddCommand("Invoke-Command");
                          command.AddParameter("ScriptBlock", System.Management.Automation.ScriptBlock.Create("Disable-Mailbox -Identity patatem -Confirm:$False"));
                          command.AddParameter("Session", result[0]);
                          powershell.Commands = command;
                          powershell.Runspace = runspace;
                          var mailBoxes3 = powershell.Invoke();
  
                          foreach (var item in mailBoxes3)
                          {
                              returnValue.AppendLine(item.ToString());
                          }
  
                          // check the other output streams (for example, the error stream)
                          if (powershell.Streams.Error.Count &gt; 0)
                          {
                              returnValue.AppendLine($"{powershell.Streams.Error.Count} errors: ");
                              foreach (var err in powershell.Streams.Error)
                              {
                                returnValue.AppendLine($"{err.ToString()}");
                              }
                          }
  
                          Console.WriteLine(returnValue);
                      }
                  }
  </code></pre>