Что нового

Финализация скрипта

Talany

Знающий
Сообщения
136
Репутация
11
Приветствую любителей AutoIt

AutoItом увлекаюсь не так давно потому прошу сильно не пинать...
(на php код не стыдно паказать, а здесь стесьняюсь :D )
Написал (накарякал) маленький скрипт

Пожалуйста посмотрите и исправте (подскажите) как надо..
Я понимаю что вариант If GUICtrlRead($rename) == 1 Then десткий но по другому как не нашел....

Прошу коментировать ваши поправки!!!

Код:
#include <GUIConstants.au3>
$oService   = ObjGet("winmgmts:\\.\root\cimv2")
$oServiseDomage = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\" & @ComputerName & "\root\cimv2:Win32_ComputerSystem.Name='" & @ComputerName & "'")
$JOIN_DOMAIN = 1
$Null = "NULL"
$group = "Администраторы"
$put = @WindowsDir & '\' & 'script.ini'


Func oshbka($i)
	If $i == 5 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Доступ ограничен используйте другую пару логин пароль! Свяжитесь с системным адмнистратором! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 87 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Параметр домена неверен! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 110 Then
		$msgbox = MsgBox(20, "Ошибка...", "Ошибка. Невозможно подключится к домену! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?")
		If $msgbox == 6 Then
			Shutdown(2)
			Exit
		Else
			FileDelete($put)
		    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
			Exit
		EndIf
	EndIf
	If $i == 1323 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Неверно задан пароль! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 1326 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Имя пользователя или пароль не опознаны! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 1332 Then
		$msgbox = MsgBox(20, "Ошибка...", "Ошибка Сервера. Именам пользователей не сопоставлены коды защиты данных.! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?")
		If $msgbox == 6 Then
			Shutdown(2)
			Exit
		Else
			FileDelete($put)
		    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
			Exit
		EndIf
	EndIf
	If $i == 1355 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Указанный домен не существует! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 2224 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Параметр уже существует! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 2691 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Компьютер уже соединен с доменом! Выполнение всех команд прекращено!")
		Exit
	EndIf
	If $i == 2692 Then
		$msgbox = MsgBox(20, "Ошибка...", "Ошибка. Этот компьютер в данный момент не присоединен к домену! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?")
		If $msgbox == 6 Then
			Shutdown(2)
			Exit
		Else
			FileDelete($put)
		    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
			Exit
		EndIf
	EndIf
	If $i <> 5 And $i <> 87 And $i <> 110 And $i <> 1323 And $i <> 1332 And $i <> 1326 And $i <> 1355 And $i <> 2224 And $i <> 2691 And $i <> 2692 Then
		FileDelete($put)
		RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
		MsgBox(16, "Ошибка...", "Ошибка. Неизвестная критическая ошибка! Выполнение всех команд прекращено!")
		Exit
	EndIf
EndFunc


Func soft($id, $t, $iz)
		Sleep(6500)
		SplashTextOn("Установка программы " & $t & " из " & $iz, "Идет установка " & $id, 265, 80)
		If $id=="WinRar 3" Then
			RunWait("\\192.168.1.33\script$\Winrar\winrar.exe /S")
		EndIf
		; еще много прог установки
        ; еще много прог установки
        ; еще много прог установки
		SplashOff()
EndFunc

If FileExists($put) Then
	$IniArraySoft = IniReadSection($put, "soft")
	$iniArrayName = IniReadSection($put, "name")
	$IniArrayDomain = IniReadSection($put, "domain")
	If $iniArrayName <> 1 Then
		If $iniArrayName[1][1] <> @ComputerName Then
		   $msgbox = MsgBox (4, "Ошибка", "Пожалуйста перезагрузите компьютер после переименования! Сделать это сейчас?", 7)
	       If $msgbox == 6 Or $msgbox == -1 Then
     		   Shutdown(2)
	    	   Exit
	       EndIf
		EndIf
	EndIf
	If $IniArrayDomain <> 1 Then
		Sleep(7000)
		$prava = IniRead($put, "domain", "user", False)
		SplashTextOn("Пожалуйста подождите...", "Внесение компьютера в домен " & $IniArrayDomain[1][1], 265, 70)
		$return = $oServiseDomage.JoinDomainOrWorkGroup($IniArrayDomain[1][1], $IniArrayDomain[3][1], $IniArrayDomain[1][1] & '\' & $IniArrayDomain[2][1], $Null, $JOIN_DOMAIN)
		If $return == 0 Then
			If $prava Then ; если присваеваем права админа
				$private = RunWait("net localgroup " & $group & " " & $prava & " /add", "", @SW_HIDE)
				IniDelete($put, "name") ; удаляем записи
				IniDelete($put, "domain") ; удаляем записи
				RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) ; удаляем записи
				If $IniArraySoft <> 1 Then ; проверяем будем ли устанавливать софт
					RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", @WindowsDir & '\system32\' & @ScriptName)
				EndIf
				SplashOff()
				If $private == 0 Or $private == 2 Then
					$msgbox = MsgBox(4, "Информация...", "Компьютер успешно добавлен в домен " & $IniArrayDomain[1][1] & ", Пользователю " & $prava & " присвоены права Администратора. Необходимо перезагрузить компьютер! Сделать это сейчас?", 5)
					If $msgbox == 6 Or $msgbox == -1 Then
						Shutdown(2)
						Exit
					EndIf
				Else
					$msgbox = MsgBox(4, "Информация...", "Компьютер успешно добавлен в домен " & $IniArrayDomain[1][1] & ". Ошибка, пользователю " & $prava & " не были присвоены права Администратора! Попробуйте в ручном режиме! Необходимо перезагрузить компьютер! Сделать это сейчас?", 5)
					If $msgbox == 6 Or $msgbox == -1 Then
						Shutdown(2)
						Exit
					EndIf
				EndIf
			Else
				IniDelete($put, "name")
				IniDelete($put, "domain")
				RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
				If $IniArraySoft <> 1 Then
					RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", @WindowsDir & '\system32\' & @ScriptName)
				EndIf
				SplashOff()
				$msgbox = MsgBox(4, "Информация...", "Компьютер успешно добавлен в домен " & $IniArrayDomain[1][1] & ". Необходимо перезагрузить компьютер! Сделать это сейчас?", 5)
				If $msgbox == 6 Or $msgbox == -1 Then
					Shutdown(2)
					Exit
				EndIf
			EndIf
		Else
			SplashOff()
			oshbka($return)
		EndIf
	EndIf
	If $IniArraySoft <> 1 Then
		Sleep(6500)
		For $i=1 To UBound($IniArraySoft)-1
		soft($IniArraySoft[$i][0], $i, UBound($IniArraySoft)-2)
	    Next
	FileDelete($put)
	RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
	Exit
	EndIf
EndIf

GUICreate("Внесение компьютера " & @ComputerName & " в домен...", 550, 315)
GUISetIcon("shell32.dll", 16)
GUICtrlCreateGroup(" Изменение компьютера ", 10, 10, 340, 210)

$rename = GUICtrlCreateCheckbox("Переименовать компьютер", 20, 30)
$CName = GUICtrlCreateInput(@ComputerName , 190, 30, 150, 20)

$domage = GUICtrlCreateCheckbox("Внести компьютер в домен", 20, 80)
$domain = GUICtrlCreateInput("atc.kz", 190, 80, 150, 20)
GUICtrlCreateLabel("Логин:", 145, 113)
$Alogin = GUICtrlCreateInput(@UserName, 190, 110, 150, 20)
GUICtrlCreateLabel("Пароль:", 140, 143)
$Apass = GUICtrlCreateInput("", 190, 140, 150, 20)

$Uadmin = GUICtrlCreateCheckbox("В группу Администраторы", 20, 185)
$user = GUICtrlCreateInput(@UserName, 190, 185, 150, 20)


; ===================

GUICtrlCreateGroup(" Установка программ ", 370, 10, 165, 295)

$winrar = GUICtrlCreateCheckbox("WinRar", 390, 30)
; еще много чего
; еще много чего
; еще много чего


$Run = GUICtrlCreateButton("Начать", 50, 240, 100, 50)
$Exit = GUICtrlCreateButton("Выход", 200, 240, 100, 50)

Func paste()
	If GUICtrlRead($winrar) == 1 Then
		IniWrite($put, "soft", "WinRar", "1")
	EndIf
	; и еще много чего
	; и еще много чего
	; и еще много чего

EndFunc

GUISetState()
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Exit
			Exit
		Case $Run
			If GUICtrlRead($rename) == 1 Then
				$CompName = GUICtrlRead($CName)
				SplashTextOn("Пожалуйста подождите...", "Идет переименование ПК..", 265, 50)
				For $System in $oService.InstancesOf("Win32_ComputerSystem") ; переименовываем компьютер
				$sReturn = $System.Rename($CompName)
			    Next
				If $sReturn <> 0 Then
					SplashOff()
					MsgBox(16, "Внимание Ошибка", "Ошибка переименования компьютера! Выполнение прекращенно!")
					Exit
				Else
					IniWrite($put, 'name', 'name', $CompName)
					If GUICtrlRead($domage) == 1 Then
						$d = GUICtrlRead($domain)
						$adminL = GUICtrlRead($Alogin)
						$AdminP = GUICtrlRead($Apass)
						If GUICtrlRead($Uadmin) == 1 Then
							$UserL = GUICtrlRead($user)
							$iData = "domain=" & $d & @LF & "admin=" & $adminL & @LF & "pass=" & $AdminP & @LF & "user=" & $UserL
						Else
							$iData = "domain=" & $d & @LF & "admin=" & $adminL & @LF & "pass=" & $AdminP
						EndIf
						IniWriteSection($put, "domain", $iData)
					EndIf
					paste()
					FileCopy(@ScriptDir & '\' & @ScriptName, @WindowsDir & '\' & 'system32', 1)
					RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", @WindowsDir & '\' & 'system32\' & @ScriptName)
					SplashOff()
					$m = MsgBox(4,"Информация","Компьютер успешно переименован! Необходимо перезагрузить компьютер. Сделать это сейчас?", 5)
					If $m == 6 Or $m == -1 Then
						Shutdown(2)
						Exit
					Else
						Exit
					EndIf

				EndIf
			EndIf

			If GUICtrlRead($domage) == 1 Then
				$d = GUICtrlRead($domain)
				$adminL = GUICtrlRead($Alogin)
				$AdminP = GUICtrlRead($Apass)
				$UA = GUICtrlRead($user)
				SplashTextOn("Пожалуйста подождите...", "Внесение компьютера в домен " & $atc, 265, 50)
				$Return = $oServiseDomage.JoinDomainOrWorkGroup($d, $AdminP, $d & '\' & $adminL, $Null, $JOIN_DOMAIN)
				If $Return == 0 Then
					If GUICtrlRead($Uadmin) == 1 Then
						$private = RunWait("net localgroup " & $group & " " & $UA & " /add", "", @SW_HIDE)
						If $private == 0 Or $private == 2 Then
							paste()
							FileCopy(@ScriptDir & '\' & @ScriptName, @WindowsDir & '\' & 'system32', 1)
							SplashOff()
							$ms = MsgBox(4, "Информация", "Компьютер " & @ComputerName & " успешно внесен в домен " & $d & ". Пользователю " & $UA & " присвоены права Администратора. Необходимо перезагрузить компьютер, сделать это сейчас?", 5)
							If $ms == 6 Or $ms == -1 Then
								Shutdown(2)
								Exit
							Else
								Exit
							EndIf
						Else
							paste()
							FileCopy(@ScriptDir & '\' & @ScriptName, @WindowsDir & '\' & 'system32', 1)
							SplashOff()
							$message = MsgBox(4, "Информация", "Компьютер " & @ComputerName & " успешно внесен в домен " & $d & ". Ошибка при добавлении " & $UA & " в группу Администраторы. Попробуй в ручном режиме. Необходимо перезагрузить компьютер, сделать это сейчас?", 5)
							If $message == 6 Or $message == -1 Then
								Shutdown(2)
								Exit
							Else
								Exit
							EndIf
						EndIf
					Else
						paste()
						FileCopy(@ScriptDir & '\' & @ScriptName, @WindowsDir & '\' & 'system32', 1)
						SplashOff()
						$ms = MsgBox(4, "Информация", "Компьютер " & @ComputerName & " успешно внесен в домен " & $d & ". Необходимо перезагрузить компьютер, сделать это сейчас?", 5)
						If $ms == 6 Or $ms == -1 Then
							Shutdown(2)
							Exit
						Else
							Exit
						EndIf
					EndIf
				Else
					SplashOff()
					oshbka($Return)
				EndIf
			EndIf


			If GUICtrlRead($winrar) == 1 Then
				If 	FileExists("\\192.168.1.33\script$\Winrar\winrar.exe") Then
			RunWait("\\192.168.1.33\script$\Winrar\winrar.exe /S")
			GUICtrlSetBkColor($winrar, 0x00ff00)
		    Else
			GUICtrlSetBkColor($winrar, 0xffff00)
			Sleep(1000)
		    EndIf
		    EndIf

		; и т.д
		; и т.д
		; и т.д
	EndSwitch
WEnd
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Много что можно сделать. например:
* В функции oshbka заменить проверку $i на Switch.

* Часто повторяющиеся данные можно записать в глобальные переменные. например: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

* В функции oshbka в каждой проверке выполняется функция Exit, ее можно вынести ниже всех проверок. А если Exit будет не нужен, то в проверке можно вызвать Return.
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
Talany
Замени функцию Func oshbka($i) ... EndFunc на это:

Код:
Func oshbka($i)
	Switch $i
		Case 5
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Доступ ограничен используйте другую пару логин пароль! Свяжитесь с системным адмнистратором! Выполнение всех команд прекращено!")
		Case 87
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Параметр домена неверен! Выполнение всех команд прекращено!")
		Case 110
			If MsgBox(20, "Ошибка...", "Ошибка. Невозможно подключится к домену! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?") = 6 Then
				Shutdown(2)
			Else
				oshbka_Ex()
			EndIf
		Case 1323
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Неверно задан пароль! Выполнение всех команд прекращено!")
		Case 1326
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Имя пользователя или пароль не опознаны! Выполнение всех команд прекращено!")
		Case 1332
			If MsgBox(20, "Ошибка...", "Ошибка Сервера. Именам пользователей не сопоставлены коды защиты данных.! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?") = 6 Then
				Shutdown(2)
			Else
				oshbka_Ex()
			EndIf
		Case 1355
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Указанный домен не существует! Выполнение всех команд прекращено!")
		Case 2224
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Параметр уже существует! Выполнение всех команд прекращено!")
		Case 2691
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Компьютер уже соединен с доменом! Выполнение всех команд прекращено!")
		Case 2692
			If MsgBox(20, "Ошибка...", "Ошибка. Этот компьютер в данный момент не присоединен к домену! Свяжитесь с системным адмнистратором! Повторить подключение после перезагрузки?") = 6 Then
				Shutdown(2)
			Else
				oshbka_Ex()
			EndIf
		Case Else
			oshbka_Ex()
			MsgBox(16, "Ошибка...", "Ошибка. Неизвестная критическая ошибка! Выполнение всех команд прекращено!")
	EndSwitch
	Exit
EndFunc

Func oshbka_Ex()
	FileDelete($put)
	RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
EndFunc
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Благодарю....

Меня сильно тревожит

Код:
If GUICtrlRead($?) == 1 Then


Или это нармльно выглядит???
Нужно ли это заменить чтобы обойтись без ошибок в скрипте???
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Talany [?]
Меня сильно тревожит
ИМХО, зря тревожит, если это Radio или Checkbox, хотя, для наглядности, можно поменять
Код:
If GUICtrlRead($?) == 1 Then
;на
If GUICtrlRead($?) == $GUI_CHECKED Then

И еще, я бы поменял
Код:
#include <GUIConstants.au3>
;на
#include <GUIConstantsEx.au3>
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Благодарю madmasles

Значит скрипт можно завершать! Спасибо всем тема решена!!! :IL_AutoIt_1:
 
Верх