//----------------------------------------------------------------------- // // Copyright (C) 2011 Microsoft Corporation // //----------------------------------------------------------------------- namespace Microsoft.Samples.Management.OData.BasicPlugins { using System.IO; using System.Linq; using System.Management.Automation; using System.Management.Automation.Remoting; using System.Management.Automation.Runspaces; using System.Web; /// /// PSSessionConfigruation implementation /// Management OData serivce uses PSSessionConfiguration interface to get PowerShell session configuration for a user /// This implementation gives same PowerShell session configuration for all users. /// It adds all the PowerShell modules (*.psm1) and PowerShell scripts (*-*.ps1) files into the PowerShell session configuration. /// public class SessionConfiguration : PSSessionConfiguration { /// /// Gets application private data /// /// Sender information /// Always returns null public override PSPrimitiveDictionary GetApplicationPrivateData(PSSenderInfo senderInfo) { return null; } /// /// Gets custom initial session state /// /// Sender information /// Custom initial Session state public override InitialSessionState GetInitialSessionState(PSSenderInfo senderInfo) { var initialSessionState = InitialSessionState.CreateDefault(); var dir = HttpContext.Current != null ? HttpContext.Current.Server.MapPath(".") : Directory.GetCurrentDirectory(); initialSessionState.ImportPSModule(Directory.EnumerateFiles(dir, "*.psm1") .Select(s => Path.Combine(dir, Path.GetFileNameWithoutExtension(s))).ToArray()); foreach (var cmdletFileName in Directory.EnumerateFiles(dir, "*-*.ps1")) { initialSessionState.Commands.Add( new SessionStateFunctionEntry(Path.GetFileNameWithoutExtension(cmdletFileName), File.ReadAllText(Path.Combine(dir, cmdletFileName)))); } return initialSessionState; } } }