Пользователь
Сообщения: 125
Благодарности: 9
|
Профиль
|
Отправить PM
| Цитировать
Рад приветствовать единомышленников!
Уже более двух лет автоматизирую AutoIt'ом все, что можно и не можно.
Начинал, естественно, с "автокликанья" по окошкам программ-установщиков. Но сейчас мне обидно за любимый AutoIt, когда его используют исключительно в этих целях.
Мои скрипты отвечают за весь процесс установки системы, а также выполняют ряд полезных функций в текущей работе. Главное, что дал AutoIt, это более мощные и разнообразные инструменты, по сравнению с обычными батниками, и логику, по сравнению с обычными inf- и reg-файлами.
Поделюсь несколькими фирменными приемчиками.
Проверка на стадии cmdlines наличия железки и установка дров для нее:
Код: ![Выделить весь код](images/misc/selectcode.png)
Opt('ExpandVarStrings', 1); default = 0
.....
$iDir= '@ScriptDir@\Up\'
$iDirDr= '@ScriptDir@\I386\$$oem$$\$$1\drivers\'
If DriveGetFileSystem(StringLeft(@ScriptDir,3))='CDFS' Then $iDirDr='@ScriptDir@\$$1\drivers\'
.....
$hwid='PCI\VEN_1002' ;ati
If hwidtest($hwid) Then
$Dr='$iDirDr$1_ati\'
RunWait('$Dr$driver\Setup.exe -s -f1"$Dr$driver\setup.iss"')
RunWait('$Dr$cpanel\Setup.exe -s -f1"$Dr$cpanel\setup.iss"')
RegDelete('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','ATIPTA')
RegWrite('HKLM\SOFTWARE\ATI Technologies\Desktop','EnableIcon','REG_SZ','0')
$f='$iDirDr$4_s910t\nast_color.au3'
If FileExists($f) Then StartupDrivers("RunWait('AutoIt3.exe $f$')")
EndIf
.....
Exit
.....
Func hwidtest($hwid) ;проверка наличия железки по ID
return NOT RunWait('@ComSpec@ /C devcon.exe hwids "$hwid$" | find "$hwid$"','',0)
EndFunc
Доустановка после первой загрузки Windows дров, которые "не любят" стадию cmdlines:
Код: ![Выделить весь код](images/misc/selectcode.png)
.....
$hwid='PCI\VEN_8086' ;INTEL
If hwidtest($hwid) Then
$hwid='PCI\VEN_8086&DEV_24DF' ;INTELSATA
If hwidtest($hwid) Then
StartupDrivers("RunWait('$iDirDr$0_intel_sata\iaar47_multi.exe -A -S','',0)")
StartupDrivers("DirRemove('@ProgramsCommonDir@\Intel(R) Application Accelerator',1)")
Manager','$aMenuPSS$',1)")
Else
RunWait('$iDirDr$0_intel\iaa23_enu.exe -A -S','', 0)
DirRemove('@ProgramsCommonDir@\Intel Application Accelerator',1)
EndIf
EndIf
.....
Exit
.....
Func StartupDrivers($l)
$file = FileOpen('C:\startupdrivers.au3', 1)
FileWriteLine($file, $l)
FileClose($file)
EndFunc
Создание Подключений и соответствующих Учетных записи OutLook через IPS-файл на основе данных пользователя (файл internet.ini)
Код: ![Выделить весь код](images/misc/selectcode.png)
.....
$ini= 'ПУТЬ\internet.ini'
$ins= '%temp%\ispcnfg.ins'
$con= IniReadSectionNames($ini)
For $i=1 to $con[0]
IspCnfg_ins()
Run(@ComSpec&' /C Start %temp%\ispcnfg.ins','',0)
WinWaitActive('Мастер подключения к Интернету')
Send('{ENTER}')
WinWaitActive('Мастер подключения к Интернету','Завершена подготовка')
Send('{ENTER}')
Next
.....
Exit
.....
Func IspCnfg_ins() ;создание ispcnfg.ins, создающего соединение
$f = FileOpen($ins, 2)
FileWriteLine($f, '[Entry]')
FileWriteLine($f, 'Entry_Name='& $con[$i])
FileWriteLine($f, '')
FileWriteLine($f, '[Phone]')
FileWriteLine($f, 'Dial_As_Is=yes')
FileWriteLine($f, 'Phone_Number='& IniRead($ini, $con[$i],'Phone_Number',''))
FileWriteLine($f, 'Area_Code=8452')
FileWriteLine($f, 'Country_Code=7')
FileWriteLine($f, 'Country_ID=7')
FileWriteLine($f, '')
FileWriteLine($f, '[Device]')
FileWriteLine($f, 'Type=modem')
FileWriteLine($f, '')
FileWriteLine($f, '[Server]')
FileWriteLine($f, 'Type=PPP')
FileWriteLine($f, 'SW_Compress=yes')
FileWriteLine($f, 'Network_Logon=no')
FileWriteLine($f, 'Negotiate_TCP/IP=yes')
FileWriteLine($f, 'Negotiate_NetBEUI=No')
FileWriteLine($f, 'Negotiate_IPX/SPX=No')
FileWriteLine($f, '')
FileWriteLine($f, '[TCP/IP]')
FileWriteLine($f, 'Specify_IP_Address=no')
FileWriteLine($f, 'Specify_Server_Address=yes')
FileWriteLine($f, 'IP_Header_Compress=yes')
FileWriteLine($f, 'Gateway_On_Remote=yes')
FileWriteLine($f, 'DNS_Address='& IniRead($ini, $con[$i],'DNS_Address',''))
FileWriteLine($f, 'DNS_Alt_Address='& IniRead($ini, $con[$i],'DNS_Alt_Address',''))
FileWriteLine($f, '')
FileWriteLine($f, '[User]')
FileWriteLine($f, 'Name='& IniRead($ini, $con[$i],'Name',''))
FileWriteLine($f, 'Password='& IniRead($ini, $con[$i],'Password',''))
FileWriteLine($f, 'Display_Password=no')
FileWriteLine($f, '')
FileWriteLine($f, '[ConnectionSettings]')
FileWriteLine($f, 'ApplyInsToConnection='&$con[$i])
FileWriteLine($f, '')
If IniRead($ini, $con[$i],'Email_Name','')<>'' Then
FileWriteLine($f, '[Internet_Mail]')
FileWriteLine($f, 'SMTP_Server='& IniRead($ini, $con[$i],'SMTP_Server',''))
FileWriteLine($f, 'POP_Server='& IniRead($ini, $con[$i],'POP_Server',''))
FileWriteLine($f, 'Domain=') ;sample.net
FileWriteLine($f, 'Install_Mail_16=0')
FileWriteLine($f, 'Email_Name='& IniRead($ini, $con[$i],'Email_Name',''))
FileWriteLine($f, 'Email_Address='& IniRead($ini, $con[$i],'Email_Address',''))
FileWriteLine($f, 'POP_Logon_Name='& IniRead($ini, $con[$i],'POP_Logon_Name',''))
FileWriteLine($f, 'POP_Logon_Password='&IniRead($ini, $con[$i],'POP_Logon_Password',''))
FileWriteLine($f, '')
EndIF
FileClose($f)
EndFunc
Где файл internet.ini имеет следующий вид
Код: ![Выделить весь код](images/misc/selectcode.png)
[ИМЯ_СОЕДИНЕНИЯ1]
Phone_Number=
Phone_Number2=
Name=
Password=
DNS_Address=
DNS_Alt_Address=
SMTP_Server=
POP_Server=
Email_Name=
Email_Address=
POP_Logon_Name=
POP_Logon_Password=
[ИМЯ_СОЕДИНЕНИЯ2]
.....
Для перевода reg-файлов в коды AutoIt написал простенький макрос для Word:
Код: ![Выделить весь код](images/misc/selectcode.png)
Sub ОбработкаREG()
With Selection
If .Start = .End Then ActiveDocument.Select
Set myRange = .Range
'удаление лишнего
Замена "( ){1;}", "\1", True
Замена "^p ", "^p", False
Замена "\^p", "", False
Замена "\\", "\", False
Замена "HKEY_CURRENT_USER", "HKCU", False
Замена "HKEY_LOCAL_MACHINE", "HKLM", False
'обработка строк
For Each aPara In myRange.Paragraphs
aPara.Range.Select: .End = .End - 1
If Left(.Text, 1) = ";" Then
ElseIf Left(.Text, 1) = "[" Then
hkey = Mid(.Text, 2, InStr(.Text, "]") - 2)
.End = .End + 1
.Text = ""
ElseIf InStr(.Text, "=") Then
kkey = Mid(.Text, 2, InStr(2, .Text, Chr(34)) - 2)
If InStr(.Text, "dword") Then
tkey = "REG_DWORD"
zkey = Mid(.Text, InStr(.Text, "=") + 7)
zkey = Trim(Str(Val("&h" + zkey)))
ElseIf InStr(.Text, "hex") Then
tkey = "REG_BINARY"
zkey = Mid(.Text, InStr(.Text, "=") + 5)
zkey = Replace(zkey, ",", "")
zkey = UCase(zkey)
Else
tkey = "REG_SZ"
zkey = Mid(.Text, InStr(.Text, "=") + 2)
zkey = Replace(zkey, Chr(34), "")
End If
.Text = "RegWrite('" + hkey + "','" + kkey + "','" + tkey + "','" + zkey + "')"
End If
Next
myRange.Select
End With
End Sub
Sub Замена(a, b, s)
Set SRange = Selection.Range
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Execute FindText:=a, ReplaceWith:=b, Replace:=wdReplaceAll, Wrap:=wdFindStop, MatchWildcards:=s
End With
SRange.Select
End Sub
Буду рад, если что-нибудь кому-нибудь пригодится...
|