in dotNet/PsEdge/PsEdge.cs [37:77]
public async Task<object> CreateRunspacePool(object input)
{
var inputDict = input as IDictionary<string, object>;
if (inputDict == null)
{
throw new ArgumentException("input");
}
var runspaceKey = (string) inputDict["RunspaceKey"];
var startupScript = (string) inputDict["StartupScript"];
if (runspacePools.ContainsKey(runspaceKey))
{
throw new InvalidOperationException("Runspace already created with key" + runspaceKey);
}
if (string.IsNullOrEmpty(startupScript))
{
// Assign a dummy script if not provided.
startupScript = "Out-Null";
}
var initialState = InitialSessionState.CreateDefault();
var promptHandler = (Func<object, Task<object>>)inputDict["PromptHandler"];
PSEdgeRawUI rawUI = new PSEdgeRawUI();
PSEdgeHostUI hostUI = new PSEdgeHostUI(rawUI, promptHandler);
PSEdgeHost host = new PSEdgeHost(hostUI);
// inject the startup script in the runspace so it is invoked automatically.
initialState.Variables.Add(
new SessionStateVariableEntry("orbPrivate_RunspaceStartupScript", startupScript,"", ScopedItemOptions.AllScope));
var runspace = RunspaceFactory.CreateRunspacePool(MinRunspacesPerKey, MaxRunspacesPerKey, initialState, host);
await Task.Factory.FromAsync(runspace.BeginOpen, runspace.EndOpen, null);
runspacePools[runspaceKey] = runspace;
return true;
}