Sdílet prostřednictvím


Přidání nových vlastností k existujícímu typu prostředku

Když správce zjišťování dat (DDM) v Configuration Manager zjistí, že váš záznam zjišťování dat (DDR) obsahuje vlastnost, která ve třídě prostředků neexistuje, přidá se vlastnost do třídy prostředků. V závislosti na datovém typu nové vlastnosti budou předchozí instance prostředku obsahovat buď nulový, nebo prázdný řetězec ("") pro hodnotu nové vlastnosti. Při aktualizaci existující třídy prostředků byste měli zadat všechny vlastnosti třídy. Nezahrnujte však sedm vlastností, které pro vás DDM vytvoří. Když DDM vytvoří novou třídu prostředků, přidá do třídy tyto další vlastnosti:

  • Resourceid

  • Název agenta

  • AgentSite

  • AgentTime

  • Name (Název)

  • Resourcetype

  • SMSAssignedSite

    Popis těchto vlastností najdete v tématu SMS_R_System. Kromě vytváření těchto vlastností vytvoří DDM instanci SMS_ResourceMap pro novou hodnotu ResourceType.

Přidání vlastností k existujícímu typu prostředku

  1. Získejte konkrétní instanci existujícího prostředku.

  2. Vytvořte novou instanci SMSResGen třídy.

  3. Vytvořte nový DDR pomocí NewDDR metody .

  4. Přidejte vlastnosti do DDR pomocí metod ADDPROP_.

  5. Zapište nový DDR do souboru pomocí DDRWrite metody .

Příklad

Následující příklad vytvoří DDR, který přidá OrganizationalUnit vlastnost do SMS_R_System třídy . Tuto vlastnost pak můžete použít k vytváření kolekcí založených na odděleních a odpovídajícím způsobem distribuovat software. Pokud vaše organizace používá službu Active Directory, můžete informace, které obsahuje, použít k naplnění OrganizationalUnit vlastnosti.

Následující příklad ukazuje klíč, název a vlastnosti GUID, které slouží k aktualizaci třídy systémových prostředků.


Sub CreateDDRToAddNewPropertiesToAnExistingResourceType()  

    ' Define variables.  
    Dim resourceID  
    Dim existingResource   
    Dim newDDR   
    Dim siteCode  
    Dim organizationalUnit  

    ' Set variables.  
    resourceID = 5  
    siteCode = "TQ1"  
    organizationalUnit = "Test OU"  

    ' Get a specific resource (client) object using the resourceID value.  
    Set existingResource = GetObject("winmgmts:root/sms/site_" & siteCode & ":SMS_R_System.ResourceID=" & resourceID & "")  

    ' Load an instance of the SMSResGen.dll.  
    Set newDDR = CreateObject("SMSResGen.SMSResGen.1")  

    ' Create a new DDR using the DDRNew method.  
    newDDR.DDRNew "System", "Department Discovery", siteCode  

    ' Add properties to the new DDR using the DDRAdd methods.  
    newDDR.DDRAddInteger "Client", existingResource.Client, ADDPROP_NONE  
    newDDR.DDRAddString "Client Version", existingResource.ClientVersion, 15, ADDPROP_NONE  
    newDDR.DDRAddStringArray "IP Addresses", existingResource.IPAddresses, 64, ADDPROP_NONE  
    newDDR.DDRAddStringArray "IP Subnets", existingResource.IPSubnets, 64, ADDPROP_NONE  
    newDDR.DDRAddString "Last Logon User Domain", existingResource.LastLogonUserDomain, 64, ADDPROP_NONE  
    newDDR.DDRAddString "Last Logon User Name", existingResource.LastLogonUserName, 255, ADDPROP_NONE  
    newDDR.DDRAddStringArray "MAC Addresses", existingResource.MACAddresses, 64, ADDPROP_KEY  
    newDDR.DDRAddString "NetBIOS Name", existingResource.NetbiosName, 64, ADDPROP_NAME  
    newDDR.DDRAddString "Operating System Name and Version", existingResource.OperatingSystemNameandVersion, 64, ADDPROP_NONE  
    newDDR.DDRAddString "Resource Domain OR Workgroup", existingResource.ResourceDomainORWorkgroup, 64, ADDPROP_NONE  
    newDDR.DDRAddStringArray "Resource Names", existingResource.ResourceNames, 128, ADDPROP_NONE  
    newDDR.DDRAddStringArray "SMS Installed Sites", existingResource.SMSInstalledSites, 3, ADDPROP_NONE  
    newDDR.DDRAddString "SMS Unique Identifier", existingResource.SMSUniqueIdentifier, 64, ADDPROP_GUID OR ADDPROP_KEY  
    newDDR.DDRAddStringArray "System Roles", existingResource.SystemRoles, 32, ADDPROP_NONE  

    ' The new property that is being added.  
    newDDR.DDRAddString "Organizational Unit", OrganizationalUnit, 64, ADDPROP_NONE  

    ' Write new DDR to file.  
    newDDR.DDRWrite "NewDDR_AddToExistingResource.DDR"  
    wscript.echo "Created new DDR."  

End Sub  


public void CreateDDRToAddNewPropertiesToAnExistingResourceType(WqlConnectionManager connection)  
{  
    try  
    {  
        // Define and set the required variables.  
        int resourceID = 5;  
        string siteCode = "TQ1";  
        string organizationalUnit = "Test OU";  

        // Get a specific resource (client) object using the resourceID value.  
        IResultObject existingResource = connection.GetInstance(@"SMS_R_SYSTEM.ResourceID='" + resourceID + "'");  

        // Create the SMSResGenClass instance.  
        SMSRSGENCTLLib.SMSResGen newDDR = new SMSRSGENCTLLib.SMSResGen();  

        // Create a new DDR using the DDRNew method.  
        newDDR.DDRNew("System", "Department Discovery", siteCode);  

        // Add properties to the new DDR using the DDRAddInteger, DDRAddString and DDRAddStringArray methods.  
        newDDR.DDRAddInteger("Client", existingResource["Client"].IntegerValue, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddString("Client Version",existingResource["ClientVersion"].StringValue, 15, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddStringArray("IP Addresses",existingResource["IPAddresses"].StringArrayValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddStringArray("IP Subnets", existingResource["IPSubnets"].StringArrayValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddString("Last Logon User Domain",existingResource["LastLogonUserDomain"].StringValue, 255, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddString("Last Logon User Name",existingResource["LastLogonUserName"].StringValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_KEY);  
        newDDR.DDRAddStringArray("MAC Addresses",existingResource["MACAddresses"].StringArrayValue, 32, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NAME);  
        newDDR.DDRAddString("NetBIOS Name",existingResource["NetbiosName"].StringValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddString("Operating System Name and Version",existingResource["OperatingSystemNameandVersion"].StringValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddStringArray("Resource Names",existingResource["ResourceNames"].StringArrayValue, 128, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddStringArray("SMS Installed Sites",existingResource["SMSInstalledSites"].StringArrayValue, 3, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  
        newDDR.DDRAddString("SMS Unique Identifier",existingResource["SMSUniqueIdentifier"].StringValue, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_GUID | SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_KEY);  
        newDDR.DDRAddStringArray("System Roles",existingResource["SystemRoles"].StringArrayValue, 32, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  

        // The new property that is being added.  
        newDDR.DDRAddString("Organizational Unit", organizationalUnit, 64, SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_ARRAY | SMSRSGENCTLLib.DDRPropertyFlagsEnum.ADDPROP_NONE);  

        // Write new DDR to file.  
        newDDR.DDRWrite("NewDDR_AddToExistingResource.DDR");  
        Console.WriteLine("Created new DDR.");  
    }  
    catch (SmsException ex)  
    {  
        Console.WriteLine("Failed to create DDR. Error: " + ex.Message);  
        throw;  
    }  
}  

Ukázková metoda nemá žádné parametry.

Kompilace kódu

Důležité

Tyto příklady jazyka VBScript a C# vyžadují smsrsgen.dll a smsrsgenctl.dll. Oba soubory jsou součástí sady SDK ke stažení Configuration Manager (ve složce Redistributables).

Soubor smsrsgenctl.dll je 32bitová knihovna DLL a musí být zaregistrovaný v systému, který bude aplikaci spouštět. Kromě toho by aplikace používající smsrsgenctl.dll měla být zkompilována jako aplikace x86.

Robustní programování

Další informace o zpracování chyb najdete v tématu Informace o chybách Configuration Manager.

Zabezpečení rozhraní .NET Framework

Další informace o zabezpečení Configuration Manager aplikací najdete v tématu Configuration Manager správa na základě rolí.