//-----------------------------------------------------------------------
//
// 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;
}
}
}