|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Мониторы, выбрать нужное значение. |
|
|
PowerShell - [решено] Мониторы, выбрать нужное значение.
|
Старожил Сообщения: 211 |
Профиль | Отправить PM | Цитировать Всем доброго времени суток! Требуется получить информацию о модели\сн мониторов. Команды найдены и хорошо отрабатывают, но когда в конфигурации пк больше одного монитора, то отображается две, три модели\сн монитора в одну строку:
Я написал костыль, который раскидывает на две переменные, но понимаю, что это не так должно работать
$mn = gwmi wmimonitorid -Namespace root\wmi $mmod1 = ([char[]]($mn.UserFriendlyName)-join "")[0..12];$mmod2 = ([char[]]($mn.UserFriendlyName)-join "")[13..26];$msn1 = ([char[]]($mn.SerialNumberID)-join "")[0..15];$msn2 = ([char[]]($mn.SerialNumberID)-join "")[16..32] ([System.Text.Encoding]::ASCII.GetString($wmiMonitorID.UserFriendlyName)).Replace("$([char]0x000)","") |
|
Отправлено: 16:37, 09-02-2021 |
fascinating rhythm Сообщения: 6619
|
Профиль | Отправить PM | Цитировать $monitors = Get-WmiObject WmiMonitorID -Namespace root\wmi $result = foreach ($monitor in $monitors) { $manufacturer = ($monitor.ManufacturerName -notmatch 0 |% {[char]$_}) -join "" $name = ($monitor.UserFriendlyName -notmatch 0 |% {[char]$_}) -join "" $serial = ($monitor.SerialNumberID -notmatch 0 |% {[char]$_}) -join "" "$Manufacturer,$Name,$Serial" |ConvertFrom-Csv -Header manufacturer,name,serial } $result.manufacturer[1] $result.name[0] |
------- Последний раз редактировалось DJ Mogarych, 09-02-2021 в 17:05. Отправлено: 16:59, 09-02-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Как достать нужное я уже описал выше. Но вас не понял, как все таки из строки с двумя моделями мониторов достать только первую модель или вторую. Ваш код отрабатывает так:
PS D:\PowerShell\pc_info> $monitors = Get-WmiObject WmiMonitorID -Namespace root\wmi $result = foreach ($monitor in $monitors) { $manufacturer = ($monitor.ManufacturerName -notmatch 0 |% {[char]$_}) -join "" $name = ($monitor.UserFriendlyName -notmatch 0 |% {[char]$_}) -join "" $serial = ($monitor.SerialNumberID -notmatch 0 |% {[char]$_}) -join "" "$Manufacturer,$Name,$Serial" |ConvertFrom-Csv -Header manufacturer,name,serial } $result.manufacturer[1] $result.name[0] GSM H E31 Цитата DJ Mogarych:
|
|
Отправлено: 17:43, 09-02-2021 | #3 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Почитал по вашей ссылке, у них проблема другая. У меня все получается достать, просто не могу правильно форматировать. Есть пк, у него два монитора, команда обычно отрабатывает и выдает обе модели в одну строку. Мне нужно записать обе модели в разные переменные, для дальнейшей обработки. Фактически я уже добился этого таким кодом:
Но думал есть более красивые решения, для разделения строки на разные переменные.
|
Последний раз редактировалось Griboed0ff, 09-02-2021 в 18:12. Отправлено: 18:06, 09-02-2021 | #4 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
$monitors = Get-WmiObject wmimonitorid -Namespace root\wmi| %{[Text.Encoding]::Default.GetString( $_.UserFriendlyName)} $monitors|%{"Мониторы на $env:COMPUTERNAME`:";$i=1}{"`t$i`: $_";$i++} |
||
Отправлено: 19:00, 09-02-2021 | #5 |
fascinating rhythm Сообщения: 6619
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
------- Отправлено: 21:13, 09-02-2021 | #6 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
PS D:\PowerShell\pc_info> $monitors = Get-WmiObject WmiMonitorID -Namespace root\wmi -ComputerName "123-5445" $result = foreach ($monitor in $monitors) { #$manufacturer = ($monitor.ManufacturerName -notmatch 0 |% {[char]$_}) -join "" $name = ($monitor.UserFriendlyName -notmatch 0 |% {[char]$_}) -join "" $serial = ($monitor.SerialNumberID -notmatch 0 |% {[char]$_}) -join "" "$Name,$Serial" |ConvertFrom-Csv -Header name,serial #$Manufacturer, } $result[0] $result[1] name serial ---- ------ H E31 6CM41R76 LG IS ULLHD 610NTXRD7658 Цитата Fors1k:
|
||
Последний раз редактировалось Griboed0ff, 10-02-2021 в 07:36. Отправлено: 07:27, 10-02-2021 | #7 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать дальше уже за гранью моего понимания. Хочу встроить код в готовый скрипт модуля get-systeminfo, так как он не умеет разделять мониторы, но умеет параллелить опрос множества пк. Как я понял модуль запрашивает всю инфу wmi, а далее уже выбирает нужное. То есть команды встречающиеся в скриптах идут без команды обращения к get-wmiObject. Изначально запускается командой:
далее скрипт запускается из скрипта
содержимое скрипта MonName.ps1
if ($wmiMonitorID.UserFriendlyName -ne $null) { $dispname = $null $dispname=([System.Text.Encoding]::ASCII.GetString($wmiMonitorID.UserFriendlyName)).Replace("$([char]0x000)","") $dispname } else { "NotSupported" } ПРЕДУПРЕЖДЕНИЕ: 123-5445 Исключение при вызове "GetString" с "1" аргументами: "Массив не может быть неопределенным. Имя параметра: bytes" Статья на хабре, про модуль GET-SYSTEMINFO |
Последний раз редактировалось Griboed0ff, 10-02-2021 в 09:43. Отправлено: 09:22, 10-02-2021 | #8 |
fascinating rhythm Сообщения: 6619
|
Профиль | Отправить PM | Цитировать Griboed0ff, воспользуйтесь программой WinAudit, она поддерживает командную строку и умеет выгружать отчёты в csv, откуда потом можно достать что угодно.
Я уже ранее упоминал эту программу в другой теме, даже код приводил. |
------- Отправлено: 10:18, 10-02-2021 | #9 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 10:56, 10-02-2021 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? | Dark Ange1 | Скриптовые языки администрирования Windows | 28 | 22-06-2022 14:37 | |
Обновление БИОС - как выбрать нужное | egorus2010 | Материнские платы и память | 4 | 17-06-2021 12:15 | |
Загрузка - XP SP3. Значение «громкость» сбрасывается в среднее значение при перезагрузке. | mitkadritka | Microsoft Windows 2000/XP | 9 | 24-02-2012 20:37 | |
Wireless - [решено] Помогите выбрать нужное оборудование | Vlademort | Сетевое оборудование | 7 | 24-03-2011 12:06 | |
Нужна програма для автоматического скачивание из интернета в нужное время нужное мест | Месроп | Хочу все знать | 6 | 10-12-2009 21:19 |
|