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

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

Ответить
Настройки темы
[решено] Задать массив и цикл

Пользователь


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

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


Добрый день!
Есть такой скрипт:
Код: Выделить весь код
$strComputer = "."
$strSoftwareName = "Java(TM) 7 Update 5"

;Start Uninstall Script
$objWMIService = ObjGet("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colSoftware = $objWMIService.ExecQuery _
("Select * from Win32_Product Where Name = '" & $strSoftwareName & "'")
For $objSoftware in $colSoftware
$objSoftware.Uninstall()
Next
Смысл скрипта: если существует программа "Java(TM) 7 Update 5" в классе Win32_Product, то запускается ее удаление.
Помогите сделать так, чтобы: переменная $strSoftwareName состояла из множества имен, т.е. была массивом (желательно поудобнения для записи, чтобы можно было менять имена или дописывать), а в цикле эти имена перебирались..

Отправлено: 10:05, 11-07-2012

 

Ветеран


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

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


Например, так (не проверялось):
Код: Выделить весь код
AutoItSetOption("MustDeclareVars", 1)

Local $aSoftwareNames[3]   = ["Java(TM) 7 Update 5", "Java(TM) 7 Update 6", "Java(TM) 7 Update 7"]
Local $sSoftwareName

Local $sComputer = "."

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $cSWbemObjectSet  = $oSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Product")
Local $oSWbemObjectEx

For $oSWbemObjectEx In $cSWbemObjectSet
	For $sSoftwareName In $aSoftwareNames
		If $sSoftwareName = $oSWbemObjectEx.Name Then
			$oSWbemObjectEx.Uninstall()
		EndIf
	Next
Next

$oSWbemObjectEx   = 0
$cSWbemObjectSet  = 0
$oSWbemServicesEx = 0
$oSWbemLocator    = 0

Exit(0)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:35, 11-07-2012 | #2



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

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


Пользователь


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

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


Ага, работает, спасибо.

Отправлено: 11:55, 11-07-2012 | #3


Пользователь


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

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


Не знаете, почему может возникать данная проблема?

"Error: The requested action with this object has failed"

Код: Выделить весь код
AutoItSetOption("MustDeclareVars", 1)

Local $aSoftwareNames[40] = [ _
"Java 2 Runtime Environment Standard Edition v1.2.2", _
"Java 2 Runtime Environment Standard Edition v1.3.1_05", _
"Java 2 Runtime Environment Standard Edition v1.3.1_17", _
"Java 2 Runtime Environment, SE v1.4.2_01", _
"Java 2 Runtime Environment, SE v1.4.2_03", _
"Java 2 Runtime Environment, SE v1.4.2_05", _
"Java 2 Runtime Environment, SE v1.4.2_06", _
"Java 2 Runtime Environment, SE v1.4.2_07", _
"Java 2 Runtime Environment, SE v1.4.2_08", _
"Java 2 Runtime Environment, SE v1.4.2_12", _
"Java 2 Runtime Environment, SE v1.4.2_13", _
"Java 2 Runtime Environment, SE v1.4.2_15", _
"Java 2 Runtime Environment, SE v1.4.2_16", _
"Java 2 Runtime Environment, SE v1.4.2_19", _
"Java Auto Updater", _
"Java(TM) 6 Update 10", _
"Java(TM) 6 Update 11", _
"Java(TM) 6 Update 13", _
"Java(TM) 6 Update 17", _
"Java(TM) 6 Update 18", _
"Java(TM) 6 Update 2", _
"Java(TM) 6 Update 20", _
"Java(TM) 6 Update 21", _
"Java(TM) 6 Update 22", _
"Java(TM) 6 Update 23", _
"Java(TM) 6 Update 24", _
"Java(TM) 6 Update 26", _
"Java(TM) 6 Update 29", _
"Java(TM) 6 Update 29 (64-bit)", _
"Java(TM) 6 Update 3", _
"Java(TM) 6 Update 30", _
"Java(TM) 6 Update 31", _
"Java(TM) 6 Update 31 (64-bit)", _
"Java(TM) 6 Update 32", _
"Java(TM) 6 Update 32 (64-bit)", _
"Java(TM) 6 Update 5", _
"Java(TM) 6 Update 7", _
"Java(TM) 7 Update 3", _
"Java(TM) 7 Update 4", _
"Java(TM) 7 Update 4 (64-bit)"]


Local $sComputer = "."
Local $sSoftwareName
Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $cSWbemObjectSet  = $oSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Product")
Local $oSWbemObjectEx

For $oSWbemObjectEx In $cSWbemObjectSet
	For $sSoftwareName In $aSoftwareNames
		If $sSoftwareName = $oSWbemObjectEx.Name Then
			$oSWbemObjectEx.Uninstall()
		EndIf
	Next
Next

$oSWbemObjectEx   = 0
$cSWbemObjectSet  = 0
$oSWbemServicesEx = 0
$oSWbemLocator    = 0

Exit(0)

Отправлено: 14:51, 11-07-2012 | #4


Ветеран


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

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


HFShak, Вы уверены, что приведённая ошибка воспроизводится именно приведённым кодом?

Попробуйте исполнить этот код на проблемной машине:
читать дальше »
Код: Выделить весь код
AutoItSetOption("MustDeclareVars", 1)

Global $oAutoItError = ObjEvent("AutoIt.Error", "ErrorHandling")

Local $aSoftwareNames[40] = [ _
	"Java 2 Runtime Environment Standard Edition v1.2.2", _
	"Java 2 Runtime Environment Standard Edition v1.3.1_05", _
	"Java 2 Runtime Environment Standard Edition v1.3.1_17", _
	"Java 2 Runtime Environment, SE v1.4.2_01", _
	"Java 2 Runtime Environment, SE v1.4.2_03", _
	"Java 2 Runtime Environment, SE v1.4.2_05", _
	"Java 2 Runtime Environment, SE v1.4.2_06", _
	"Java 2 Runtime Environment, SE v1.4.2_07", _
	"Java 2 Runtime Environment, SE v1.4.2_08", _
	"Java 2 Runtime Environment, SE v1.4.2_12", _
	"Java 2 Runtime Environment, SE v1.4.2_13", _
	"Java 2 Runtime Environment, SE v1.4.2_15", _
	"Java 2 Runtime Environment, SE v1.4.2_16", _
	"Java 2 Runtime Environment, SE v1.4.2_19", _
	"Java Auto Updater", _
	"Java(TM) 6 Update 10", _
	"Java(TM) 6 Update 11", _
	"Java(TM) 6 Update 13", _
	"Java(TM) 6 Update 17", _
	"Java(TM) 6 Update 18", _
	"Java(TM) 6 Update 2", _
	"Java(TM) 6 Update 20", _
	"Java(TM) 6 Update 21", _
	"Java(TM) 6 Update 22", _
	"Java(TM) 6 Update 23", _
	"Java(TM) 6 Update 24", _
	"Java(TM) 6 Update 26", _
	"Java(TM) 6 Update 29", _
	"Java(TM) 6 Update 29 (64-bit)", _
	"Java(TM) 6 Update 3", _
	"Java(TM) 6 Update 30", _
	"Java(TM) 6 Update 31", _
	"Java(TM) 6 Update 31 (64-bit)", _
	"Java(TM) 6 Update 32", _
	"Java(TM) 6 Update 32 (64-bit)", _
	"Java(TM) 6 Update 5", _
	"Java(TM) 6 Update 7", _
	"Java(TM) 7 Update 3", _
	"Java(TM) 7 Update 4", _
	"Java(TM) 7 Update 4 (64-bit)" _
]
Local $sSoftwareName

Local $sComputer = "."

Local $oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer($sComputer, "root\cimv2")
Local $cSWbemObjectSet  = $oSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Product")
Local $oSWbemObjectEx

For $oSWbemObjectEx In $cSWbemObjectSet
	For $sSoftwareName In $aSoftwareNames
		If $sSoftwareName = $oSWbemObjectEx.Name Then
			$oSWbemObjectEx.Uninstall()
		EndIf
	Next
Next

$oSWbemObjectEx   = 0
$cSWbemObjectSet  = 0
$oSWbemServicesEx = 0
$oSWbemLocator    = 0

Exit(0)

Func ErrorHandling()
	Local $HexNumber = Hex($oAutoItError.Number, 8)

	MsgBox(0, "", "We intercepted a COM Error !" & @CRLF & _
		"Number is: " & $HexNumber & @CRLF & _
		"Windescription is: " & $oAutoItError.WinDescription & @CRLF & _
		"Name of the Object generating the error: " & $oAutoItError.Source & @CRLF & _
		"Source Object's description: " & $oAutoItError.Description & @CRLF & _
		"The number returned from GetLastError(): " & $oAutoItError.lastDllError & @CRLF & _
		"Script Line: " & $oAutoItError.ScriptLine _
	)

   Exit(-1)
EndFunc

в неизменном виде. При появлении сообщения об ошибке нажмите в окне сообщения об ошибке «Ctrl-C» и выложите содержимое буфера обмена сюда.
Возможный примерный вид полученного
Код: Выделить весь код
---------------------------

---------------------------
We intercepted a COM Error !

Number is: 80020006

Windescription is: Неизвестное имя.



Name of the Object generating the error: 

Source Object's description: 

The number returned from GetLastError(): 0

Script Line: 58
---------------------------
ОК   
---------------------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:40, 11-07-2012 | #5


Пользователь


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

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


Добрый день!
Получился вот такой лог:

Код: Выделить весь код
---------------------------

---------------------------
We intercepted a COM Error !

Number is: 80020009

Windescription is: 

Name of the Object generating the error: SWbemObjectEx

Source Object's description: Not found 

The number returned from GetLastError(): 0

Script Line: -1
---------------------------
ОК   
---------------------------

Отправлено: 11:08, 12-07-2012 | #6


Ветеран


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

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


Спасибо, не ясно .

Озвучьте ещё версию ОС, версию Windows Installer на машине, для которой исполняется скрипт.

Отправлено: 11:35, 12-07-2012 | #7


Пользователь


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

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


Windows 7 SP1 64 bit
Установщик Windows®. Версия 5.0.7601.17514

Отправлено: 11:55, 12-07-2012 | #8


Пользователь


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

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


Дописал первоначальный свой скрипт:

Код: Выделить весь код
Local $strComputer = "."
Local $sSoftwareName
Local $aSoftwareNames[40] = [ _
"Java 2 Runtime Environment Standard Edition v1.2.2", _
"Java 2 Runtime Environment Standard Edition v1.3.1_05", _
"Java 2 Runtime Environment Standard Edition v1.3.1_17", _
"Java 2 Runtime Environment, SE v1.4.2_01", _
"Java 2 Runtime Environment, SE v1.4.2_03", _
"Java 2 Runtime Environment, SE v1.4.2_05", _
"Java 2 Runtime Environment, SE v1.4.2_06", _
"Java 2 Runtime Environment, SE v1.4.2_07", _
"Java 2 Runtime Environment, SE v1.4.2_08", _
"Java 2 Runtime Environment, SE v1.4.2_12", _
"Java 2 Runtime Environment, SE v1.4.2_13", _
"Java 2 Runtime Environment, SE v1.4.2_15", _
"Java 2 Runtime Environment, SE v1.4.2_16", _
"Java 2 Runtime Environment, SE v1.4.2_19", _
"Java Auto Updater", _
"Java(TM) 6 Update 10", _
"Java(TM) 6 Update 11", _
"Java(TM) 6 Update 13", _
"Java(TM) 6 Update 17", _
"Java(TM) 6 Update 18", _
"Java(TM) 6 Update 2", _
"Java(TM) 6 Update 20", _
"Java(TM) 6 Update 21", _
"Java(TM) 6 Update 22", _
"Java(TM) 6 Update 23", _
"Java(TM) 6 Update 24", _
"Java(TM) 6 Update 26", _
"Java(TM) 6 Update 29", _
"Java(TM) 6 Update 29 (64-bit)", _
"Java(TM) 6 Update 3", _
"Java(TM) 6 Update 30", _
"Java(TM) 6 Update 31", _
"Java(TM) 6 Update 31 (64-bit)", _
"Java(TM) 6 Update 32", _
"Java(TM) 6 Update 32 (64-bit)", _
"Java(TM) 6 Update 5", _
"Java(TM) 6 Update 7", _
"Java(TM) 7 Update 3", _
"Java(TM) 7 Update 4", _
"Java(TM) 7 Update 4 (64-bit)"]


$objWMIService = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
For $sSoftwareName In $aSoftwareNames
   $colSoftware = $objWMIService.ExecQuery ("Select * from Win32_Product Where Name = '" & $sSoftwareName & "'")
	  For $objSoftware In $colSoftware
		 $objSoftware.Uninstall()
	  Next
Next
Exit(0)
Отрабатывает без ошибки, но работает дольше...
Надеюсь, я не нарушил логику))
Возможно причина ошибки из-за класса oSWbemObjectEx.Name, т.к. только в нем отличия...
Тестировал на одной и той же виртуалке.

Последний раз редактировалось HFShak, 12-07-2012 в 16:33.


Отправлено: 15:49, 12-07-2012 | #9


Ветеран


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

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


HFShak, а ежели WSH попробовать:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim arrSoftwareNames
Dim strSoftwareName

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


arrSoftwareNames = Array( _
	"Java 2 Runtime Environment Standard Edition v1.2.2", _
	"Java 2 Runtime Environment Standard Edition v1.3.1_05", _
	"Java 2 Runtime Environment Standard Edition v1.3.1_17", _
	"Java 2 Runtime Environment, SE v1.4.2_01", _
	"Java 2 Runtime Environment, SE v1.4.2_03", _
	"Java 2 Runtime Environment, SE v1.4.2_05", _
	"Java 2 Runtime Environment, SE v1.4.2_06", _
	"Java 2 Runtime Environment, SE v1.4.2_07", _
	"Java 2 Runtime Environment, SE v1.4.2_08", _
	"Java 2 Runtime Environment, SE v1.4.2_12", _
	"Java 2 Runtime Environment, SE v1.4.2_13", _
	"Java 2 Runtime Environment, SE v1.4.2_15", _
	"Java 2 Runtime Environment, SE v1.4.2_16", _
	"Java 2 Runtime Environment, SE v1.4.2_19", _
	"Java Auto Updater", _
	"Java(TM) 6 Update 10", _
	"Java(TM) 6 Update 11", _
	"Java(TM) 6 Update 13", _
	"Java(TM) 6 Update 17", _
	"Java(TM) 6 Update 18", _
	"Java(TM) 6 Update 2", _
	"Java(TM) 6 Update 20", _
	"Java(TM) 6 Update 21", _
	"Java(TM) 6 Update 22", _
	"Java(TM) 6 Update 23", _
	"Java(TM) 6 Update 24", _
	"Java(TM) 6 Update 26", _
	"Java(TM) 6 Update 29", _
	"Java(TM) 6 Update 29 (64-bit)", _
	"Java(TM) 6 Update 3", _
	"Java(TM) 6 Update 30", _
	"Java(TM) 6 Update 31", _
	"Java(TM) 6 Update 31 (64-bit)", _
	"Java(TM) 6 Update 32", _
	"Java(TM) 6 Update 32 (64-bit)", _
	"Java(TM) 6 Update 5", _
	"Java(TM) 6 Update 7", _
	"Java(TM) 7 Update 3", _
	"Java(TM) 7 Update 4", _
	"Java(TM) 7 Update 4 (64-bit)" _
)

strComputer = "."

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

For Each objSWbemObjectEx In collSWbemObjectSet
	WScript.Echo "[" & objSWbemObjectEx.Name & "]"
	
	For Each strSoftwareName In arrSoftwareNames
		If strSoftwareName = objSWbemObjectEx.Name Then
			objSWbemObjectEx.Uninstall()
		End If
	Next
Next

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

WScript.Quit 0

что получится (выполняйте из-под командной строки посредством «cscript.exe»)?

Отправлено: 09:11, 13-07-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Цикл в Цикле deamon7 Скриптовые языки администрирования Windows 5 15-04-2023 09:04
.NET - цикл do-while c# rom4ik_93@vk Программирование и базы данных 1 24-03-2012 01:11
CMD/BAT - [решено] Цикл FOR mark23 Скриптовые языки администрирования Windows 2 15-07-2011 10:52
C/C++ - Задача на цикл. Hardcore Программирование и базы данных 6 27-09-2010 18:00
C/C++ - Цикл ganselo Программирование и базы данных 4 31-10-2008 12:13




 
Переход