2025-11-28 00:35:46 +09:00

266 lines
11 KiB
C#

//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
//
using System;
using Microsoft.Management.Infrastructure;
using Microsoft.Management.Infrastructure.Options;
namespace SampleDotNetClient
{
class DotNetSample
{
public static void Main()
{
bool hasComputerNameChanged = true;
CimSession cimSession = null;
CimSessionOptions sessionOptions = null;
string className = null;
string computerName = @"."; //GetName("ComputerName");
if (String.IsNullOrEmpty(computerName))
{
computerName = null;
}
string namespaceName = @"root\cimv2"; //GetName("Namespace");
CurrentOperation currentOperation = GetCurrentOption(true);
while (true)
{
if (currentOperation == CurrentOperation.OperationQuit)
{
if (cimSession != null)
{
cimSession.Close();
cimSession = null;
}
return;
}
if (ClassNeeded(currentOperation))
{
className = GetName("ClassName");
}
try
{
// Create local CIM session
if (hasComputerNameChanged)
{
if (cimSession != null)
{
cimSession.Close();
}
sessionOptions = new DComSessionOptions();
sessionOptions.Timeout = new TimeSpan(
0, // Hours
2, // Minutes
0 // Seconds
);
cimSession = CimSession.Create(computerName, sessionOptions);
hasComputerNameChanged = false;
}
switch (currentOperation)
{
case CurrentOperation.EnumerateAsync:
SampleCimOperation.EnumerateASync(cimSession, namespaceName, className);
break;
case CurrentOperation.EnumerateSync:
SampleCimOperation.EnumerateSync(cimSession, namespaceName, className);
break;
case CurrentOperation.GetInstanceSync:
SampleCimOperation.GetInstanceSync(cimSession, namespaceName, className);
break;
case CurrentOperation.GetInstanceAsync:
SampleCimOperation.GetInstanceASync(cimSession, namespaceName, className);
break;
case CurrentOperation.CreateInstanceAsync:
SampleCimOperation.CreateInstanceASync(cimSession, namespaceName, className);
break;
case CurrentOperation.CreateInstanceSync:
SampleCimOperation.CreateInstanceSync(cimSession, namespaceName, className);
break;
case CurrentOperation.DeleteInstanceAsync:
SampleCimOperation.DeleteInstanceASync(cimSession, namespaceName, className);
break;
case CurrentOperation.DeleteInstanceSync:
SampleCimOperation.DeleteInstanceSync(cimSession, namespaceName, className);
break;
case CurrentOperation.ModifyInstanceAsync:
SampleCimOperation.ModifyInstanceASync(cimSession, namespaceName, className);
break;
case CurrentOperation.ModifyInstanceSync:
SampleCimOperation.ModifyInstanceSync(cimSession, namespaceName, className);
break;
case CurrentOperation.QueryInstanceAsync:
SampleCimOperation.QueryInstanceASync(cimSession, namespaceName);
break;
case CurrentOperation.QueryInstanceSync:
SampleCimOperation.QueryInstanceSync(cimSession, namespaceName);
break;
case CurrentOperation.QueryAssociationSync:
SampleCimOperation.EnumerateAssociatedInstanceSync(cimSession, namespaceName, className);
break;
case CurrentOperation.QueryAssociationAsync:
SampleCimOperation.EnumerateAssociatedInstanceASync(cimSession, namespaceName, className);
break;
case CurrentOperation.InvokeMethodSync:
SampleCimOperation.InvokeMethodSync(cimSession, namespaceName, className);
break;
case CurrentOperation.InvokeMethodAsync:
SampleCimOperation.InvokeMethodASync(cimSession, namespaceName, className);
break;
case CurrentOperation.SubscribeSync:
SampleCimOperation.SubscribeSync(cimSession, namespaceName);
break;
case CurrentOperation.SubscribeAsync:
SampleCimOperation.SubscribeASync(cimSession, namespaceName);
break;
case CurrentOperation.OperationComputerName:
computerName = GetName("ComputerName");
if (String.IsNullOrEmpty(computerName))
{
computerName = null;
}
hasComputerNameChanged = true;
break;
case CurrentOperation.OperationNamespaceName:
namespaceName = GetName("Namespace");
break;
default:
break;
}
}
catch (CimException ex)
{
Console.WriteLine(ex.Message);
}
currentOperation = GetCurrentOption(false);
}
}
#region Helpers
public static string GetName(string name)
{
Console.Write("Type {0} : ", name);
return Console.ReadLine();
}
internal static bool ClassNeeded(CurrentOperation currentOperation)
{
if (currentOperation == CurrentOperation.QueryInstanceSync || currentOperation == CurrentOperation.QueryInstanceAsync ||
currentOperation == CurrentOperation.SubscribeAsync || currentOperation == CurrentOperation.SubscribeSync ||
currentOperation == CurrentOperation.OperationNamespaceName || currentOperation == CurrentOperation.OperationComputerName)
{
return false;
}
return true;
}
internal enum CurrentOperation : uint
{
OperationQuit = 0,
EnumerateSync = 1,
EnumerateAsync = 2,
GetInstanceSync = 3,
GetInstanceAsync = 4,
CreateInstanceSync = 5,
CreateInstanceAsync = 6,
DeleteInstanceSync = 7,
DeleteInstanceAsync = 8,
ModifyInstanceSync = 9,
ModifyInstanceAsync = 10,
QueryInstanceSync = 11,
QueryInstanceAsync = 12,
QueryAssociationSync = 13,
QueryAssociationAsync = 14,
InvokeMethodSync = 15,
InvokeMethodAsync = 16,
SubscribeSync = 17,
SubscribeAsync = 18,
OperationMax = 19,
OperationComputerName = 50,
OperationNamespaceName = 100
}
internal static bool IsCorrectChoice(uint result, bool isFirst)
{
if (isFirst)
{
if (result >= (uint)CurrentOperation.OperationMax)
{
return false;
}
}
else
{
if (result >= (uint)CurrentOperation.OperationMax &&
result != (uint)CurrentOperation.OperationComputerName &&
result != (uint)CurrentOperation.OperationNamespaceName)
{
return false;
}
}
return true;
}
internal static CurrentOperation GetCurrentOption(bool isFirst)
{
Console.WriteLine(" Please choose from the following operations ");
Console.WriteLine("(0) To quit");
Console.WriteLine("(1) To Enumerate Synchoronously ");
Console.WriteLine("(2) To Enumerate ASynchoronously");
Console.WriteLine("(3) To Get Synchoronously");
Console.WriteLine("(4) To Get ASynchoronously");
Console.WriteLine("(5) To Create Synchoronously");
Console.WriteLine("(6) To Create ASynchoronously");
Console.WriteLine("(7) To Delete Synchoronously");
Console.WriteLine("(8) To Delete ASynchoronously");
Console.WriteLine("(9) To Modify Synchoronously");
Console.WriteLine("(10) To Modify ASynchoronously");
Console.WriteLine("(11) To Query Synchoronously");
Console.WriteLine("(12) To Query ASynchoronously");
Console.WriteLine("(13) To Association Synchoronously");
Console.WriteLine("(14) To Association ASynchoronously");
Console.WriteLine("(15) To Invoke Method Synchoronously");
Console.WriteLine("(16) To Invoke Method ASynchoronously");
Console.WriteLine("(17) To Subscribe Synchoronously");
Console.WriteLine("(18) To Subscribe ASynchoronously");
if (!isFirst)
{
Console.WriteLine("(50) To Change ComputerName");
Console.WriteLine("(100) To Change Namespace");
}
Console.Write("Input > ");
string inputValue = Console.ReadLine();
uint result;
if (UInt32.TryParse(inputValue, out result) == false || IsCorrectChoice(result, isFirst) == false)
{
Console.WriteLine("Invalid Selection. Please try again");
return GetCurrentOption(isFirst);
}
else
{
return (CurrentOperation)result;
}
}
#endregion Helpers
}
}