private void addCMDeviceVariable(
            int strResourceID,
            string strVariableName,
            string strVariableValue)
        {

            // Connect to CM Site
            SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
            WqlConnectionManager connection = new WqlConnectionManager(namedValues);
            connection.Connect("CM01");

            // Get the computer settings.
            IResultObject computerSettings = null;

            IResultObject computerSettingsQuery = connection.QueryProcessor.ExecuteQuery(
                "Select * from SMS_MachineSettings where ResourceId = '" + strResourceID + "'");

            foreach (IResultObject settings in computerSettingsQuery)
            {
                settings.Get();
                computerSettings = settings;
            }

            if (computerSettings == null) // It does not exist, so create it.
            {
                computerSettings = connection.CreateInstance(@"SMS_MachineSettings");
                computerSettings["ResourceID"].IntegerValue = strResourceID;
                computerSettings["SourceSite"].StringValue = "PS1";
                computerSettings.Put();
                computerSettings.Get();
            }

            // Create the computer variable.
            List<IResultObject> computerVariables = computerSettings.GetArrayItems("MachineVariables");
            IResultObject computerVariable = connection.CreateEmbeddedObjectInstance("SMS_MachineVariable");
            computerVariable["Name"].StringValue = strVariableName;
            computerVariable["Value"].StringValue = strVariableValue;
            computerVariable["IsMasked"].BooleanValue = false;

            // Add the computer variable to the computer settings.
            computerVariables.Add(computerVariable);
            computerSettings.SetArrayItems("MachineVariables", computerVariables);
            computerSettings.Put();

            
            // Close Connection
            connection.Dispose();
        }
        private int CreateDevice(string strDeviceName, string strDeviceMacadress, string strLimtitingCollectionID)
        {
            try
            {
                if (strDeviceName == null && strDeviceMacadress == null)
                {
                    throw new ArgumentNullException("DeviceName or MACAdress most be defined");
                }

                SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
                WqlConnectionManager connection = new WqlConnectionManager(namedValues);
                connection.Connect("CM01"); 

                Dictionary<string, object> newDevice2 = new Dictionary<string, object>();

                newDevice2.Add("NetbiosName", strDeviceName);
                newDevice2.Add("SMBIOSGUID", null); // For Future things
                newDevice2.Add("MACAddress", strDeviceMacadress);
                newDevice2.Add("OverwriteExistingRecord", false);

                // Create CM Device to site database
                IResultObject outParam = connection.ExecuteMethod("SMS_Site", "ImportMachineEntry", newDevice2);

                if (string.IsNullOrEmpty(strLimtitingCollectionID) == false)
                {
                    IResultObject collection = connection.GetInstance("SMS_Collection.collectionID='" + strLimtitingCollectionID + "'");
                    IResultObject collectionRule = connection.CreateEmbeddedObjectInstance("SMS_CollectionRuleDirect");
                    collectionRule["ResourceClassName"].StringValue = "SMS_R_SYSTEM";
                    collectionRule["ResourceID"].IntegerValue = outParam["ResourceID"].IntegerValue;

                    Dictionary<string, object> inParam2 = new Dictionary<string, object>();
                    inParam2.Add("collectionRule", collectionRule);

                    // Add Device to specified collection. Empty will automatcally add device to All Systems
                    collection.ExecuteMethod("AddMemberShipRule", inParam2);
                }

                return outParam["ResourceID"].IntegerValue;
            }
            catch (SmsException e)
            {
                Console.WriteLine("Failed to add the computer. " + e.Message);
                throw;
            }
        }