MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4#region Using directives5 6using System.Collections.Generic;7 8#endregion9 10namespace Microsoft.Management.Infrastructure.CimCmdlets11{12 /// <summary>13 /// <para>14 /// Implements operations of get-AssociatedInstance cmdlet.15 /// </para>16 /// </summary>17 internal sealed class CimGetAssociatedInstance : CimAsyncOperation18 {19 /// <summary>20 /// Initializes a new instance of the <see cref="CimGetAssociatedInstance"/> class.21 /// </summary>22 public CimGetAssociatedInstance()23 : base()24 {25 }26 27 /// <summary>28 /// <para>29 /// Base on parametersetName to retrieve associated ciminstances30 /// </para>31 /// </summary>32 /// <param name="cmdlet"><see cref="GetCimInstanceCommand"/> object.</param>33 public void GetCimAssociatedInstance(GetCimAssociatedInstanceCommand cmdlet)34 {35 IEnumerable<string> computerNames = ConstValue.GetComputerNames(cmdlet.ComputerName);36 // use the namespace from parameter37 string nameSpace = cmdlet.Namespace;38 if ((nameSpace == null) && (cmdlet.ResourceUri == null))39 {40 // try to use namespace of ciminstance, then fall back to default namespace41 nameSpace = ConstValue.GetNamespace(cmdlet.CimInstance.CimSystemProperties.Namespace);42 }43 44 List<CimSessionProxy> proxys = new();45 switch (cmdlet.ParameterSetName)46 {47 case CimBaseCommand.ComputerSetName:48 foreach (string computerName in computerNames)49 {50 CimSessionProxy proxy = CreateSessionProxy(computerName, cmdlet.CimInstance, cmdlet);51 proxys.Add(proxy);52 }53 54 break;55 case CimBaseCommand.SessionSetName:56 foreach (CimSession session in cmdlet.CimSession)57 {58 CimSessionProxy proxy = CreateSessionProxy(session, cmdlet);59 proxys.Add(proxy);60 }61 62 break;63 default:64 return;65 }66 67 foreach (CimSessionProxy proxy in proxys)68 {69 proxy.EnumerateAssociatedInstancesAsync(70 nameSpace,71 cmdlet.CimInstance,72 cmdlet.Association,73 cmdlet.ResultClassName,74 null,75 null);76 }77 }78 79 #region private methods80 81 /// <summary>82 /// <para>83 /// Set <see cref="CimSessionProxy"/> properties84 /// </para>85 /// </summary>86 /// <param name="proxy"></param>87 /// <param name="cmdlet"></param>88 private static void SetSessionProxyProperties(89 ref CimSessionProxy proxy,90 GetCimAssociatedInstanceCommand cmdlet)91 {92 proxy.OperationTimeout = cmdlet.OperationTimeoutSec;93 proxy.KeyOnly = cmdlet.KeyOnly;94 if (cmdlet.ResourceUri != null)95 {96 proxy.ResourceUri = cmdlet.ResourceUri;97 }98 }99 100 /// <summary>101 /// <para>102 /// Create <see cref="CimSessionProxy"/> and set properties103 /// </para>104 /// </summary>105 /// <param name="computerName"></param>106 /// <param name="cimInstance"></param>107 /// <param name="cmdlet"></param>108 /// <returns></returns>109 private CimSessionProxy CreateSessionProxy(110 string computerName,111 CimInstance cimInstance,112 GetCimAssociatedInstanceCommand cmdlet)113 {114 CimSessionProxy proxy = CreateCimSessionProxy(computerName, cimInstance);115 SetSessionProxyProperties(ref proxy, cmdlet);116 return proxy;117 }118 119 /// <summary>120 /// Create <see cref="CimSessionProxy"/> and set properties.121 /// </summary>122 /// <param name="session"></param>123 /// <param name="cmdlet"></param>124 /// <returns></returns>125 private CimSessionProxy CreateSessionProxy(126 CimSession session,127 GetCimAssociatedInstanceCommand cmdlet)128 {129 CimSessionProxy proxy = CreateCimSessionProxy(session);130 SetSessionProxyProperties(ref proxy, cmdlet);131 return proxy;132 }133 134 #endregion135 136 }137}138 