Инвентаризация компьютеров в домене
neptun23  -    15894
Привет всем - в-общем нужно автоматизировать процесс инвентаризации компьютеров (видеокарты, жесткие диски, материнская плата) - нашел на хабре ссылку http://habrahabr.ru/post/138400/
AIDA запускается только вот так:
Сперва захожу на доменный комп под доменной учеткой Админа:
psexec \\10.x.x.x -u [имя домена]\Admin -p [пароль] cmd
Права на шаре на запуск имеются.
Потом из консоли доменного компа только запускаю AIDA:
\\[имя шары]\Audit\Aida64Extreme\aida64.exe
При этом у юзера висит в процессах эта aida под доменной учеткой админа. Еще Aida с параметрами не запускается, видимо Business Edition нужна.
Почему-то напрямую никак не хочет запускаться то есть как на хабре написано. Мне бы только эти файлы в папку получить, а там прогу на си шарпе написать и распарсить текстовые файлы и сбросить хоть в эксел проблему не составит :)
Ответов 32
  • Dotcom
    22 мая 2014

    checkcfg, OCS NG + GLPI

    0
  • igroman
    22 мая 2014

    ну тогда и не составит труда я полагаю

    стягивать все по wmi прямо через прогу которую напишешь на шарпе

    0
  • neptun23
    22 мая 2014

    навскидку данные локальной материнки и компа на си шарпе

    static void Main(string[] args)
    {
    // create management class object
    ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
    //collection to store all management objects
    ManagementObjectCollection moc = mc.GetInstances();
    if (moc.Count != 0)
    {
    foreach (ManagementObject mo in mc.GetInstances())
    {
    // display general system information
    Console.WriteLine("\nMachine Make: {0}\nMachine Model: {1}\nSystem Type: {2}\nHost Name: {3}\nLogon User Name: {4}\n",
    mo["Manufacturer"].ToString(),
    mo["Model"].ToString(),
    mo["SystemType"].ToString(),
    mo["DNSHostName"].ToString(),
    mo["UserName"].ToString());
    }
    }
    //wait for user action
    Console.ReadLine();
    Правда надо подумать как коннектиться к другим компам в домене под доменной учеткой админа да и вообще-то получить бы в коллекцию желательно все компы в домене, впереди написать надо using System.Management и ссылку на dll-ку сделать

    0
    • neptun23
      22 мая 2014

      и в итоге стал коннектиться на любой комп и получать данные :)

      namespace WMISample
      {
      public class MyQuerySample : System.Windows.Forms.Form
      {
      private System.Windows.Forms.Label userNameLabel;
      private System.Windows.Forms.TextBox userNameBox;
      private System.Windows.Forms.TextBox passwordBox;
      private System.Windows.Forms.Label passwordLabel;
      private System.Windows.Forms.Button OKButton;
      private System.Windows.Forms.Button cancelButton;

      private System.ComponentModel.Container components = null;

      public MyQuerySample()
      {
      InitializeComponent();
      }

      protected override void Dispose(bool disposing)
      {
      if (disposing)
      {
      if (components != null)
      {
      components.Dispose();
      }
      }
      base.Dispose(disposing);
      }

      private void InitializeComponent()
      {
      this.userNameLabel = new System.Windows.Forms.Label();
      this.userNameBox = new System.Windows.Forms.TextBox();
      this.passwordBox = new System.Windows.Forms.TextBox();
      this.passwordLabel = new System.Windows.Forms.Label();
      this.OKButton = new System.Windows.Forms.Button();
      this.cancelButton = new System.Windows.Forms.Button();
      this.SuspendLayout();
      //
      // userNameLabel
      //
      this.userNameLabel.Location = new System.Drawing.Point(16, 8);
      this.userNameLabel.Name = "userNameLabel";
      this.userNameLabel.Size = new System.Drawing.Size(160, 32);
      this.userNameLabel.TabIndex = 0;
      this.userNameLabel.Text =
      "Enter the user name for the remote computer:";
      //
      // userNameBox
      //
      this.userNameBox.Location = new System.Drawing.Point(160, 16);
      this.userNameBox.Name = "userNameBox";
      this.userNameBox.Size = new System.Drawing.Size(192, 20);
      this.userNameBox.TabIndex = 1;
      this.userNameBox.Text = "";
      //
      // passwordBox
      //
      this.passwordBox.Location = new System.Drawing.Point(160, 48);
      this.passwordBox.Name = "passwordBox";
      this.passwordBox.PasswordChar = '*';
      this.passwordBox.Size = new System.Drawing.Size(192, 20);
      this.passwordBox.TabIndex = 3;
      this.passwordBox.Text = "";
      //
      // passwordLabel
      //
      this.passwordLabel.Location = new System.Drawing.Point(16, 48);
      this.passwordLabel.Name = "passwordLabel";
      this.passwordLabel.Size = new System.Drawing.Size(160, 32);
      this.passwordLabel.TabIndex = 2;
      this.passwordLabel.Text =
      "Enter the password for the remote computer:";
      //
      // OKButton
      //
      this.OKButton.Location = new System.Drawing.Point(40, 88);
      this.OKButton.Name = "OKButton";
      this.OKButton.Size = new System.Drawing.Size(128, 23);
      this.OKButton.TabIndex = 4;
      this.OKButton.Text = "OK";
      this.OKButton.Click +=
      new System.EventHandler(this.OKButton_Click);
      //
      // cancelButton
      //
      this.cancelButton.DialogResult =
      System.Windows.Forms.DialogResult.Cancel;
      this.cancelButton.Location = new System.Drawing.Point(200, 88);
      this.cancelButton.Name = "cancelButton";
      this.cancelButton.Size = new System.Drawing.Size(128, 23);
      this.cancelButton.TabIndex = 5;
      this.cancelButton.Text = "Cancel";
      this.cancelButton.Click +=
      new System.EventHandler(this.cancelButton_Click);
      //
      // MyQuerySample
      //
      this.AcceptButton = this.OKButton;
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.CancelButton = this.cancelButton;
      this.ClientSize = new System.Drawing.Size(368, 130);
      this.ControlBox = false;
      this.Controls.Add(this.cancelButton);
      this.Controls.Add(this.OKButton);
      this.Controls.Add(this.passwordBox);
      this.Controls.Add(this.passwordLabel);
      this.Controls.Add(this.userNameBox);
      this.Controls.Add(this.userNameLabel);
      this.Name = "MyQuerySample";
      this.StartPosition =
      System.Windows.Forms.FormStartPosition.CenterScreen;
      this.Text = "Remote Connection";
      this.ResumeLayout(false);

      }

      [STAThread]
      static void Main()
      {
      Application.Run(new MyQuerySample());
      }

      private void OKButton_Click(object sender, System.EventArgs e)
      {
      try
      {
      ConnectionOptions connection = new ConnectionOptions();
      connection.Username = userNameBox.Text;
      connection.Password = passwordBox.Text;
      connection.Authority = "ntlmdomain:[имя домена]";

      ManagementScope scope = new ManagementScope(
      "\\\\[имя компа или айпишник]\\root\\CIMV2", connection);
      scope.Connect();

      ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
      //collection to store all management objects
      ManagementObjectCollection moc = mc.GetInstances();


      foreach (ManagementObject mo in mc.GetInstances())
      {
      // display general system information
      Console.WriteLine("\nMachine Make: {0}\nMachine Model: {1}\nSystem Type: {2}\nHost Name: {3}\nLogon User Name: {4}\n",
      mo["Manufacturer"].ToString(),
      mo["Model"].ToString(),
      mo["SystemType"].ToString(),
      mo["DNSHostName"].ToString(),
      mo["UserName"].ToString());
      }
      }
      catch { }
      }



      private void cancelButton_Click(object sender, System.EventArgs e)
      {
      Close();
      }
      }
      }

      0
      • igroman
        22 мая 2014

        отлично

        домашнее задание:
        вытащить адреса из dhcp и сдампить инфо со всех пк в хтмл файл с разделением по ip/hostname
        и пусть кому надо сами смотрят отчеты )

        0
        • neptun23
          22 мая 2014

          нашел готовое решение http://www.ianatkinson.net/computing/dhcpcsharp.htm

          правда после компиляции и при запуске под локальным админом компа - в этом месте
          DHCP_CLIENT_INFO_ARRAY rawClients =
          (DHCP_CLIENT_INFO_ARRAY)Marshal.PtrToStructure(info_array_ptr, typeof(DHCP_CLIENT_INFO_ARRAY));
          вылетает эксепшн - объект не создается, дело в том что при вызове функции из DLL dhcpsapi.dll (внутри него функция DhcpEnumSubnetClients, так вот она не возвращает указатель - вылечилось запуском через runas под доменным админом - можно сказать что, то что выделяется dhcp-шником я получаю, но там еще принтеры, разные Wi-Fi устройства имеются, их надо парсить....

          0
          • igroman
            22 мая 2014

            powershell оказывается умеет

            собирать информацию из зарегистрированных в домене компов
            может в шарпе тоже есть такая возможность ну или фреймворк какой на крайняк для работы с бд ldap

            0
  • neptun23
    23 мая 2014

    в коде неправильно было данные с локального компа отображаются

    если коннектится то надо так писать (не с того scope тяну данные в-общем):
    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_ComputerSystem");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    foreach (ManagementObject queryObj in searcher.Get())
    {
    Console.WriteLine("-------------------------------------------");
    Console.WriteLine(queryObj["Model"]);
    Console.WriteLine(queryObj["SystemType"]);
    Console.WriteLine(queryObj["UserName"]);
    Console.WriteLine(queryObj["Manufacturer"]);
    Console.WriteLine(queryObj["Name"]);
    Console.WriteLine(queryObj["Model"]);


    }
    Теперь не могу вытащить модель материнской платы (пишет просто Gigabyte или Asus - где-то запрятана в реестре удаленного компа - я так понял) - надо с реестром удаленного компа работать.

    0
  • neptun23
    23 мая 2014

    в общем я уже в реестре удаленного компа читаю данные, могу и записывать туда :)

    RegistryObject SysRegistry =
    new RegistryRemote("Admin",
    "[пароль]",
    "[имя домена]",
    "[ip адрес компа]");
    string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion";
    Console.WriteLine("Запись в реестре удаленного компа: " + registryKey);
    Console.WriteLine(SysRegistry.GetValue(baseKey.HKEY_LOCAL_MACHINE,registryKey, "CommonFilesDir",WMISample.valueType.STRING));
    вот отсюда взял код http://www.codeproject.com/Articles/18122/Howto-Almost-Everything-in-WMI-via-C-Part-Regist и прицепил классы для работы с реестром - так где же хранится в реестре модель материнской платы? гугл пока не помог :)

    0
    • neptun23
      23 мая 2014

      И нашел то что искал :)

      string registryKey = @"HARDWARE\DESCRIPTION\System\BIOS";
      Console.WriteLine("Производитель материнской платы: " + registryKey);
      Console.WriteLine(SysRegistry.GetValue(baseKey.HKEY_LOCAL_MACHINE,registryKey,"BaseBoardProduct",WMISample.valueType.STRING));
      единственное стоит ли делать отдельную прогу на шарпе - вот вопрос, кстати AIDA стала запускаться как на хабре если в реестре удаленного компа исправить или добавить в реестре
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\DisableUNCCheck' на 0x00000001

      0
      • igroman
        23 мая 2014

        тоже решение но в wmi помоему все выводило

        просто иногда в другие поля запихивались данные например в caption
        юзал какую то прогу там прописаны все классы и можно было смотреть результаты запросов
        тоже была трабла с материнками на bash
        иногда нужная инфа оказывалась вовсе в левом классе )
        з.ы. шо то ацкое походу сделал. оно умеет работать с командной строки?

        0
        • neptun23
          23 мая 2014

          Сам шарповский код который выкладывается в интернете довольно легко просматривается

          Я например про WMI ничего не знал пока igroman не подсказал.
          По хорошему прогу надо с формами, окнами делать, без строки командной.
          Тут такая проблема есть - видимо эту прогу под доменным админом придется запускать, там вот когда опрос идет dhcp-шника через runas туда уже пакеты летят, что админ доменный его опрашивает или в dll-ке (она кстати не дотнетовская, там через неуправляемый код сделано) функцию искать чтобы логин и пароль вписать. Пока вообще сырая программа, только коннектится до компа которую в проге впишешь и в реестре вытаскивает наименование материнки. По dhcp-шнику (это хорошо что ip-шники только те кто lease получил от него, а не с DNS-а берется) надо так сделать - тот код на который ссылка надо классом оформить и через WMI сделать опрос переменной окружения %COMPUTERNAME%, чтобы удалить устройства которые не компы. Если кому интересно могу закинуть проект на майл - юзаю C# 2010 EXPRESS версию не нарушая так сказать лицензию Microsoft-а :)

          0
          • igroman
            23 мая 2014

            админам будет интереснее приложение

            которое работает с командной строки (гуи можно отдельно сделать чтоб при нажатии на кнопочку вызвалась консольная программа с нужными ключами далее парсить результат) поскольку такую программу легче автоматизировать.
            например то что выводится в stdout можно будет записать в файл и генерить хтмл который можно будет скармливать веб-серверу да и такую прогу можно установить как сервис если душе угодно или прописать в планировщик задач с запуском от имени конкретного пользователя (пусть даже админ).
            тогда все заинтересованные лица смогут самостоятельно следить за парком компов (например бухгалтерам обычно нужно бывает инвентаризация мол а не угнал ли кто железо).

            0
  • neptun23
    23 мая 2014

    Не знаю уже что делать то ли допиливать программу с командной строки или с формами уже без разницы

    Какие ключи у AID-ы чтобы отчет получить никто не знает?
    Business Edition скажем триальная версия 4.30.2907 Beta
    Там есть оказывается подключение к удаленному компьютеру, но нет коннекта то ли порты закрыты, то ли еще что-то, в-общем надо через psexec доделать попробовать.
    Делаю так в командной строке
    Start \\10.x.x.x\[имя шары]\aida64.exe /R \\10.x.x.x\[имя шары]\%COMPUTERNAME% /TEXT/CUSTOM \\10.x.x.x\[имя шары]\aida64.rpf
    внутри файла rpf прописал как на хабре
    и выходит окошко Аудит-менеджер - AIDA64 и все тишина - никакого отчета на шаре.Буду еще гуглить конечно.

    0
    • igroman
      23 мая 2014

      не думаю что ради инвентаризации

      кто то станет покупать айду

      0
      • neptun23
        24 мая 2014

        окаца сам протупил - аида заработала и отчеты полетели на шару

        надо так делать
        start \\10.x.x.x\[имя шары]\aida64.exe /R \\10.x.x.x\[имя шары]\Audit\%COMPUTERNAME% /TEXT /CUSTOM \\10.x.x.x\[имя шары]\aida64.rpf
        сейчас через групповую политику сунуть в sysvol батник и делов :), только вот psexec иногда не с первого раза заходит на чужую консоль, ну да вручную буду теперь - компов то не так много все ж лучше чем ногами ходить аиду ставить.
        Можно было на c++ wmi делать (так то удавалось делать небольшие поделия на нем и на ассемблере даже - но напрягает его неуправляемость - надо за всем следить, все удалять вовремя эксепшены эти частые), но шарп по моще не должен уступать ему, спасибо igroman-у за совет.

        0
  • neptun23
    26 мая 2014

    в-общем опять рано радовался - с утра пришел - токо два отчета на шаре

    В-общем проблема с той записью в реестре удаленного компа - те классы которые выложены в интернете работают только со строковыми данными в реестре DWORD значения только читают, не записывают - опять допиливать надо тот код - уже лень разбираться с ним, значит теперь на Powershell-е делаю так из пример дернул отсюда: http://sergeyvasin.wordpress.com/2011/11/12/powershell-stdregprov/
    1. Захожу в повершел из под доменного админа
    2. Ввожу вот так
    PS C:\Windows\system32> $srp= [wmiclass]"\\10.x.x.x\root\default:StdRegProv"
    PS C:\Windows\system32> $hklm=2147483650
    PS C:\Windows\system32> $srp.SetDWORDValue($hklm,"SOFTWARE\Microsoft\Command Processor","DisableUNCCheck",1)
    3. И после этого тока захожу через psexec на доменый комп и оттуда запускаю батник - после энтого только отчет прилетает на шару :)
    Вопрос - как этот повершелл автоматизировать через батник, чтобы имя компа или его айпишник (%COMPUTERNAME писать?) вписывать в команду повершела, да и вообще как он будет запускаться из под доменного юзера?

    0
    • igroman
      26 мая 2014

      зачем батник у тя же есть ldap

      вот пример работы на powershell:
      http://habrahabr.ru/post/124386/
      писанины много но зато никаких батников и других костылей

      0
    • andre
      26 мая 2014

      Вот здесь инвентаризация. Сделано на vbscript, но можно переделать под любой ООП:

      http://files.mail.ru/5951C6A6F66E4BFD8CAF1E4C77510F19

      У меня одноранговая сетка, переделывал эти скрипты, вполне работает. Можешь папку положить на расшару и запускать скрипт с каждого компа, все данные соберутся в одну кучу.

      0
  • neptun23
    26 мая 2014

    Спасибо конечно за ссылку, но у меня AD на 2003 серваках (2 КД)

    Пока придется ограничиться своими костылями - сейчас два окна открыты в одном повершелл в другом psexec, хорошо хоть кнопками вверх-вниз можно из кеша выбирать команды, vbscript посмотрю на досуге :)

    0
    • andre
      26 мая 2014

      Ты меня не понял.

      Мне пришлось переделывать скрипт под свои нужды из-за того, что сеть одноранговая, плюс я решил еще кое что добавить, а так он работает именно в доменных сетях.

      Цитата:
      Вариант 2 — для сетевых рабочих станций

      Скрипт может работать в «тихом» режиме, т.е. не выводить диалоги, собирать данные о локальном компьютере и сохранять отчет на заранее определенный сетевой ресурс. Таким образом возможен автоматический запуск на всех рабочих станциях сети, например при их включении. Для этого варианта запуска лучше создать и использовать отдельную копию файла.

      Сначала необходимо выделить сетевой ресурс для сохранения отчетов и дать разрешение на запись пользователю (или группе пользователей), от имени которого будет запускаться скрипт.

      Настройки в самом скрипте такие:

      Const SILENT = TRUE 'режим отчета о локальном компьютере, без вывода диалогов
      Const DATA_DIR = "\\SRV\Invent\comp\" 'сетевой ресурс + "\" в конце

      Затем следует настроить запуск скрипта через logon-скрипт или групповую политику. Необходимо учитывать, что для обращения к компоненту WMI нужны права администратора — поэтому в групповой политике лучше включать скрипт в конфигурацию компьютера, а не пользователя.


      Вот ссылка на сайт автора:

      http://zheleznov.info/invent_comp.htm

      0
      • neptun23
        26 мая 2014

        Хорошая ссылка, интересно на 7-ках нормально будет отрабатывать?

        Отчетов надергал хоть и вручную, но до некоторых компов почему-то не достучаться, скрипт хороший - кошерно все так расписано оказывается, буду пробывать :)

        0
        • andre
          26 мая 2014

          Ну vbscript на 7-ке ничем не отличается от других виндей, где он есть.

          Проблемы могут быть с WMI, эта штука развивается от винды к винде, но тем vbscript и хорош, что все можно ручками подправить.

          0
        • neptun23
          27 мая 2014

          Слушай - спасибо за прогу! - то что надо - сейчас только оценил ее :)

          На ходу прямо можно отчеты делать без скриптов загрузки, до компов, до которых не мог достучаться поправил в шаблонах групповых политик и все пошло:
          Computer Configuration\Administrative Templates\Network\NetworkConnections\Windows Firewall\Domain Profile\Windows Firewall: Allow inbound remote administration exception (разрешить внешнее удаленное администрирование)
          А то вообще каким-то бредом походу занимался :)

          0
          • andre
            27 мая 2014

            Всегда пожалуйста.

            0
  • moonlevel
    27 мая 2014

    http://www.softinventive.com/products/total-network-inventory/

    эта еще круче, триал на 60 дней)

    0
    • neptun23
      2 июня 2014

      Опрос dhcp-шника (Server 2008)

      Решил поднять ветку из пепла, чтобы не флудить :)
      Опрос dhcp-шника (дамп по имени и айпи компов, с ключами) как спрашивал igroman
      (поделие выходного дня ) - решил все правильно, по-чесноку, так сказать сделать
      (без всякого маршаллирования как на шарпе ) на двухплюсовом.
      В-общем дальше под катом код идет, меня интересует будет ли работать на 2008 dhcp-сервере?
      У меня вроде как пашет на 2003.
      Админы, пожалуйста скомпильте код и поверьте. Для этого надо открыть
      Visual Studio Express 2010 или 2008 (Visual C++), создать консольный проект (хоть как назовите)
      с созданием папки с пустым cpp файлом, потом скопипастить код ниже и скомпилить,
      потом достать из папки Debug exe-шник скинуть куда-нить в папку, запустить его через runas
      с ключами:
      имя_exeшника 192.168.0.1 192.168.0.0
      где 192.168.0.1 ip-шник dhcp, 192.168.0.0 сеть
      и должон распечатать дамп аренды dhcp
      ------------------------------------------------------------------------------------------------
      Вопрос - работает на 2008?
      ------------------------------------------------------------------------------------------------
      #include "stdafx.h"
      #include <windows.h>
      #include <dhcpsapi.h>
      #include <stdio.h>
      #include <iostream>
      #include <atlbase.h>
      #pragma comment(lib, "ws2_32.lib")
      #pragma comment(lib, "Dhcpsapi.lib")
      using namespace std;
      int main(int argc, const char* argv[])
      {void split(char*[],char*,char);
      const wchar_t *GetWC(const char *);
      LPSTR AddressDot(DWORD);
      DWORD dwCount = 0;
      DHCP_RESUME_HANDLE resHandle;
      DWORD response = 0;
      LPDHCP_CLIENT_INFO_ARRAY clientInfoArray;
      DWORD clientRead=0;
      DWORD totalClients=0;
      DWORD ip_address;
      if(argc<3)
      {
      printf("VVedite IP DHCP servera i seti \n");
      printf("Naprimer tak: imya_progi.exe 192.168.0.1 192.168.0.0 \n");
      ExitProcess(0);
      }

      char* ip[3];
      for (int i=0;i<3;i++)
           ip[i]=new char(30);
      split(ip,(char*)(argv[2]),'.');
      printf("VVedite IP DHCP servera i seti \n");

      long int a=atoi(ip[0])*256*256*256+atoi(ip[1])*256*256+atoi(ip[2])*256;
      const WCHAR* pp=GetWC(argv[1]);
      response = DhcpEnumSubnetClients(pp, DWORD(a), &resHandle,
      65536, &clientInfoArray, &clientRead, &totalClients);
      cout<<"V arende vsego nahoditsya: "<<totalClients<<" Clientov"<<endl;
      cout<<"---------------------------------------------"<<endl;
      for(int i=0;i<(int)clientInfoArray->NumElements;i++)
      {
          wprintf(L"Imya ustroystva=%s\n", clientInfoArray->Clients[i]->ClientName);
          wprintf(L"Opisanie=%s\n",clientInfoArray->Clients[i]->ClientComment);
          ip_address=clientInfoArray->Clients[i]->ClientIpAddress;
          cout<<LPSTR(AddressDot(ip_address))<<endl;
          cout<<"---------------------------------------------"<<endl;
           }

      getchar();
      ExitProcess(0);
      }
      void split(char*ip_separate[],char* buf,char separ)
      {int k=0;
      int i=0;
      for (int j=0;j<3;j++)
      {while(*buf!=separ)
      {ip_separate[j][i++]=*buf++;}
      ip_separate[j][i++]='\0';
      *buf++;
      i=0;
      }
      }

      LPSTR AddressDot(DWORD IP_address)
      {DWORD NetIpAddr;
      NetIpAddr=htonl(IP_address);
      return(inet_ntoa(*(struct in_addr*)&NetIpAddr));
      }

      const wchar_t *GetWC(const char *c)
      { const size_t cSize = strlen(c)+1;
      wchar_t* wc = new wchar_t[cSize];
      mbstowcs(wc, c, cSize);
      return wc;
      }
      ----------------------------------------------------------------------

      0
  • igroman
    8 июля 2014

    у меня как то так получилось

    http://temp.ykt.ru/1356157434/invent.ps1.html
    не проверено ведение логов

    0
    • neptun23
      11 июля 2014

      извиняюсь за тупость :)

      А это что за язык? (кроме си шарпа и ++) ничего не пробовал еще.

      0
  • Алексей
    26 мая 2017

    Могу посоветовать простую и очень удобную программу "Инвентаризация компьютеров по сети".
    Функционал у неё не такой навороченный, как у других, но зато всё, что нужно в большинстве случаев, она делает очень быстро и наглядно. Как говорится ничего лишнего.
    Программа кроме инвентаризации "железа" так же собирает данные о расшаренных папках, локальных администраторах и показывает текущего залогиненного пользователя.
    Вот тут можно скачать: http://sysadminsoft.ru/network-computers-inventory

    0
  • Денис
    4 августа 2019

    Перезвоните пожалуйста

    Перезвоните мне пожалуйста 8 (952) 364-04-10 Денис.

    0
Обратная связь