void connection_Closed(object sender, EventArgs e) { if (!GetActiveSockets().Any()) { try { _sessionManager.ReportSessionEnded(Session.Id); } catch (Exception ex) { _logger.ErrorException("Error reporting session ended.", ex); } } else { var capabilities = new SessionCapabilities { PlayableMediaTypes = Session.PlayableMediaTypes, SupportedCommands = Session.SupportedCommands, SupportsMediaControl = SupportsMediaControl }; _sessionManager.ReportCapabilities(Session.Id, capabilities); } }
/// <summary> /// Reports the capabilities. /// </summary> /// <param name="sessionId">The session identifier.</param> /// <param name="capabilities">The capabilities.</param> public void ReportCapabilities(string sessionId, SessionCapabilities capabilities) { var session = GetSession(sessionId); session.PlayableMediaTypes = capabilities.PlayableMediaTypes; session.SupportedCommands = capabilities.SupportedCommands; }
void connection_Closed(object sender, EventArgs e) { var capabilities = new SessionCapabilities { PlayableMediaTypes = Session.PlayableMediaTypes, SupportedCommands = Session.SupportedCommands, SupportsMediaControl = SupportsMediaControl }; _sessionManager.ReportCapabilities(Session.Id, capabilities); }
public static Dictionary <string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities) { List <CommandMetadata> list = new List <CommandMetadata>(); if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer)) { list.AddRange(GetRestrictedRemotingCommands()); } if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer)) { list.AddRange(GetRestrictedRemotingCommands()); list.AddRange(GetRestrictedJobCommands()); } Dictionary <string, CommandMetadata> dictionary = new Dictionary <string, CommandMetadata>(StringComparer.OrdinalIgnoreCase); foreach (CommandMetadata metadata in list) { dictionary.Add(metadata.Name, metadata); } return(dictionary); }
public static InitialSessionState CreateRestricted(SessionCapabilities sessionCapabilities) { InitialSessionState initialSessionState = new InitialSessionState(); return(initialSessionState); }
public static InitialSessionState CreateRestricted(SessionCapabilities sessionCapabilities) { InitialSessionState initialSessionState = new InitialSessionState(); return initialSessionState; }
/// <summary> /// Returns a dictionary from a command name to <see cref="CommandMetadata"/> describing /// how that command can be restricted to limit attack surface while still being usable /// by features included in <paramref name="sessionCapabilities"/>. /// /// For example the implicit remoting feature /// (included in <see cref="SessionCapabilities.RemoteServer"/>) /// doesn't use all parameters of Get-Help /// and uses only a limited set of argument values for the parameters it does use. /// /// <see cref="CommandMetadata"/> can be passed to <see cref="ProxyCommand.Create(CommandMetadata)"/> method to generate /// a body of a proxy function that forwards calls to the actual cmdlet, while exposing only the parameters /// listed in <see cref="CommandMetadata"/>. Exposing only the restricted proxy function while making /// the actual cmdlet and its aliases private can help in reducing attack surface of the remoting server. /// </summary> /// <returns></returns> /// <seealso cref="System.Management.Automation.Runspaces.InitialSessionState.CreateRestricted(SessionCapabilities)"/> public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities) { List<CommandMetadata> restrictedCommands = new List<CommandMetadata>(); // all remoting cmdlets need to be included for workflow scenarios as wel if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer)) { restrictedCommands.AddRange(GetRestrictedRemotingCommands()); } if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer)) { #if CORECLR // Workflow Not Supported On PowerShell Core throw PSTraceSource.NewNotSupportedException(ParserStrings.WorkflowNotSupportedInPowerShellCore); #else restrictedCommands.AddRange(GetRestrictedRemotingCommands()); restrictedCommands.AddRange(GetRestrictedJobCommands()); #endif } Dictionary<string, CommandMetadata> result = new Dictionary<string, CommandMetadata>(StringComparer.OrdinalIgnoreCase); foreach (CommandMetadata restrictedCommand in restrictedCommands) { result.Add(restrictedCommand.Name, restrictedCommand); } return result; }
public static Dictionary <string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities) { throw new NotImplementedException(); }
public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities) { throw new NotImplementedException(); }
public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities) { List<CommandMetadata> list = new List<CommandMetadata>(); if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer)) { list.AddRange(GetRestrictedRemotingCommands()); } if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer)) { list.AddRange(GetRestrictedRemotingCommands()); list.AddRange(GetRestrictedJobCommands()); } Dictionary<string, CommandMetadata> dictionary = new Dictionary<string, CommandMetadata>(StringComparer.OrdinalIgnoreCase); foreach (CommandMetadata metadata in list) { dictionary.Add(metadata.Name, metadata); } return dictionary; }