266 lines
11 KiB
C#
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
|
|
}
|
|
}
|