次の方法で共有


リスト、作成、変更、削除の簡単な例

次の例では、 SMS_Package クラスを使用して、SMS プロバイダーを使用した List、Create、Modify、Delete の各操作を示す、非常に基本的なメソッドのセットを示します。 これは、基本的なConfiguration Manager プログラムの構造を見てみましょう。特定のタスクを実行する SDK の他の領域には、より便利なメソッド スニペットがあります。

重要

コード例を簡略化するために、追加の情報 (既存のパッケージ識別子) が必要であるため、一部のメソッドはコメントアウトされます。 ModifyPackage メソッドと DeletePackage メソッドで使用するパッケージ識別子を取得するには、ListPackages メソッドを使用します。

パッケージを一覧表示するには

  1. SMS プロバイダーへの接続を設定します。

  2. クエリを実行します。このクエリでは、 SMS_Package クラス インスタンスのコレクションを変数に設定します。

  3. コレクションを列挙し、クエリによって返されるパッケージを一覧表示します。

パッケージを作成するには

  1. SMS プロバイダーへの接続を設定します。

  2. SMS_Package クラスを使用して、新しいパッケージ オブジェクトを作成します。

  3. 新しいパッケージ プロパティを設定します。

  4. パッケージを保存します。

パッケージを変更するには

  1. SMS プロバイダーへの接続を設定します。

  2. SMS_Package クラスを使用して、既存のパッケージ オブジェクトを読み込みます。

  3. パッケージ プロパティを変更します。

  4. パッケージを保存します。

パッケージを削除するには

  1. SMS プロバイダーへの接続を設定します。

  2. SMS_Package クラスを使用して、既存のパッケージ オブジェクトを読み込みます。

  3. delete メソッドを使用してパッケージを削除します。

次のメソッド例は、SMS プロバイダーを使用して List、Create、Modify、Delete の各操作を示すために、 SMS_Package クラスを使用した非常に基本的なメソッドのセットを示しています。

サンプル コードの呼び出しについては、「Configuration Manager コード スニペットの呼び出し」を参照してください。

注:

次の例では、呼び出し元のコードをコードに埋め込みます。 SDK の他のほとんどの例では、パラメーターを持つメソッドを示すだけです。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// Added the below Configuration Manager DLL references to support basic SMS Provider operations:
//    C:\Program Files (x86)\Microsoft Endpoint Manager\AdminConsole\bin\Microsoft.ConfigurationManagement.ManagementProvider.dll
//    C:\Program Files (x86)\Microsoft Endpoint Manager\AdminConsole\bin\AdminUI.WqlQueryEngine.dll
// Added the below Configuration Manager namespaces to support basic SMS Provider operations:
      using Microsoft.ConfigurationManagement.ManagementProvider;
      using Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine;

//
// A set of very basic methods using the SMS_Package class to demonstrate List, Create, Modify and Delete operations using the SMS Provider.
//
// Note: To simplify the code example, some methods are commented out, as they need additional information (an existing package identifier).
// Use the ListPackages method to obtain the package identifier for use with the ModifyPackage and DeletePackage methods.
//
namespace BasicApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Setup Objects
            SnippetClass BasicCMAppSnippets = new SnippetClass();

            // Setup a connection to the SMS Provider.
            // Passing in <server name>, <domain\\account>, <password>.
            WqlConnectionManager WMIConnection = BasicCMAppSnippets.Connect("CMLABSERVER", "CMLABSERVER\\cmlabuser", "password");

            // List all packages (instances of SMS_Package).
            BasicCMAppSnippets.ListPackages(WMIConnection);

            // Create a new package.
            // Note: This is not a useful package (too few properties), just a demonstration of creating a Configuration Manager object.
            BasicCMAppSnippets.CreatePackage(WMIConnection, "New Package", "This is the new package.");

            // Modifies a specific package (instance of SMS_Package).
            // A valid PackageID needs to be passed to the ModifyPackage method - replace "ABC00000".
            //BasicCMAppSnippets.ModifyPackage(WMIConnection, "ABC00000");

            // Deletes a specific package (instance of SMS_Package).
            // A valid PackageID needs to be passed to the DeletePackage method - replace "ABC00000".
            //BasicCMAppSnippets.DeletePackage(WMIConnection, "ABC00000");

            // Delay to keep the console output visible.
            Console.ReadLine();
        }
    }

    class SnippetClass
    {
        public WqlConnectionManager Connect(string serverName, string userName, string userPassword)
        {
            try
            {
                SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
                WqlConnectionManager connection = new WqlConnectionManager(namedValues);
                if (System.Net.Dns.GetHostName().ToUpper() == serverName.ToUpper())
                {
                    connection.Connect(serverName);
                }
                else
                {
                    connection.Connect(serverName, userName, userPassword);
                }
                return connection;
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Failed to connect. Error: " + ex.Message);
                return null;

            }
            catch (UnauthorizedAccessException ex)
            {
                Console.WriteLine("Failed to authenticate. Error:" + ex.Message);
                throw;
            }
        }

        public void ListPackages(WqlConnectionManager connection)
        {
            try
            {
                // This query selects all packages (instances of SMS_Package).
                string query = "SELECT * FROM SMS_Package";

                // Run query, which populates 'listOfPackages' with a collection of package objects.
                IResultObject listOfPackages = connection.QueryProcessor.ExecuteQuery(query);

                // Output header for list of distribution points.
                Console.WriteLine(" ");
                Console.WriteLine("List of packages:  ");
                Console.WriteLine("-------------------");

                // Enumerate through the collection of objects returned by the query.
                foreach (IResultObject package in listOfPackages)
                {
                    // Output the package name for each package object.
                    Console.WriteLine("Package ID: {0} Package Name: {1}", package["PackageID"].StringValue, package["Name"].StringValue);
                }
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Failed to list packages. Error: " + ex.Message);
                throw;
            }
        }

        public void CreatePackage(WqlConnectionManager connection, string newPackageName, string newPackageDescription)
        {
            try
            {
                // Create new package object.
                IResultObject newPackage = connection.CreateInstance("SMS_Package");

                // Populate new package properties.
                newPackage["Name"].StringValue = newPackageName;
                newPackage["Description"].StringValue = newPackageDescription;

                // Save the new package and the new package properties.
                newPackage.Put();
                // The key value 'PackageID' is created on the put, so getting the package object to output the unique 'PackageID' ('Name' is not guaranteed to be unique).
                newPackage.Get();

                // Output new package name.
                Console.WriteLine("Created Package ID: {0} Package Name: {1}", newPackage["PackageID"].StringValue, newPackage["Name"].StringValue);
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Failed to create package. Error: " + ex.Message);
                throw;
            }
        }

        public void ModifyPackage(WqlConnectionManager connection, string existingPackageID)
        {
            try
            {
                // Get the specific package instance to modify (PackageID is a key value).
                IResultObject packageToModify = connection.GetInstance(@"SMS_Package.PackageID='" + existingPackageID + "'");

                // Modify a package properties (in this case description).
                packageToModify["Description"].StringValue = "This package has been modified. " + packageToModify["Description"].StringValue;

                // Save the new package and the new package properties.
                packageToModify.Put();
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Failed to delete package. Error: " + ex.Message);
                throw;
            }
        }

        public void DeletePackage(WqlConnectionManager connection, string existingPackageID)
        {
            try
            {
                // Get the specific package instance to delete (PackageID is a key value).
                IResultObject packageToDelete = connection.GetInstance(@"SMS_Package.PackageID='" + existingPackageID + "'");

                // Output package ID and name being deleted.
                Console.WriteLine("Deleting Package ID: {0} Package Name: {1}", packageToDelete["PackageID"].StringValue, packageToDelete["Name"].StringValue);

                // Delete the package.
                packageToDelete.Delete();
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Failed to delete package. Error: " + ex.Message);
                throw;
            }
        }

    }
}

このメソッドの例には、次のパラメーターがあります。

パラメーター 説明
connection -管理: WqlConnectionManager SMS プロバイダーへの有効な接続。
newPackageName -管理: String 新しいパッケージの名前。
newPackageDescription -管理: String 新しいパッケージの説明。
existingPackageID -管理: String 既存のパッケージ識別子。 これは、 SMS_Package クラスのキー値であり、 SMS_Package クラスの特定のインスタンスを返すために使用されます。 上記のサンプルの ListPackages メソッドは、現在のパッケージ インスタンスの名前と Package ID を返します。

コードのコンパイル

C# の例では、次のものが必要です。

名前空間

System

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

mscorlib

堅牢なプログラミング

エラー処理の詳細については、「Configuration Manager エラーについて」を参照してください。

関連項目

サーバー WMI クラスSMS_Packageソフトウェア配布の概要