public void Execute(IActivityRequest request, IActivityResponse response) { SecureString password = new SecureString(); settings.Password.ToCharArray().ToList().ForEach(password.AppendChar); PSCredential creds = new PSCredential(settings.UserName, password); PSRunspaceCreationData creationData = new PSRunspaceCreationData(); creationData.Credentials = creds; creationData.Hostname = request.Inputs["Computer name"].AsString(); creationData.Port = request.Inputs["Connection port"].AsInt32(); creationData.UseSsl = request.Inputs["Use SSL"].AsBoolean(); creationData.LoadMachineProfile = request.Inputs["Load host profile"].AsBoolean(); creationData.Name = request.Inputs["Session name"].AsString().ToUpper(); IRunspaceManager runspaceManager = PSRunspaceManger.CreateClient(); RemoteOperationResult result = runspaceManager.OpenRunspace(creationData); if (!result.Success) { throw new Exception(result.Message); } response.Publish("Session name", creationData.Name); }
public RemoteOperationResult OpenRunspace(PSRunspaceCreationData createOptions) { RemoteOperationResult result = new RemoteOperationResult(); if (Runspaces.ContainsKey(createOptions.Name.ToUpper())) { return new RemoteOperationResult() { Message = "Runspace already existed.", Success = true } } ; try { WSManConnectionInfo connectioInfo = new WSManConnectionInfo(createOptions.UseSsl, createOptions.Hostname, createOptions.Port, "/wsman", "http://schemas.microsoft.com/powershell/Microsoft.PowerShell", createOptions.Credentials); connectioInfo.NoMachineProfile = !createOptions.LoadMachineProfile; connectioInfo.AuthenticationMechanism = AuthenticationMechanism.Negotiate; Runspace runspace = RunspaceFactory.CreateRunspace(connectioInfo); runspace.Open(); Runspaces.Add(createOptions.Name.ToUpper(), runspace); return(new RemoteOperationResult() { Message = "Runspace created.", Success = true }); } catch (Exception ex) { return(new RemoteOperationResult() { Message = string.Format("Runspace creation failed: {0}", ex.Message), Success = false }); } }