// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #region Using directives using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Management.Automation; #endregion namespace Microsoft.Management.Infrastructure.CimCmdlets { /// /// The command returns zero, one or more CimSession objects that represent /// connections with remote computers established from the current PS Session. /// [Alias("gcms")] [Cmdlet(VerbsCommon.Get, "CimSession", DefaultParameterSetName = ComputerNameSet, HelpUri = "https://go.microsoft.com/fwlink/?LinkId=227966")] [OutputType(typeof(CimSession))] public sealed class GetCimSessionCommand : CimBaseCommand { #region constructor /// /// Initializes a new instance of the class. /// public GetCimSessionCommand() : base(parameters, parameterSets) { DebugHelper.WriteLogEx(); } #endregion #region parameters /// /// /// The following is the definition of the input parameter "ComputerName". /// Specifies one or more connections by providing their ComputerName(s). The /// Cmdlet then gets CimSession(s) opened with those connections. This parameter /// is an alternative to using CimSession(s) that also identifies the remote /// computer(s). /// /// /// This is the only optional parameter of the Cmdlet. If not provided, the /// Cmdlet returns all CimSession(s) live/active in the runspace. /// /// /// If an instance of CimSession is pipelined to Get-CimSession, the /// ComputerName property of the instance is bound by name with this parameter. /// /// [Alias(AliasCN, AliasServerName)] [Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = ComputerNameSet)] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public string[] ComputerName { get { return computername; } set { computername = value; base.SetParameter(value, nameComputerName); } } private string[] computername; /// /// The following is the definition of the input parameter "Id". /// Specifies one or more numeric Id(s) for which to get CimSession(s). /// [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, ParameterSetName = SessionIdSet)] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public uint[] Id { get { return id; } set { id = value; base.SetParameter(value, nameId); } } private uint[] id; /// /// The following is the definition of the input parameter "InstanceID". /// Specifies one or Session Instance IDs. /// [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = InstanceIdSet)] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public Guid[] InstanceId { get { return instanceid; } set { instanceid = value; base.SetParameter(value, nameInstanceId); } } private Guid[] instanceid; /// /// The following is the definition of the input parameter "Name". /// Specifies one or more session Name(s) for which to get CimSession(s). The /// argument may contain wildcard characters. /// [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = NameSet)] [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] public string[] Name { get { return name; } set { name = value; base.SetParameter(value, nameName); } } private string[] name; #endregion #region cmdlet processing methods /// /// BeginProcessing method. /// protected override void BeginProcessing() { cimGetSession = new CimGetSession(); this.AtBeginProcess = false; } /// /// ProcessRecord method. /// protected override void ProcessRecord() { base.CheckParameterSet(); cimGetSession.GetCimSession(this); } #endregion #region private members /// /// object used to search CimSession from cache. /// private CimGetSession cimGetSession; #region const string of parameter names internal const string nameComputerName = "ComputerName"; internal const string nameId = "Id"; internal const string nameInstanceId = "InstanceId"; internal const string nameName = "Name"; #endregion /// /// Static parameter definition entries. /// private static readonly Dictionary> parameters = new() { { nameComputerName, new HashSet { new ParameterDefinitionEntry(CimBaseCommand.ComputerNameSet, false), } }, { nameId, new HashSet { new ParameterDefinitionEntry(CimBaseCommand.SessionIdSet, true), } }, { nameInstanceId, new HashSet { new ParameterDefinitionEntry(CimBaseCommand.InstanceIdSet, true), } }, { nameName, new HashSet { new ParameterDefinitionEntry(CimBaseCommand.NameSet, true), } }, }; /// /// Static parameter set entries. /// private static readonly Dictionary parameterSets = new() { { CimBaseCommand.ComputerNameSet, new ParameterSetEntry(0, true) }, { CimBaseCommand.SessionIdSet, new ParameterSetEntry(1) }, { CimBaseCommand.InstanceIdSet, new ParameterSetEntry(1) }, { CimBaseCommand.NameSet, new ParameterSetEntry(1) }, }; #endregion } }