Issues in executing powershell script from web service

Hi Guys,

1) Below is my powershell script:

#Accept input parameters  
Param(  
    [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)]  
    [string] $Office365Username,  
    [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)]  
    [string] $Office365Password,
    [string]$GroupName
)

#Remove all existing Powershell sessions  
Get-PSSession | Remove-PSSession   

#Did they provide creds?  If not, ask them for it.
if (([string]::IsNullOrEmpty($Office365Username) -eq $false) -and ([string]::IsNullOrEmpty($Office365Password) -eq $false))
{

    $SecureOffice365Password = ConvertTo-SecureString -AsPlainText $Office365Password -Force      
      
    #Build credentials object  
    $Office365Credentials  = New-Object System.Management.Automation.PSCredential $Office365Username, $SecureOffice365Password  
}
else
{   
    #Build credentials object  
    $Office365Credentials  = Get-Credential
}

#Create remote Powershell session  
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Office365Credentials -Authentication Basic -AllowRedirection
 
#Import the session  
Import-PSSession $Session
#cmds
     
$result=Get-DistributionGroup -ResultSize Unlimited  
return  $result
#Clean up session  
Remove-PSSession $Session

2) Below is my C# code

public string GetAllGroups()
        {
            int count = 1;
            string getDListScript = @"C:\inetpub\wwwroot\O365Service\Scripts\GetDList.ps1";
       
            string userName = "j*****";
            string password = "****";
            try
            {
                using (var ps = PowerShell.Create())
                {
                    Runspace runSpace = RunspaceFactory.CreateRunspace();
                    runSpace.Open();
                    ps.Runspace = runSpace;

                    ps.AddCommand(getDListScript).AddParameter("Office365Username", userName).AddParameter("Office365Password", password);
                    //IAsyncResult async = ps.BeginInvoke();
                    //StringBuilder stringBuilder = new StringBuilder();
             
                 var   results = ps.Invoke();
                 PSDataCollection<ErrorRecord> errors = ps.Streams.Error;
                 if (errors != null && errors.Count > 0)
                 {
                     StringBuilder sb = new StringBuilder();
                     foreach (ErrorRecord err in errors)
                     {
                         sb.Append(err.ToString());
                     }
                     System.IO.File.WriteAllText(@"C:\inetpub\wwwroot\RestService\bin\err.text", sb.ToString());
                 }

                 count = results.Count;

                   
                }
            }
            catch (Exception ex)
            {
                return ex.Message.ToString();
            }
            return count.ToString();

}

When i am executing the C# code on server from Console application it is working fine but when i am executing it from Webservice it is giving me the below exception

[outlook.office365.com] Connecting to remote server outlook.office365.com failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.Cannot validate argument on parameter 'Session'. The argument is null. Provide a valid value for the argument, and then try running the command again.The term 'Get-DistributionGroup' 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.

I have set execution policy to unrestricted of the server.

Please Help me on this.

Regards,

Samira

June 5th, 2015 9:42am

I would suggest you just invoke the cmdlet directly from your managed code eg https://msdn.microsoft.com/en-us/library/office/ff326159%28v=exchg.150%29.aspx instead of trying to do it the way you are which is complicated. eg

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace TestpsCons
{
    class Program
    {
        static void Main(string[] args)
        {
            String AdminUserName = "User@domain.com";
            String Password = "password";

            System.Security.SecureString secureString = new System.Security.SecureString();
            foreach (char c in Password)
                secureString.AppendChar(c);
            PSCredential credential = new PSCredential(AdminUserName, secureString);
            WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("https://outlook.office365.com/PowerShell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
            connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
            connectionInfo.SkipCACheck = true;
            connectionInfo.SkipCNCheck = true;
            connectionInfo.NoEncryption = false;
            connectionInfo.MaximumConnectionRedirectionCount = 4;
            Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);
            runspace.Open();
            Command getDLList = new Command("Get-DistributionGroup");
            getDLList.Parameters.Add("ResultSize", "Unlimited");
            Pipeline plPileLine = runspace.CreatePipeline();
            plPileLine.Commands.Add(getDLList);
            Collection<PSObject> RsResultsresults = plPileLine.Invoke();
            foreach (PSObject psObj in RsResultsresults) {
                Console.WriteLine(psObj.Properties["Name"].Value);
                Console.WriteLine(psObj.Properties["DisplayName"].Value);
            }
        }
    }
}
Cheers
Glen

Free Windows Admin Tool Kit Click here and download it now
June 8th, 2015 12:40am

Hi Glen,

I am getting authentication error but I am not able to figure it out.

Here is error details.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=SG2PR03CA0041,BackEndServer=,RequestId=e4e42712-90ad-4c61-8d7e-0f07abc15c79,TimeStamp=6/8/2015 5:38:58 AM] Access Denied For more information, see the about_Remote_Troubleshooting Help topic.
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at DistributionList.Service.DistributionList.GetAllGroups().

I have few queries.

1) I am getting error only when i am accessing it from WCF web service. In console application it is running fine.

2) Which URl I should use in  WsManConnectionInfo. Is it Domain url or same as above?

Thanks


June 8th, 2015 1:52am

Hi Glen,

I am getting authentication error but I am not able to figure it out.

Here is error details.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=SG2PR03CA0041,BackEndServer=,RequestId=e4e42712-90ad-4c61-8d7e-0f07abc15c79,TimeStamp=6/8/2015 5:38:58 AM] Access Denied For more information, see the about_Remote_Troubleshooting Help topic.
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at DistributionList.Service.DistributionList.GetAllGroups().

I have few queries.

1) I am getting error only when i am accessing it from WCF web service. In console application it is running fine.

2) Which URl I should use in  WsManConnectionInfo. Is it Domain url or same as above?

Thanks


  • Edited by Samira123 Monday, June 08, 2015 7:20 AM
Free Windows Admin Tool Kit Click here and download it now
June 8th, 2015 5:49am

Hi Glen,

I am getting authentication error but I am not able to figure it out.

Here is error details.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=SG2PR03CA0041,BackEndServer=,RequestId=e4e42712-90ad-4c61-8d7e-0f07abc15c79,TimeStamp=6/8/2015 5:38:58 AM] Access Denied For more information, see the about_Remote_Troubleshooting Help topic.
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at DistributionList.Service.DistributionList.GetAllGroups().

I have few queries.

1) I am getting error only when i am accessing it from WCF web service. In console application it is running fine.

2) Which URl I should use in  WsManConnectionInfo. Is it Domain url or same as above?

Thanks


  • Edited by Samira123 Monday, June 08, 2015 7:20 AM
June 8th, 2015 5:49am

Hi Glen,

I am getting authentication error but I am not able to figure it out.

Here is error details.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=SG2PR03CA0041,BackEndServer=,RequestId=e4e42712-90ad-4c61-8d7e-0f07abc15c79,TimeStamp=6/8/2015 5:38:58 AM] Access Denied For more information, see the about_Remote_Troubleshooting Help topic.
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at DistributionList.Service.DistributionList.GetAllGroups().

I have few queries.

1) I am getting error only when i am accessing it from WCF web service. In console application it is running fine.

2) Which URl I should use in  WsManConnectionInfo. Is it Domain url or same as above?

Thanks


  • Edited by Samira123 Monday, June 08, 2015 7:20 AM
Free Windows Admin Tool Kit Click here and download it now
June 8th, 2015 5:49am

Hi Glen,

I am getting authentication error but I am not able to figure it out.

Here is error details.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=SG2PR03CA0041,BackEndServer=,RequestId=e4e42712-90ad-4c61-8d7e-0f07abc15c79,TimeStamp=6/8/2015 5:38:58 AM] Access Denied For more information, see the about_Remote_Troubleshooting Help topic.
   at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
   at System.Management.Automation.Runspaces.Internal.RemoteRunspacePoolInternal.Open()
   at System.Management.Automation.RemoteRunspace.Open()
   at DistributionList.Service.DistributionList.GetAllGroups().

I have few queries.

1) I am getting error only when i am accessing it from WCF web service. In console application it is running fine.

2) Which URl I should use in  WsManConnectionInfo. Is it Domain url or same as above?

Thanks


  • Edited by Samira123 Monday, June 08, 2015 7:20 AM
June 8th, 2015 5:49am

1. I would say you have a username and password issue with your WCF apps eg try using the wrong username and password in you console apps and you'll get the same error.

2. It should be https://outlook.office365.com/PowerShell

Cheers
Glen

Free Windows Admin Tool Kit Click here and download it now
June 9th, 2015 12:51am

You are right Glen. When I am passing wrong credentials then it is throwing error but with specification.

Error:System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server outlook.office365.com failed with the following error message : [ClientAccessServer=BLUPR06CA0011,BackEndServer=,RequestId=c29c7583-9d6e-42f5-9d0f-331c26224def,TimeStamp=6/9/2015 6:14:10 AM] [FailureCategory=LiveID-InvalidCreds].

Access Denied For more information, see the about_Remote_Troubleshooting Help topic.

But when assigning valid credential I am getting same error at line Runspace.open(). Moreover My user is a global admin in Office365. Am I missing any  configuration in Office365 or PowerShell?

June 9th, 2015 5:47am

You could try some tracing http://windowsitpro.com/blog/tools-troubleshooting-powershell-remoting-and-winrm-part-2 to get more information

Cheers
Glen

Free Windows Admin Tool Kit Click here and download it now
June 10th, 2015 2:52am

Thanks a lot Glen. It was actually  IIS pool which was denying access for security reasons. Because IIS does'nt

allow anonymous user to run powershell scripts.

June 12th, 2015 1:34am

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics