Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] ПФР Не тревиальная задача- этот скрипт пригодится всем (http://forum.oszone.net/showthread.php?t=220193)

sergo123 11-11-2011 09:05 1792790

ПФР Не тревиальная задача- этот скрипт пригодится всем
 
Ребят помогите плиз!!!!
Преамбула: Есть куча бухов - мы их все очень любим без них не получим свои кровные денюжки!
Задача: куча машин на каждой своя база по ПФР.
Я что б автоматизировать процесс написал скрипт(суть скрипта: Запустили - Он начинает скачку/Распаковывает/разархивирует/удаляет все временые файлы/Устанавливает) на все уходит примерно 3 минуты.
Итог: Пользователь счастлив У него все вовремя обнавлено. ГЛ.Бух счастлив -> Я и мой начальник счастлив!!!! Хепиэнд!!! НО тут есть собака которая порылась!
Сам скрипт:
@echo off
color 3E
title “бв**®ўЄ* Џ”ђ...
goto download

:Download
echo ‘Є*зЁў*Ґ¬ Џ”ђ...
c:\PFR\wget.exe http://www.pfrf.ru/userdata/branches...u_orb_1_68.zip -c -t
goto loop

:rar
echo.
echo ђ*§®аеЁўЁа㥬 Џ”ђ...
C:\PFR\unzip.exe -u C:\PFR\Setup_Spu_orb_1_68.zip
goto wait

:loop
echo.
echo †¤Ґ¬ 5 ¬Ё*гв...
timeout /T 5
goto rar

:wait
echo.
echo †¤Ґ¬ 5 ¬Ё*гв...
timeout /T 5
goto setup

:setup
echo.
echo “бв***ў«Ёў*Ґ¬ Џ”ђ...
C:\PFR\Setup_Spu_orb.exe /S /R100
echo.
echo “бв**®ўЄ* §*ўҐаиҐ**! ¬®¦ЁвҐ ЁбЇ®«м§®ў*вм Џа®Ја*¬¬г Џ”ђ. ‘Ї*бЁЎ®.

Exit

Теперь сама проблема: Все бы нечего если б ПФР не привязал бы свой файлик к версиям! "Setup_Spu_orb_1_68.zip"
Помощь зала:
Нашел способ и нашел часть нужного мне скрипта:
Большое Спасибо "Anonymоus"
"...Вот этот скрипт распарсит html-файл и выделит всё, что находится внутри a href="ссылка", производится проверка на расширение файла по ссылке. К сожалению, обойтись без использования одного временного файла не получилось. В данном примере ссылки выводятся Echo, вы уже сами перенаправьте их, куда нужно...."

@Echo Off
Set File=index.txt
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%A In ('sed "s/.*href=.//" %File%') Do (Echo %%A>>tmp)
For /F "tokens=*" %%A In ('sed "s/.>.*$//" tmp') Do (
Set String=%%A
If /I "!String:~-4!"==".exe" Echo %%A
)
Del tmp

Pause>nul

То что я немогу никак допетрить (сломал мозГ) как с помощью CMD запустить Браузер что б он зашел по этому адресу "http://www.pfrf.ru/index.php?chapter_id=4116&data_id=6075&do=view_single" скопировал бы его в index.txt а уже после этого как создаться этот файлик с данными я запущу скрипт выше по вытаскиванию URL. Останется только в *.Bat - нике заменить все URL и заменить срточку с "Setup_Spu_orb_1_68.zip" на Актуальную

Прошу помощи у Гуру программистов!!! Заранее спасибо за понимание!

sergo123 11-11-2011 09:25 1792805

З.Ы. В принципе логику я понимаю: скрипт должен "чем то" воспользоваться - зайти на страницу/ сохранить код страницы в index.txt/ и уже потом а после запускаем скрипт по вытаскиванию URL/ сравниваем его с Оригиналом/ если отличается запихиваем его в строчку wget / дальше работает отстаток скрипта. Но вот как это сделать просто мне знаний не хватате, только учусь ... хех

З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться)

Iska 11-11-2011 19:25 1793192

Под WSH:
Код:

Option Explicit

Dim objFSO
Dim objWshShell

Dim strWGetPath
Dim str7ZipPath

Dim strUrl
Dim strOriginalCharset
Dim strUrlFilePattern

Dim objHTMLDocument
Dim objHTMLAnchorElement
Dim strUrlFile

Dim boolFound
Dim strWorkFolder


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

strUrl            = "http://www.pfrf.ru/index.php?chapter_id=4116&data_id=6075&do=view_single"
strOriginalCharset = "windows-1251"
strUrlFilePattern  = "http://www\.pfrf\.ru/userdata/branches/ot_orenb/program/Setup_Spu_orb_[\d_]*\.zip"

strWGetPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\GnuWin32\bin\wget.exe")
str7ZipPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\7-Zip\7z.exe")

Set objHTMLDocument = GetDocumentFromURL(strUrl, strOriginalCharset)

With WScript.CreateObject("VBScript.RegExp")
        .Global    = False
        .IgnoreCase = True
        .Pattern    = strUrlFilePattern
       
        WScript.StdOut.Write "Searching in:  " & strUrl & "..."
       
        boolFound = False
       
        For Each objHTMLAnchorElement In objHTMLDocument.links
                If .Test(objHTMLAnchorElement.href) Then
                        strUrlFile = objHTMLAnchorElement.href
                        boolFound  = True
                       
                        Exit For
                End If
        Next
End With

If boolFound Then
        WScript.StdOut.WriteLine " OK"
       
        WScript.StdOut.Write "Downloading:  " & strUrlFile & "..."
       
        If objWshShell.Run( _
                """" & strWGetPath & """ " & _
                "--progress=dot:binary --tries=10 --timestamping " & _
                "--directory-prefix=""" & objWshShell.ExpandEnvironmentStrings("%Temp%") & """ " & _
                """" & strUrlFile & """", 1, True) = 0 Then
               
                WScript.StdOut.WriteLine " OK"
               
                WScript.StdOut.Write "Extracting:    " & objFSO.GetFileName(strUrlFile) & "..."
               
                strWorkFolder = GetTemporaryName()
               
                If objWshShell.Run( _
                        """" & str7ZipPath & """ " & _
                        " x -o""" & strWorkFolder & """ -aoa """ & _
                        objFSO.BuildPath(objWshShell.ExpandEnvironmentStrings("%Temp%"), objFSO.GetFileName(strUrlFile)) & """ ""*""", 1, True) = 0 Then
                       
                        WScript.StdOut.WriteLine " OK"
                       
                        WScript.StdOut.Write "Installing:    " & "Setup_Spu_orb.exe" & "..."
                       
                        If objWshShell.Run( _
                                """" & objFSO.BuildPath(strWorkFolder, "Setup_Spu_orb.exe") & """ /S /R100", 1, True) = 0 Then
                               
                                WScript.StdOut.WriteLine " OK"
                        Else
                                WScript.StdOut.WriteLine " Error"
                        End If
                       
                        objFSO.DeleteFolder strWorkFolder, True
                Else
                        WScript.StdOut.WriteLine " Error"
                End If
        Else
                WScript.StdOut.WriteLine " Error"
        End If
Else
        WScript.StdOut.WriteLine " Error"
End If

Set objWshShell = Nothing
Set objFSO      = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function GetDocumentFromURL(strURL, strCharset)
        Const adModeReadWrite = 3
       
        Const adTypeBinary    = 1
        Const adTypeText      = 2
       
        Dim objHTMLDocument
        Dim objHTMLBaseElement
        Dim arrHtmlText
        Dim strUrlDomain
        Dim strContent
       
       
        Set objHTMLDocument = WScript.CreateObject("HTMLFile")
       
        With WScript.CreateObject("VBScript.RegExp")
                .Pattern = "^(http://.*?/).*"
               
                strUrlDomain = .Execute(strUrl).Item(0).SubMatches(0)
        End With
       
        With WScript.CreateObject("MSXML2.XMLHTTP")
                .open "GET", strURL, False
                .send
                arrHtmlText = .responseBody
        End With
       
        With WScript.CreateObject("ADODB.Stream")
                .Mode    = adModeReadWrite
                .Type    = adTypeBinary
                .Open
                .Write arrHtmlText
               
                .Position = 0
                .Type    = adTypeText
                .Charset  = strCharset
               
               
                strContent = Replace(.ReadText, "<head>", "<head><base href=""" & strUrlDomain & """>", 1, -1, vbTextCompare)
               
                With WScript.CreateObject("VBScript.RegExp")
                        .Global    = True
                        .IgnoreCase = True
                        .Pattern = "(<script[^>]*)"
                       
                        objHTMLDocument.open
                        objHTMLDocument.write .Replace(strContent, "<script type='text/plain'")
                        objHTMLDocument.close
                End With
        End With
       
        Set GetDocumentFromURL = objHTMLDocument
        Set objHTMLDocument = Nothing
End Function
'=============================================================================

'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
        Const TemporaryFolder = 2
       
        Dim strTempName
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                Do
                        strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
                Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
        End With
       
        GetTemporaryName = strTempName
End Function
'=============================================================================

P.S. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
Цитата:

Цитата sergo123
З.Ы.Ы. Естественно для работы скрипта в папке существуют wget.exe \ unzip\ timeout.exe (мало ли на каких машинах будит запускаться) »

Тогда правьте пути в:
Код:

strWGetPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\GnuWin32\bin\wget.exe")
str7ZipPath        = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\7-Zip\7z.exe")


sergo123 14-11-2011 03:42 1794582

Вложений: 2
Цитата:

P.S. Проверки на то, что приложение уже может быть установлено или запущено, равно как и проверки установленной версии — здесь не делается.
Это и не надо так как ПФР пофиг есть или нет - базу данных он обновляет при запуске программы

Iska 14-11-2011 07:49 1794624

sergo123, сохранить с расширением *.vbs, исполнять под «cscript.exe»:
Код:

cscript.exe //nologo "<Путь к сценарию>"
P.S. Выкладывать громадные скриншоты нет нужды: «Alt-PrintScreen» — копирует активное окно. В данном же случае, чтобы скопировать текст из окна MessageBox с сообщением об ошибке, достаточно нажать в нём «Ctrl-C».

sergo123 14-11-2011 08:10 1794632

Работает!!!! Iska, Ты мего гуру!!!!!! Р.Е.С.П.Е.К.Т.!!!!!! И Уважуха!!! сейчас последний тест и все...

Iska 14-11-2011 09:20 1794651

sergo123, я сознательно не стал усложнять сей скрипт обработкой возможных ошибок (отсутствие проверки под каким движком скрипт запущен — тоже отсюда). Если скрипт в общем и целом у Вас заработал — насыщайте его потребными случаю проверками: на движок, на наличие связи с Internet, на существование файлов/папок, на проверку запущенного приложения и т.п.

sergo123 14-11-2011 11:10 1794711

Iska, на проверку запущенного приложения и т.п. - это не надо так как машинки виртуальные и их запускают только когшда нужна необходимость - осталась самая сложная задача приучить Бухов "Тыкать в файлик" :)))) Еще раз большущее спасибо!!!!

З.Ы. я с мака сижу через RDP - тут проще делаются скриншоты нажатием 3-х клавишь и скрин у тебя на раб столе - перепутал кропку получились на весь экран Хе-хе


Время: 23:24.

Время: 23:24.
© OSzone.net 2001-