Бесплатный, Быстрый, Легкий И Простой Способ Получить Информацию О Системе Со Многих Компьютеров В Сети.

В работе любого ИТ-специалиста бывают случаи, когда необходимо получить информацию о системе.

Иногда требуется собрать один или несколько параметров системы со многих рабочих станций и быстро их обработать.

Чем быстрее будет получена информация, тем, конечно, лучше.

В этой статье я хотел бы представить модуль powershell, с помощью которого можно быстро получить практически любую информацию о системе.

Например: мне удалось собрать информацию о размере оперативной памяти с нескольких сотен рабочих станций всего за двадцать с небольшим секунд! В Интернете можно найти большое количество powershell-скриптов, получающих ту или иную информацию о системе.

Как правило, это небольшие скрипты или функции, использующие wmi. На одной рабочей станции они прекрасно выполняют свою задачу, но если компьютеров много, то возникают проблемы.

Главный недостаток – сбор информации происходит синхронно; сценарий не перейдет на следующий компьютер, пока не отработает на текущем.

В результате, чтобы получить информацию от всего парка ПК, в лучшем случае можно ждать очень долго, а в худшем — сценарий может зависнуть и так и не завершиться.

Мне хотелось сделать какой-то универсальный инструмент. лишен вышеперечисленных недостатков.

Для удобства использования был написан модуль powershell, который на данный момент содержит одну функцию Get-Systeminfo. Сегодня функция позволяет получить много различной информации о системе.

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

Информация для скачивания и установки Если у вас PowerShell версии 5 или выше, вы можете установить модуль, выполнив команду

   

Install-Module -Name Systeminfo -Scope CurrentUser

Для других версий ссылка на Гитхаб

Ключевые функциональные особенности

  • Многопоточность
  • Вы можете использовать протоколы DCOM и WSMAN для подключения к удаленному компьютеру.

  • Работа с конвейером (например, в домене можно запросить список компьютеров с помощью командлета Get-Adcomputer с параметром -filter*, передав через конвейер результат его выполнения Get-Systeminfo, мы будем получать информацию от всех компьютеры в домене)
  • Легкая масштабируемость
Я не буду вдаваться в технические аспекты работы модуля.

Вместо этого я постараюсь доходчиво объяснить, как им пользоваться и как можно расширить функционал.



Как использовать функцию Get-SystemInfo

Работая с командлетом Get-Adcomputer, я заметил параметр Properties. Это позволило расширить стандартный вывод команды свойствами, перечисленными после него.

Именно эта концепция была взята за основу.

Например, чтобы запросить информацию о модели процессора и оперативной памяти, после параметра Properties нам необходимо через запятую перечислить свойства, которые мы хотим увидеть в результате выполнения.

Пример работы

Бесплатный, быстрый, легкий и простой способ получить информацию о системе со многих компьютеров в сети.
</p><p>

Параметры переключателя используются для группировки свойств.

Вы можете использовать несколько параметров переключателя и параметр Properties вместе.

Пример работы

Бесплатный, быстрый, легкий и простой способ получить информацию о системе со многих компьютеров в сети.
</p><p>



Бесплатный, быстрый, легкий и простой способ получить информацию о системе со многих компьютеров в сети.
</p><p>

Во время работы функции создаются две глобальные переменные $Result и $ErrorResult. В первом находятся компьютеры, с которых можно было получить информацию.

Во второй содержатся компьютеры, на которых произошли ошибки.

Эти переменные удобно использовать после завершения функции.

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

Более подробную информацию и примеры можно получить, выполнив команду Get-Help Get-Systeminfo -Examples после установки модуля.



Конфигурационный файл

Функция Get-Systeminfo имеет файл конфигурации, расположенный в папке config. Это скрипт PowerShell, содержащий основные настройки.

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

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

Основные переменные в файле.

$Defaultinfoconfig определяет, какая информация будет получена при запуске функции без каких-либо параметров.

Добавляя или удаляя свойства из массива, вы можете настроить, какая информация будет извлекаться.

$Functionconfig содержит хеш-таблицу.

Где ключ — это свойство, которое будет указано в параметре Properties, а значение — это строка в стиле параметров PowerShell. В строке разрешены следующие параметры: Class, Query, Property, Script, FormatList. $ManualNamespace содержит хеш-таблицу, где ключом является класс, а значением — пространство имен, в котором находится класс.

Изменения в таблицу необходимо вносить, если необходимый для работы класс не принадлежит пространству имен root\cimv2. $Switchconfig содержит хеш-таблицу: ключ — это имя параметра переключателя, а значение — массив свойств.



Как расширить возможности функции

Предположим, вам нужно добавить возможность получения названия операционной системы.

Для этого потребуется 4 шага.

  1. Придумайте название, которое будет однозначно характеризовать то, что мы хотим получить.

    В данном случае назовем его OsCaption.

  2. Внесите изменения в блок функциональных параметров, отредактировав файл Systeminfo.psm1. Вам необходимо изменить [ValidateSet()] для параметра «Свойства», добавив имя, которое вы придумали на первом шаге.

  3. Измените файл конфигурации.

    Так как имя ОС можно получить через объект wmi класса Win32_OperatingSystem (свойство caption) Спойлер

    Бесплатный, быстрый, легкий и простой способ получить информацию о системе со многих компьютеров в сети.
</p><p>

    вам нужно добавить такую строку в хеш-таблицу $Functionconfig

    OsCaption='-Class Win32_OperatingSystem -Property Caption'

  4. Если powershell запущен и модуль загружен: необходимо перезапустить консоль или запустить Remove-Module Systeminfo.
Выполнив четыре простых шага, мы получили новый функционал.

Спойлер

Бесплатный, быстрый, легкий и простой способ получить информацию о системе со многих компьютеров в сети.
</p><p>

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

Иногда для получения информации необходимо обработать объекты нескольких классов.

Для этих случаев необходимо написать скрипт. Все скрипты модуля хранятся в папке Scripts. На них можно ссылаться с помощью параметра Script в хеш-таблице $functionconfig. То есть, если в предыдущем примере требовался скрипт и для его работы требовались объекты нескольких классов, то строка для хеш-таблицы приняла бы следующий вид

OsCaption='-Class Win32_OperatingSystem,Win32_ComputerSystem -Script Scriptfolder\oscaptionscript.ps1’

После параметра Class нужно указать, какие объекты класса необходимы для работы.

В скрипте они будут доступны через одноимённые переменные — в данном примере это $win32_operatingsystem и $win32_computersystem. Кроме того, во всех скриптах есть три служебные переменные: $Computername, $Protocol и $Credential. Скрипт для модуля ничем не отличается от обычного, за исключением того, что вам не нужно использовать Get-Wmiobject, поскольку объекты wmi уже доступны через соответствующую переменную.

Для протокола Dcom необходимо учитывать, что всю информацию необходимо получать через wmi. Вы не сможете использовать командлеты get-process get-services и тому подобное.

Это связано с тем, где выполняются сценарии.

В случае протокола Dcom все скрипты выполняются там, где запускается функция Get-Systeminfio. Если для подключения используется протокол Wsman, скрипты выполняются на том компьютере, с которого мы получаем информацию, поэтому ограничений нет: можно использовать любые командлеты.

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

Сейчас есть много примеров.

Модуль тестировался на второй и пятой версиях powershell, но скорее всего он будет работать и на всех остальных.

Я рекомендую использовать версию 5, так как в ней есть функция автозаполнения, которая значительно упрощает вашу работу.

Теги: #Системное администрирование #Администрирование сервера #инвентаризация #PowerShell #информация о системе

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.