PowerShell/src/Microsoft.Management.Infrastructure.CimCmdlets/CimGetCimClass.cs

237 lines
7.3 KiB
C#

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
#region Using directives
using System.Collections;
using System;
using System.Collections.Generic;
using System.Management.Automation;
using System.Globalization;
#endregion
namespace Microsoft.Management.Infrastructure.CimCmdlets
{
/// <summary>
/// Containing all information originated from
/// the parameters of <see cref="GetCimClassCommand"/>
/// </summary>
internal class CimGetCimClassContext : XOperationContextBase
{
/// <summary>
/// <para>
/// Constructor
/// </para>
/// </summary>
/// <param name="methodName"></param>
/// <param name="propertyName"></param>
/// <param name="qualifierName"></param>
internal CimGetCimClassContext(
string theClassName,
string theMethodName,
string thePropertyName,
string theQualifierName)
{
this.className = theClassName;
this.methodName = theMethodName;
this.propertyName = thePropertyName;
this.qualifierName = theQualifierName;
}
/// <summary>
/// <para>
/// The following is the definition of the input parameter "ClassName".
/// </para>
/// <para>
/// Wildcard expansion should be allowed.
/// </para>
/// </summary>
public string ClassName
{
get { return className; }
set { className = value; }
}
private string className;
/// <summary>
/// <para>
/// The following is the definition of the input parameter "MethodName",
/// Which may contains wildchar.
/// Then Filter the <see cref="CimClass"/> by given methodname
/// </para>
/// </summary>
internal string MethodName
{
get { return methodName; }
}
private string methodName;
/// <summary>
/// <para>
/// The following is the definition of the input parameter "PropertyName",
/// Which may contains wildchar.
/// Filter the <see cref="CimClass"/> by given property name.
/// </para>
/// </summary>
internal string PropertyName
{
get { return propertyName; }
}
private string propertyName;
/// <summary>
/// <para>
/// The following is the definition of the input parameter "QualifierName",
/// Which may contains wildchar.
/// Filter the <see cref="CimClass"/> by given methodname
/// </para>
/// </summary>
internal string QualifierName
{
get { return qualifierName; }
}
private string qualifierName;
}
/// <summary>
/// <para>
/// Implements operations of get-cimclass cmdlet.
/// </para>
/// </summary>
internal sealed class CimGetCimClass : CimAsyncOperation
{
/// <summary>
/// <para>
/// Constructor
/// </para>
/// </summary>
public CimGetCimClass()
: base()
{
}
/// <summary>
/// <para>
/// Base on parametersetName to retrieve <see cref="CimClass"/>
/// </para>
/// </summary>
/// <param name="cmdlet"><see cref="GetCimClassCommand"/> object.</param>
public void GetCimClass(GetCimClassCommand cmdlet)
{
List<CimSessionProxy> proxys = new List<CimSessionProxy>();
string nameSpace = ConstValue.GetNamespace(cmdlet.Namespace);
string className = (cmdlet.ClassName == null) ? @"*" : cmdlet.ClassName;
CimGetCimClassContext context = new CimGetCimClassContext(
cmdlet.ClassName,
cmdlet.MethodName,
cmdlet.PropertyName,
cmdlet.QualifierName);
switch (cmdlet.ParameterSetName)
{
case CimBaseCommand.ComputerSetName:
{
IEnumerable<string> computerNames = ConstValue.GetComputerNames(
cmdlet.ComputerName);
foreach (string computerName in computerNames)
{
CimSessionProxy proxy = CreateSessionProxy(computerName, cmdlet);
proxy.ContextObject = context;
proxys.Add(proxy);
}
}
break;
case CimBaseCommand.SessionSetName:
{
foreach (CimSession session in cmdlet.CimSession)
{
CimSessionProxy proxy = CreateSessionProxy(session, cmdlet);
proxy.ContextObject = context;
proxys.Add(proxy);
}
}
break;
default:
return;
}
if (WildcardPattern.ContainsWildcardCharacters(className))
{
// retrieve all classes and then filter based on
// classname, propertyname, methodname, and qualifiername
foreach (CimSessionProxy proxy in proxys)
{
proxy.EnumerateClassesAsync(nameSpace);
}
}
else
{
foreach (CimSessionProxy proxy in proxys)
{
proxy.GetClassAsync(nameSpace, className);
}
}
}
#region private methods
/// <summary>
/// <para>
/// Set <see cref="CimSessionProxy"/> properties
/// </para>
/// </summary>
/// <param name="proxy"></param>
/// <param name="cmdlet"></param>
private void SetSessionProxyProperties(
ref CimSessionProxy proxy,
GetCimClassCommand cmdlet)
{
proxy.OperationTimeout = cmdlet.OperationTimeoutSec;
}
/// <summary>
/// <para>
/// Create <see cref="CimSessionProxy"/> and set properties
/// </para>
/// </summary>
/// <param name="computerName"></param>
/// <param name="cmdlet"></param>
/// <returns></returns>
private CimSessionProxy CreateSessionProxy(
string computerName,
GetCimClassCommand cmdlet)
{
CimSessionProxy proxy = new CimSessionProxyGetCimClass(computerName);
this.SubscribeEventAndAddProxytoCache(proxy);
SetSessionProxyProperties(ref proxy, cmdlet);
return proxy;
}
/// <summary>
/// Create <see cref="CimSessionProxy"/> and set properties.
/// </summary>
/// <param name="session"></param>
/// <param name="cmdlet"></param>
/// <returns></returns>
private CimSessionProxy CreateSessionProxy(
CimSession session,
GetCimClassCommand cmdlet)
{
CimSessionProxy proxy = new CimSessionProxyGetCimClass(session);
this.SubscribeEventAndAddProxytoCache(proxy);
SetSessionProxyProperties(ref proxy, cmdlet);
return proxy;
}
#endregion
}
}