Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка в WQL-запросе, как правильно составить WQL-запрос 
:(
    Опции темы
YURETS
Дата 15.5.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



Добрый день.
Подскажите пожалуйста как в WQL-запросе указать тип сортировки.
Нужно что-то типа такого :
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product order by Caption")

Цель - получить при помощи VB-скрипта список установленного ПО в таком виде как он выглядит в установке и удалении программ.

И еще, почему при запросе класса Win32_Product выводится неполный список установленного в системе ПО а только установленного с помощью MSI-ек.


PM MAIL   Вверх
mihanik
Дата 15.5.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 61
Всего: 109



Т.е. скрипт типа того, что указан ниже, тебя не устраивает?

Код

' List Installed Software

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\scripts\software.tsv", True)

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
    ("Select * from Win32_Product")

objTextFile.WriteLine "Caption" & vbtab & _
    "Description" & vbtab & "Identifying Number" & vbtab & _
    "Install Date" & vbtab & "Install Location" & vbtab & _
    "Install State" & vbtab & "Name" & vbtab & _ 
    "Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _
        & "Version" 

For Each objSoftware in colSoftware
    objTextFile.WriteLine objSoftware.Caption & vbtab & _
    objSoftware.Description & vbtab & _
    objSoftware.IdentifyingNumber & vbtab & _
    objSoftware.InstallDate2 & vbtab & _
    objSoftware.InstallLocation & vbtab & _
    objSoftware.InstallState & vbtab & _
    objSoftware.Name & vbtab & _
    objSoftware.PackageCache & vbtab & _
    objSoftware.SKUNumber & vbtab & _
    objSoftware.Vendor & vbtab & _
    objSoftware.Version
Next
objTextFile.Close


Добавлено через 1 минуту и 46 секунд
а такой?

Код

' List All Installed Software

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes


Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "InstallDate"
strEntry3 = "VersionMajor"
strEntry4 = "VersionMinor"
strEntry5 = "EstimatedSize"

Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
WScript.Echo "Installed Applications" & VbCrLf
For Each strSubkey In arrSubkeys
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
   strEntry1a, strValue1)
  If intRet1 <> 0 Then
    objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry1b, strValue1
  End If
  If strValue1 <> "" Then
    WScript.Echo VbCrLf & "Display Name: " & strValue1
  End If
  objReg.GetStringValue HKLM, strKey & strSubkey, _
   strEntry2, strValue2
  If strValue2 <> "" Then
    WScript.Echo "Install Date: " & strValue2
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry3, intValue3
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry4, intValue4
  If intValue3 <> "" Then
     WScript.Echo "Version: " & intValue3 & "." & intValue4
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry5, intValue5
  If intValue5 <> "" Then
    WScript.Echo "Estimated Size: " & Round(intValue5/1024, 3) & " megabytes"
  End If
Next


Добавлено через 4 минуты и 34 секунды
Копай в MSDN.
Классная "вестщь"!!!

Активно пользуюсь, чего и тебе желаю...



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
YURETS
Дата 15.5.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



В этом скрипте список не отсортирован и не всё ПО.
Но опять-таки в него попадают некоторые хотфиксы и нет сортировки в алфавитном порядке.
Хотелось бы получить список как в установке и удалении.

У меня сейчас работает такой  скрипт:
Код

strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Uninstall"  
strInfo = " "
sbbkey = ""
strValue = ""
strValue2 = ""
BinarValue = 0
strValueName = "DisplayName"
strValueName2 = "DisplayVersion"
strValueName3 = "UninstallString"
strValueName4 = "SystemComponent"
strValueName5 = "ParentDisplayName"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys  
strInfo=strInfo + vbCrLf+  "Список установленного ПО Полный список !!!"  
strInfo=strInfo + vbCrLf+  "===================="  
For Each subkey In arrSubKeys
if Left(subkey,2) <> "KB"  Then
     sbbkey = strKeyPath & "\" & subkey
     intRes = oReg.GetDWORDValue(HKEY_LOCAL_MACHINE,sbbkey,strValueName4,BinarValue)
     intRes2 = oReg.GetStringValue(HKEY_LOCAL_MACHINE,sbbkey,strValueName5,strValue2)
if (intRes <> 0) and (intRes2 <> 0)  Then
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName,strValue
 if strValue <> nul then
                               strInfo=strInfo + vbCrLf + strValue
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName2,strValue
            if strValue <> nul then
                               strInfo=strInfo + "    |-=Версия-> " + strValue
            else
                               strInfo=strInfo + "    |-=Версия->None"
            end if
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName3,strValue
            if strValue <> nul then
                               strInfo=strInfo + "    |-=Строка удаления-> " + strValue
            else
                               strInfo=strInfo + "    |-=Строка удаления->None "
            end if
 else
     if BinarValue <> 1 Then
                             objTextFile.WriteLine "Системный компонент не 1 ->" & sbbkey
     end if
 end if
else
  if (intRes2 = 0) and ((strValue2 = "") or (strValue2 = "Windows XP - Software Updates"))  Then
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName,strValue
       if strValue <> nul then
                               strInfo=strInfo + vbCrLf + strValue
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName2,strValue
            if strValue <> nul then
                               strInfo=strInfo + "    |-=Версия-> " + strValue
            else
                               strInfo=strInfo + "    |-=Версия->None"
            end if
       oReg.GetStringValue HKEY_LOCAL_MACHINE,sbbkey,strValueName3,strValue
            if strValue <> nul then
                               strInfo=strInfo + "    |-=Строка удаления-> " + strValue
            else
                               strInfo=strInfo + "    |-=Строка удаления->None "
            end if
       else
                     if BinarValue <> 1 Then
                             objTextFile.WriteLine "Системный компонент не 1 ->" & sbbkey
                     end if
      end if
  end if
end if
end if
Next  

PM MAIL   Вверх
redman1986
Дата 16.5.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.3.2008

Репутация: нет
Всего: нет



если почитать MSDN то там написано что класс Win32_Product дает только ПО установленное с использованием установщика WindowsInstaller... большего из этого класса невыжать (по работе сталкивался с такой проблемой ).... выход только в одном лезть в реестр, как советует mihanik. и делать алгоритм нужной работы...  я так и делал....
PM MAIL   Вверх
YURETS
Дата 22.5.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.5.2008

Репутация: нет
Всего: нет



А есть ли в VBS какие-нибудь стандартные алгоритмы сортировки массивов ?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.