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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] вопрос по VideoProcessor

Новый участник


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


Конфигурация

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


Нужна помощь корректно составить полный скрипт.
Есть скрипт возвращающий значение VideoProcessor в эхе:
Код: Выделить весь код
On Error Resume Next  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController",,48)
For Each objItem in colItems
Wscript.Echo objItem.VideoProcessor
Next
Здорово! Но нужно, чтобы это значение, которое выводится, например "GeForce GTS 250", сравнивалось с другими значениями (моделей видеокарт) и если текущий VideoProcessor = VideoProcessor из массива, то вывести стандартный мессаджбокс "Match", в противном случае вывести "Don't Match". Вот.

Соответственно, массив с значениями, как его жестко захардкодить в скрипте?
Как пробежаться по нему и выполнить условие?

Отправлено: 15:00, 15-02-2013

 

Ветеран


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

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


Во-первых, убрать совершенно бессмысленный «On Error Resume Next». Во-вторых, зачем Вам «Don't Match»? И что вообще даёт «Match»/«Don't Match» в информативном плане без знания какой именно это «Match»/«Don't Match»?! А если два адаптера?

Впрочем:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim arrVideoProcessors
Dim strVideoProcessor

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


arrVideoProcessors = Array( _
	"GeForce GTS 250", _
	"GeForce GTS 251", _
	"GeForce GTS 252", _
	"GeForce GTS 253", _
	"GeForce GTS 254" _
)

strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_VideoController")

For Each objSWbemObjectEx In collSWbemObjectSet
	'WScript.Echo objSWbemObjectEx.VideoProcessor
	
	For Each strVideoProcessor In arrVideoProcessors
		If strVideoProcessor = objSWbemObjectEx.VideoProcessor Then
			WScript.Echo "Match"
		Else
			WScript.Echo "Don't Match"
		End If
	Next
Next

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Отправлено: 16:12, 15-02-2013 | #2



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

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


Новый участник


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

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


Спасибо за ответ, кстати, мне помогли ещё вот таким вариантом:

Код: Выделить весь код
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController",,48)
For Each objItem in colItems
        Wscript.Echo CheckVideoProcessor(objItem.VideoProcessor)
Next

Function CheckVideoProcessor(s)
        Dim all
        all = "GeForce GTS 240,GeForce GTS 250,GeForce GTS 260" 'разделитель - запятая!
        If InStr("," & all & ",", "," & s & ",") > 0 Then
                CheckVideoProcessor = "Match"
        Else
                CheckVideoProcessor = "Don't Match"
        End If
End Function
Действительно, лишнее можно убрать. Но вы совершенно верно заметили по поводу второй проблемы:"Если 2 видеоадаптера..."
В теории 3 варианта возможно:
1. Все VideoProcessor есть в массиве --> "Match"
2. Хотя бы один VideoProcessor есть в массиве --> "Match"
3. Ни одного VideoProcessor нет в массиве --> "Don't Match"
Проблема.
Как её решить... вот вопрос.

P.S.: Проверил ваш скрипт - он не корректно отрабатывает, сначала выводит "Match", нажимаем Ok - и 5 раз подряд получаем "Don't Match"

Последний раз редактировалось semen77, 15-02-2013 в 17:04. Причина: Уточнение


Отправлено: 16:45, 15-02-2013 | #3


Ветеран


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

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


Цитата semen77:
P.S.: Проверил ваш скрипт - он не корректно отрабатывает, сначала выводит "Match", нажимаем Ok - и 5 раз подряд получаем "Don't Match" »
Как было сформулировано задание — таково оказалось и решение. В предыдущем посте Вы это поняли. Выводы:
Цитата semen77:
Ни одного VideoProcessor нет в массиве --> "Don't Match" »
сделали, задачу сформулировали. Однако глубинный смысл и этого ТЗ мне по-прежнему не понятен.

Решение (в упрощённом виде):
читать дальше »
Код: Выделить весь код
Option Explicit

Dim arrVideoProcessors
Dim strVideoProcessor

Dim objSWbemObjectEx

Dim boolFound


arrVideoProcessors = Array( _
	"GeForce GTS 250", _
	"GeForce GTS 251", _
	"GeForce GTS 252", _
	"GeForce GTS 253", _
	"GeForce GTS 254" _
)

boolFound = False

For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT * FROM Win32_VideoController")
	For Each strVideoProcessor In arrVideoProcessors
		If strVideoProcessor = objSWbemObjectEx.VideoProcessor Then
			boolFound = True
			
			Exit For
		End If
	Next
	
	If boolFound Then Exit For
Next

If boolFound Then
	WScript.Echo "Match"
Else
	WScript.Echo "Don't Match"
End If

WScript.Quit 0

Отправлено: 18:44, 15-02-2013 | #4


Новый участник


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

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


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

Если все присутствуют - вывести "Match"; (ситуация, когда оба адаптера присутствуют в проверочном списке)
Если присутствует хотя бы один - вывести "Match"; (ситуация наличия разных моделей, одна из которых отсутствует в проверочном списке, а другая присутствует)
А если же таких видеоадаптеров нет совсем - вывести "Don't Match". (ситуация, когда отсутствует одна или несколько моделей в проверочном списке)

Это тест видеосистемы средствами WMI, не более.

Последний раз редактировалось semen77, 15-02-2013 в 19:05.


Отправлено: 18:56, 15-02-2013 | #5


Ветеран


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

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


semen77, ну, тогда это именно Ваш вариант. Заполняйте массив потребными наименованиями и пользуйте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:33, 16-02-2013 | #6


Новый участник


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

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


Iska, Отлично! В качестве альтернативы можно и так написать:
Код: Выделить весь код
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController",,48)
match = False 'в начале - нет совпадений
For Each objItem in colItems
        match = match Or CheckVideoProcessor(objItem.VideoProcessor)
Next
If match Then
        Wscript.Echo "Match"
Else
        Wscript.Echo "Don't Match"
End If

Function CheckVideoProcessor(s)
Dim all
all = "GeForce GTS 240,GeForce GTS 250,GeForce GTS 260" 'разделитель - запятая!
CheckVideoProcessor = InStr("," & all & ",", "," & s & ",") > 0
End Function

Отправлено: 16:22, 16-02-2013 | #7


Ветеран


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

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


Цитата semen77:
On Error Resume Next »
Ох…

Отправлено: 17:48, 16-02-2013 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 - Вопрос по программе для открытия рисунков по умолчанию flower Windows Server 2008/2008 R2 4 18-10-2010 17:22
Прочее - вопрос по загрузке образов cd/dvd дисков по сети andi_filon Общий по Linux 4 21-08-2009 14:48
Вопрос по платформам обработки данных и еще по всяким непонятным словам :) koresaram Хочу все знать 8 19-02-2009 18:26
RDP/Citrix/Term - Определение ip по имени пользователя или вопрос по программе BGinfo gavBTR Сетевые технологии 2 24-07-2008 10:02
Вопрос по работе с файлами по сети NorthWich Программное обеспечение Windows 2 29-02-2008 12:56




 
Переход