Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] извлечь данные о мониторах из реестра

Ответить
Настройки темы
PowerShell - [решено] извлечь данные о мониторах из реестра

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Griboed0ff
Дата: 17-09-2021
Доброго всем времени суток! Есть задача получить данные о мониторах в винде, а именно модель и серийный номер. Данные хранятся в реестре ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY") в бинарном виде. Есть батник DispEDID, который умеет считывать и переводить в читабельный вид модель и серийник. Проблема в том, что данный батник выдает данные только 1 монитора, а если их 2 или 3 то, покажет данные последнего. Мозгов переписать такой сложный батник не хватает. Подумал может эту задачу проще решить через ps, по идее надо просто снять данные, конвертировать на человеческий, отправить в .cvs

Отправлено: 12:07, 17-04-2020

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
как проводить инвентаризацию непонятно »
ножками дойти, ручками потрогать, внести в инвентарную опись, распечатать и подписаться под ней
никак иначе инвентаризация не проводится

всевозможная автоматизация - это помощь по отслеживанию изменений, а не первоисточник

Отправлено: 11:49, 19-04-2020 | #21



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

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


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


тут больше для отслеживания изменений, даже больше для истории. а то всплывают мониторы где то на складе и никто не знает откуда они взялись, а так хотя бы примерно знать где этот моник был. Если эти данные будут на 80%-90% правдивы уже хорошо. Но сразу же встретил проблему, одна модель мониторов имеет одинаковый серийник.

Отправлено: 11:55, 19-04-2020 | #22


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Griboed0ff, наклеечки, наклеечки наше всё. Ну, или — выжигатель для особо тяжёлых случаев.

Отправлено: 14:54, 19-04-2020 | #23


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Busla:
$ofs = ''
gwmi wmimonitorid -Namespace root\wmi | Select @{n='UserFriendlyName';e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n='SerialNumberID';e={[string][Char[]]$_.SerialNumberID}} »
Вставил код в скрипт, но не могу вывод настроить, точнее вообще не понимаю, что влияет на расположение ответов.
Код: Выделить весь код
Param( #powershell 
	[string]$Region
	)

$myscripname=$myInvocation.ScriptName
 if ($Region -eq "MSK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=MSK,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "MSK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=MSK,DC=tsretail,DC=ru" 
	} elseif ($Region -eq  "VLK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VLK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"		
    } elseif ($Region -eq  "SMR_TT") {
        $OU =  "OU=Workstations,OU=TT,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "SMR_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "UFA_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "UFA_S") {
        $OU = "OU=1C-servers,OU=TT,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SPB_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "SPB_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "EKT_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru" 
	} elseif ($Region -eq  "EKT_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru" 
    } elseif ($Region -eq  "VRN_TT") { 
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VRN_S") { 
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "RND_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "RND_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "NSK_TT") {
        $OU = "OU=Workstations,OU=TT,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "NSK_S") {
        $OU = "OU=Servers,OU=TT,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq "MSK_B") {
        $OU = "OU=MainOffice,OU=Computers,OU=MSK,DC=tsretail,DC=ru"
	} elseif ($Region -eq  "VLK_B") {
        $OU = "OU=Office,OU=Computers,OU=VLK,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SMR_B") {
        $OU =  "OU=Office,OU=Computers,OU=SMR,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "UFA_B") {
        $OU = "OU=Office,OU=Computers,OU=UFA,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "SPB_B") {
        $OU = "OU=Office,OU=Computers,OU=SPB,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "EKT_B") {
        $OU = "OU=Office,OU=Computers,OU=EKT,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "VRN_B") { 
        $OU = "OU=Office,OU=Computers,OU=VRN,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "RND_B") {
        $OU = "OU=Office,OU=Computers,OU=RND,OU=Regions,DC=tsretail,DC=ru"
    } elseif ($Region -eq  "NSK_B") {
        $OU = "OU=Office,OU=Computers,OU=NSK,OU=Regions,DC=tsretail,DC=ru"
 
    } Else {
	    Write-Host "Usage: powershell $myscripname <filename with SQL query> [VLK_TT|MSK_TT|SMR_TT|UFA_TT|SPB_TT|EKT_TT|VRN_TT|RND_TT|NSK_TT|VLK_B|MSK_B|SMR_B|UFA_B|SPB_B|EKT_B|VRN_B|RND_B|NSK_B]"  
	    exit
    } 

    
    #Указываем путь для выгрузки лога
    
    $logdate = $((get-date).tostring("ddMMyy HH_mm"))
    $log = "D:\bat\монитор\no_ping1.csv" #Задайте свой путь для логов
    $pcs2 = get-adcomputer -Filter {Enabled -eq 'True'} -Properties Name, whenCreated, CanonicalName, OperatingSystem, OperatingSystemServicePack, OperatingSystemVersion, LastLogonDate -SearchBase $OU | Select-Object Name, whenCreated, CanonicalName, LastLogonDate, OperatingSystem, OperatingSystemServicePack, OperatingSystemVersion
    $counter = $pcs2.count
    write-host "Прошлись по $OU. Получили $counter записей" -ForegroundColor Yellow
    "Имя ПК;OperatingSystem;доступность;результат проверки;LastLogonDate;CanonicalName;" | Out-File $log -Append -Encoding utf8
    
    ForEach ($pc in $pcs2) {
        
        
        $Res = @()
        $forLog = @()
        $name = $pc.name
        $logon = $pc.LastLogonDate.tostring("dd.MM.yyyy")
        write-host $name -ForegroundColor Green
            if ((Test-Connection -Cn $name -Count 1 -quiet -ErrorAction SilentlyContinue) -eq $False) {
                Write-host "$name;не пингуется"
                $forLog = $name+";"+$pc.OperatingSystem+";"+"не пингуется;"+";$logon"+";"+$pc.CanonicalName
                $forLog | Out-File $log -Append -Encoding utf8
            } else {
                Write-host "$name пингуется, выполняем проверку"
                $ofs = ''
                gwmi wmimonitorid -Namespace root\wmi -ComputerName $name | Select @{n=$name;e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n=' ';e={[string][Char[]]$_.SerialNumberID}} | Out-File C:\mon\3.csv -enc utf8 -Append

            }
        }
Вывод получается в столбик:
Код: Выделить весь код
D877-2                        
------        -               
HP W2072a CNC434P359
а нужно в с строку:
Код: Выделить весь код
D877-2;HP W2072a;CNC434P359;
Возможно export-csv умеет так делать?

Отправлено: 11:27, 08-05-2020 | #24


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Как думаете, если из этого скрипта убрать пинг, будет ли быстрей перебор?

Отправлено: 11:47, 08-05-2020 | #25


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Вывод в csv, просто. А про таблицы уже сказали. »
может подскажете на счет вывода?

Отправлено: 19:50, 09-05-2020 | #26


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1232
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
может подскажете на счет вывода? »
Что именно?
Откуда вообще вот эта строка:
Цитата Griboed0ff:
gwmi wmimonitorid -Namespace root\wmi -ComputerName $name | Select @{n=$name;e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n=' ';e={[string][Char[]]$_.SerialNumberID}} »
?
В исходном варианте разве так было?

-------
scio me nihil scire. Ѫ


Отправлено: 20:56, 09-05-2020 | #27


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Откуда вообще вот эта строка: »
Цитата Busla:
Лучше получать данные так:
Код:
$ofs = ''
gwmi wmimonitorid -Namespace root\wmi | Select @{n='UserFriendlyName';e={([string][Char[]]$_.UserFriendlyName).SubString(0,$_.UserFriendlyNameLength)}}, @{n='SerialNumberID';e={[string][Char[]]$_.SerialNumberID}}
а вообще скрипт на другую тему был, я просто нашел куда команду вставить.

скрипт запрашивает список пк с ou ad, пингует разок, если пингуется то выполняется команда, если нет то пишет куда там надо.

Отправлено: 21:47, 09-05-2020 | #28


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1232
Благодарности: 515

Профиль | Отправить PM | Цитировать


Griboed0ff,
так, вот и сравните то, что я выделил... именно поэтому у Вас результат совсем не тот, что ожидается...

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

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 09-05-2020 в 22:28.


Отправлено: 22:20, 09-05-2020 | #29


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Тут надо бы Вам показать, что получаете с нескольких компьютеров и что именно, необходимо получить... »
Скрытый текст
Код: Выделить весь код
KHB-BUH-04                    
----------    -               
HP W2072a CNC302Q39F



VLK-AHO-04                    
----------    -               
HP E231 3CQ4070Y4G



KHB-IT-02                     
---------     -               
HP 2011 CNC215R5VH
HP 2011 CNC215QNNF



VLK-IT-06                     
---------     -               
HP E231 6CM42114X6
HP E231 6CM42114RY



KHB-IT-04                     
---------     -               
HP 2011 CNC215QNNC
HP E231 6CM42114X4



VLK-AHO-01                    
----------    -               
HP W2072a CNC302Q39H



KHB-DAOR-06                   
-----------   -               
SMB2230N HLOB101779
ASUS MW221C 78L80D5514



KHB-KRD-03                    
----------    -               
HP W2072a CNC241PFMX



KHB-STORE-03                  
------------  -               
HP E231 3CQ4070YB5



VLK-DUO-03                    
----------    -               
HP W2072a CNC302Q39B



VLK-OB-02                     
---------     -               
HP E231 6CM421144B



VLK-ROZN-10                   
-----------   -               
HP E231 3CQ3480R5R
а надо,
Скрытый текст
Код: Выделить весь код
VLK-ROZN-10;HP E231;6CM421144B
KHB-DAOR-06;SMB2230N;HLOB101779;HP W2072a;CNC302Q39B


это имя пк, с которого снимаются данные, модель монитора, серийник, вторая модель, второй серийник(если мониторов 2)

по идее и здесь можно через пошик 7 запараллелить для ускорения процесса

как понимаю просто надо поместить в
Код: Выделить весь код
% -parallel {...} -throttlelimit 4

Последний раз редактировалось Griboed0ff, 09-05-2020 в 23:11.


Отправлено: 22:54, 09-05-2020 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] извлечь данные о мониторах из реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как из архивного образа системы извлечь нужные данные реестра? ZurabK Microsoft Windows Vista 5 10-09-2020 12:08
Прочие БД - Восстановить или извлечь данные из Jetxxx.tmp, временного файла MS Access DB tweaxl Программирование и базы данных 2 18-06-2012 02:03
CMD/BAT - [решено] как извлечь все значения определенного ключа реестра из определенной ветки baza450 Скриптовые языки администрирования Windows 6 27-12-2011 13:41
HDD - Как извлечь данные с жёсткого диска Alla65 Накопители (SSD, HDD, USB Flash) 8 17-04-2009 18:27
MySQL - [решено] Извлечь данные одним запросом Strange_V Программирование и базы данных 4 20-02-2008 23:18




 
Переход