Інвентаризація ПК через опитування WMI з PowerShell - Блог дядька Freemanа

Інвентаризація ПК за допомогою опитування WMI із PowerShell

Якщо Ви задалися питанням, як швидко дізнатися характеристики принаймні тих ПК, які доступні по мережі у Вашому домені, то Вам буде цікаво опис того, як це зробив я

Оскільки ми працюємо в домені Active Directory, і, швидше за все, є адміністратором його (інакше для чого нам потрібна інформація про ПК?). ми маємо доступ до будь-якого із серверів, які обслуговують роль Active Directory.

Для чого потрібно працювати з сервером?

  • по-перше, ми таким чином можемо налаштувати завдання і отримувати періодично звіти з необхідними даними будь-яким зручним способом.
  • по-друге, зручніше працювати з усіма можливостями Active Directory, не наражаючи на дані загрози витоку

Що нам потрібне для досягнення цієї мети?

Спочатку створимо будь-яку папку

У будь-якому доступному місці дисків нашого сервера з будь-яким ім'ям. У мене це була папка D:\Info. Тепер треба зробити так, щоб наш скрипт, який запускається на віддаленому комп'ютері, міг писати туди інформацію. Для цього потрібно зробити цю папку спільною. І тут важливий момент, при створенні загального ресурсу необхідно вказати його ім'я із символом $ наприкінці, наприклад, у моєму випадку це info$. Це потрібно для того, щоб користувачі цього ресурсу просто так не побачили. Щоб ніякий цікавий користувач не зайшов через мережу на список доступних ресурсів і не побачив наш службовий ресурс. Так як він повинен бути доступний на запис будь-якому користувачеві домену, то наслідки дій користувача можуть зіпсувати картину. Який ніякий захист.

Створення скрипта.

Сам скрипт не є нічого складного, один рядок, більше мені не було потрібно.

Тепер ми маємо створити новийоб'єкт GPO — групова політика, яка поширюватиметься на користувачів, які пройшли перевірку. Тепер редагуємо її та призначаємо наш скрипт на подію користувач – вхід до системи.

блог

після того, як зміни GPO застосовуються на ПК користувачів. ми спостерігатимемо створені в нашій директорії файли формату txt (для зручності зробив, можна і без розширення). в яких будуть імена користувачів, що залогінілися. Вже непогано.

Починаємо створювати наш скрипт опитування на PowerShell

Тепер сам цикл проходу

беремо прохід елементами всередині контейнера $dir, що містить наші файли.

Усередині нам і потрібно брати дані з наших файлів:

Збільшуємо наш лічильник циклу на 1, беремо ім'я ПК з імені файлу, беремо час входу з дати модифікації файлу у потрібному форматі та ім'я користувача із вмісту файлу.

Для можливості зробити просто список ПК з даними про користувача та час входу без опитування самих ПК, робимо перевірку нашого прапора. Далі всі змінні, які використовуватимемо для заповнення даними, обнуляємо. Оскільки цього не зробити, значення змінної може містити дані з попереднього опитування ПК, що для нас небажано.

Тепер найцікавіше:

опитування ПК за допомогою WMI

тут вам повна воля до застосування та інтерпретації даних, але я зробив ось як:

кладемо в змінну значення з цікавої для нас WMI секції за допомогою select-object, причому тут є тонкий момент: якщо властивість може мати кілька значень. то використання параметра -ExpandProperty дасть помилку, оскільки це означає спробу взяти саме значення у форматі рядок, а оскільки там кілька значень може бути. тобто масив, він цього зробити не зможе коректно і посвариться. У випадку, коли може бутибагато значень, наприклад, перерахування логічних дисків, краще підстрахуватися і використовувати приблизно таку конструкцію:

без параметра -ExpandProperty і потім перебрати їх за допомогою циклу

в такому випадку параметр кожного об'єкта, що цікавить нас, можна отримати через точку та його ім'я:

Основні моменти скрипту я пояснив, що решту неважко розібрати в самому скрипті.