1. Vytvoření záznamu z Powershellu voláním Spouštěného skriptu

    Článek: AN0002476Aktualizováno:: 19.09.2022

    V tomto příkladu si ukážeme založení záznamu serveru v CMDB ObjectGears z Powershell. Možností, jak dostávat data do ObjectGears máme několik. Pro okamžité založení ze skriptu se nabízí online komunikace pomocí webových služeb, které mají různé metody pro práci s daty, nebo spuštění Skriptu uloženého v ObjectGears. Spuštění skriptu nám nabízí nejširší možnosti a využijeme ho zvláště v případech, kdy potřebujeme udělat něco zvláštního, co nám například webové služby samy o sobě neumožňují.

    PowerShell script

    V první části skriptu přiřazujeme do proměnných hodnoty, které chceme přenést do CMDB. Ve skutečnosti tyto hodnoty budeme ve skriptu zjišťovat dle vaší potřeby. Následně hodnoty vložíme do body webového požadavku, který pak odesíláme s credentialy uživatele, který skript spouští.

    [string]$ServerName = "DB09"
    [string]$ServerFQDN = "DB09.qa.int"
    [string]$ServerStatus = "Created"
    [string]$ServerContact = "qa\lee.cooper,qa\jan.smith"
    [string]$ServerManualUpdate = "T"
    [string]$ServerDescription = "Database server"
    [string]$ServerCPU = "2"
    [string]$ServerRAM = "8"
    [string]$ServerCluster = "DB-Cluster-1"
    [string]$ServerRunningOn = ""
    [string]$ServerIP = "192.101.101.103"
    [string]$OS = "W2019 Std"
    [string]$ServerWU = "3 - Production"
    [string]$ServerMachineType = "Server"
    [string]$ServerDNS = "DB09.qa.int"
    [string]$ServerEnvironment = "Production"

    $body = @{
    "ServerName" = "$ServerName"
    "ServerFQDN" = "$ServerFQDN"
    "ServerStatus" = "$ServerStatus"
    "ServerContact" = "$ServerContact"
    "ServerManualUpdate" = "$ServerManualUpdate"
    "ServerDescription" = "$ServerDescription"
    "ServerCPU" = "$ServerCPU"
    "ServerRAM" = "$ServerRAM"
    "ServerCluster" = "$ServerCluster"
    "ServerRunningOn" = "$ServerRunningOn"
    "ServerIP" = "$ServerIP"
    "OS" = "$OS"
    "ServerWU" = "$ServerWU"
    "ServerMachineType" = "$ServerMachineType"
    "DNS" = "$ServerDNS"
    "ServerEnvironment" = "$ServerEnvironment"
    }

    Invoke-WebRequest -Uri "http://localhost:85/RunScript.aspx?code=import-new-server"-UseDefaultCredential -Method POST -Body $body

    ObjectGears Script for execution

    Na straně ObjectGears musíme mít odpovídající Spouštěný skript s nastaveným oprávněním pro spuštění pro uživatele, který webový požadavek posílá (tedy ten, který spouští výše uvedený Powershell skript).

    V první části skriptu přiřadíme do proměnných hodnoty z body webového požadavku, následně založíme záznam a následně ho aktualizujeme o hodnoty Kontaktů, které jsou v násobném sloupci odkazujícím na uživatele. Na konci skriptu jsou pomocné funkce.

    /* codes */
    var clImport = 'machine';
    var clStatus = 'machine-status';
    var clStatusCol = 'name';
    var clVirtual = 'machine';
    var clVirtualCol = 'name';
    var clRunning = 'device';
    var clRunningCol = 'serial-number';
    var clOs = 'os';
    var clOsCol = 'name';
    var clMachine = 'machine-type';
    var clMachineCol = 'name';
    var clPatch = 'patch-category';
    var clPatchCol = 'name';
    var clEnvironment = 'environment';
    var clEnvironmentCol = 'code';

    /* create record */
    var cl = OGModel.ClassDefs[clImport];
    var dr = OG.DataRow.CreateNew(cl.Id);

    OG.Log.WriteVariableInfo('name', OGParameters['$f_ServerName']);

    /* fill in with data */
    dr['name'] = OGParameters['$f_ServerName'];
    dr['fqdn'] = OGParameters['$f_ServerFQDN'];
    dr['status'] = GetClassLinkValue('$f_ServerStatus', clStatus, clStatusCol);
    dr['server_contacts_x'] = OGParameters['$f_ServerContact'];
    dr['manual_update'] = ConvertToBool(OGParameters['$f_ServerManualUpdate']);
    dr['description'] = OGParameters['$f_ServerDescription'];
    dr['vcpu'] = OGParameters['$f_ServerCPU'] * 1;
    dr['vram'] = OGParameters['$f_ServerRAM'] * 1;
    dr['virtual-on'] = GetClassLinkValue('$f_ServerCluster', clVirtual, clVirtualCol);
    dr['running-on'] = GetClassLinkValue('$f_ServerRunningOn', clRunning, clRunningCol);
    dr['ip'] = OGParameters['$f_ServerIP'];
    dr['os'] = GetClassLinkValue('$f_OS', clOs, clOsCol);
    dr['machine-type'] = GetClassLinkValue('$f_ServerMachineType', clMachine, clMachineCol);
    dr['patch-category'] = GetClassLinkValue('$f_ServerWU', clPatch, clPatchCol);
    dr['dns-name'] = OGParameters['$f_DNS'];
    dr['environment'] = GetClassLinkValue('$f_ServerEnvironment', clEnvironment, clEnvironmentCol);

    OG.DataRow.SaveData(dr);

    /* add contacts */
    var contact = dr['server_contacts_x'];
    OG.Log.WriteVariableInfo('contact', contact);
    if (!OG.IsNull(contact))
    {
      var colContacts = cl.Columns['machine_contacts'];

      //delete current references to person
      var sql = OG.TextUtils.Format('delete from DataRow{0}LinkPerson where ColumnClassDefId = {1} and ReferentionId = {2}',
      colContacts.ParentId, colContacts.Id, dr.Id);
      OG.Sql.RunSql(sql);

      //parse contacts
      var contacts = contact.split(',');

      for( var i = 0; i < contacts.length; i++)
      {
        OG.Log.WriteVariableInfo('contact[' + i + ']', contacts[i]);
        //insert new contacts
        var sql = OG.TextUtils.Format('insert into DataRow{0}LinkPerson(ColumnClassDefId, ReferentionId, LinkReferentionId)        select {1}, {2}, Id from Person where Code = @personCode and Deleted is null',
        colContacts.ParentId, colContacts.Id, dr.Id);
        OG.Log.WriteVariableInfo('sql', sql);

        var pars = OG.Sql.CreateParameterList();
        pars.AddNvarchar('personCode', contacts[i]);

        OG.Sql.RunSql(null, sql, pars);
      }
    }

    function GetClassLinkValue(parameterName, clName, colName)
    {
      var value = OGParameters[parameterName];
      if (!OG.IsNull(value))
      {
        var dr1 = OG.DataRow.GetDataRowByCode(null, OGModel.ClassDefs[clName], value, colName);
        if ( dr1 != null)
        {
          return dr1.Id;
        }
      }
      return null;
    }

    function ConvertToBool(value)
    {
      if (value == 'T') return true;
      else if (value == 'F') return false;
      return null;
    }

    Založený záznam pak vypadá takto.

×