|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Считать переменную из файла |
|
|
VBS/WSH/JS - Считать переменную из файла
|
Пользователь Сообщения: 50 |
Профиль | Отправить PM | Цитировать Приветствую уважаемый форум и прошу помощи!
Есть скрипт на VBS, делающий архив баз 1С В скрипте как переменная указывается название базы, которую надо заархивировать. Баз стало много и хотелось бы бэкапить их одним скриптом и одним заданием. Видится, что существующий скрипт надо обернуть в цикл, который будет считывать из текстового файла название базы (одна строка - одно название базы), записывать его в некую переменную, которая будет подставляться в нужное место строки архивации и так для всех указанных баз. Поскольку я абсолютный чайник в VBS, очень прошу дать наводку, примеры... Заранее СПАСИБО :-) |
|
Отправлено: 15:34, 24-06-2016 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вариант 1.
' Cписок баз MasNames = Array("Base1", _ "Base2", _ "Base3") Mas_1 = LBound(MasNames) Mas_N = UBound(MasNames) For Mas_i = Mas_1 To Mas_N Call ArcBackups(MasNames(Mas_i)) Next Sub ArcBackups(BaseName) MsgBox BaseName End Sub Вариант 2. Идеология та же, но, по Вашей идее, список баз храним в текстовом файле SpisNames = "Z:\я16062417.txt" 'Cписок баз Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FileExists(SpisNames) Then Set FSpis = FSO.OpenTextFile(SpisNames, 1) Do iString = FSpis.ReadLine If Len(Trim(iString)) <> 0 Then Call ArcBackups(iString) Loop While Not FSpis.AtEndOfStream FSpis.Close End If Sub ArcBackups(BaseName) MsgBox BaseName End Sub Вариант 3. И всё-таки я бы предпочел сделать эту работу в cmd - скрипте, ИМХО, надёжнее получится. Но, не зная подробностей Вашего задания, его не привожу. |
------- Последний раз редактировалось megaloman, 24-06-2016 в 17:40. Отправлено: 16:51, 24-06-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Третий вариант не получится - там задача сначала пройтись по всем существующим в кластере 1С соединеным клиентам и выкинуть их из базы В cmd (насколько мне известно) такое не получится А подскажите как ? Цитата megaloman:
СКРИПТ
'имя пользователя базы 1С:Предприятия UserName = "user" 'пароль пользователя базы 1С:Предприятия UserPass = "pass" 'имя сервера 1С:Предприятия ServerName = "server" 'имя базы 1С:Предприятия к которой подключаемся BaseName = "test_baza" LockPermissionCode = "123456" LockMessageText = "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ И ОБНОВЛЕНИЕ." Dim Connector Dim AgentConnection Dim Cluster Dim WorkingProcess Dim WorkingProcessConnection Dim ibDesc Dim connections Dim ConnectString Set connector = CreateObject("v83.COMConnector.1") Set AgentConnection = Connector.ConnectAgent(ServerName) Set Cluster = AgentConnection.GetClusters()(0) 'Указываем доступ к консоли 1С:Предприятия (только в том случае если определён администратор кластера, иначе прописать просто " " (пробелЫ)) AgentConnection.Authenticate Cluster, " ", " " 'Список процессов кластера Processes = AgentConnection.GetWorkingProcesses(Cluster) Dim j 'Перебираем все процессы в кластере For j = LBound(Processes) To UBound(Processes) Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(j) 'Проверяем на наличие остановленых процессов If (WorkingProcess.MainPort <> "0") Then ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort Set WorkingProcessConnection = Connector.ConnectWorkingProcess(ConnectString) WorkingProcessConnection.AddAuthentication UserName, UserPass InfoBases = WorkingProcessConnection.GetInfoBases() For Each InfoBase In InfoBases ' Ищем нужную базу If UCase(InfoBase.Name) = UCase(BaseName) Then ' Устанавливаем запрет на подключение новых соединений InfoBase.ConnectDenied = True InfoBase.DeniedFrom = CStr(Now()) ' Запрет действует 15 минут, если скрипт не отработает нормально InfoBase.DeniedTo = CStr(Now() + 1 / 96 * 1) InfoBase.DeniedMessage = LockMessageText InfoBase.PermissionCode = LockPermissionCode WorkingProcessConnection.UpdateInfoBase (InfoBase) End If Next Set ibDesc = WorkingProcessConnection.CreateInfoBaseInfo() ibDesc.Name = BaseName Connections = WorkingProcessConnection.GetInfoBaseConnections(ibDesc) 'Удаление всех соединений заданной ИБ сервера 1С Dim i Dim Connection For i = LBound(Connections) To UBound(Connections) Set Connection = connections(i) If (Connection.AppID <> "COMConsole") Then WorkingProcessConnection.Disconnect Connection End If Next End If Next ''''''''''''''''''''''''''''' strComm = """C:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe"" CONFIG /S"& ServerName &"\"& BaseName &" /Nuser /Ppass /UC"& LockPermissionCode &" /DumpIB ""\\SERVER\BACKUP\1C\"& Dat & BaseName &".dt"" /Out ""\\SERVER\BACKUP\1C\log\"& Dat & BaseName &"_dump.log""" strComm2 = """C:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe"" CONFIG /S"& ServerName &"\"& BaseName &" /Nuser /Ppass /UC"& LockPermissionCode &" /UpdateDBCfg /Out ""\\SERVER\BACKUP\1C\log\"& Dat & BaseName &"_update.log""" Set oWshShell = CreateObject("WScript.Shell") oWshShell.Run strComm, 0, true oWshShell.Run strComm2, 0, true ' Отключаем блокировку базы InfoBases = WorkingProcessConnection.GetInfoBases() For Each InfoBase In InfoBases ' Ищем нужную базу If UCase(InfoBase.Name) = UCase(BaseName) Then ' Отключаем запрет на подключение новых соединений InfoBase.ConnectDenied = False 'InfoBase.DeniedMessage = "" 'InfoBase.PermissionCode = "" WorkingProcessConnection.UpdateInfoBase (InfoBase) End If Next |
||
Отправлено: 18:22, 24-06-2016 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Udar_Nick, Я не уверен, что получится с Вашим конкретным скриптом, но попробуйте вместо моего MsgBox BaseName (или ниже, для отладки) вставить полностью Ваш скрипт. В Вашем скрипте закомментируйте строку (в начале строки поставьте ' ). Случайно у нас имена Вашей переменной и параметра моей процедуры совпали
' BaseName = "test_baza" Естественно, в вызывающем модуле пропишите Ваши имена баз, пару штук для начала. |
------- Последний раз редактировалось megaloman, 24-06-2016 в 21:28. Отправлено: 19:27, 24-06-2016 | #4 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Udar_Nick, Вот и Вариант 3.
Пишем bat-файл, где вызываем Ваш vbs-скрипт (я обозвал файл с ним ArcBackups.vbs) и в параметре передаём в него имя базы @Echo On wscript ArcBackups.vbs "Base1" wscript ArcBackups.vbs "Base2" wscript ArcBackups.vbs "Base3" Set WS_arg=WScript.Arguments If WS_arg.Count <> 0 Then BaseName=WS_arg(0) MsgBox BaseName End If ' BaseName = "test_baza" ИМХО, этот вариант должен работать. Если будете настаивать, можно написать в батнике и чтение имён из текстового файла, имхо, это не имеет смысла. |
|
------- Отправлено: 22:27, 24-06-2016 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 23:28, 24-06-2016 | #6 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:46, 28-06-2016 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Udar_Nick, «в случае ошибки» — что именно Вы под этим подразумеваете?
|
Отправлено: 15:27, 28-06-2016 | #8 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Цитата Iska:
с некими параметрами. Делается дамп базы данных. Хотелось бы, если errorlevel выполнения этой строки не 0 (т.е произошла какая-то ошибка), то сделать файлик error.pid (и записать в него errorlevel например). Нужно для мониторинга Нагиосом в cmd это вот так выглядит: |
|
Отправлено: 15:50, 28-06-2016 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Dim lngErrLevel lngErrLevel = oWshShell.Run(strComm, 0, True) If lngErrLevel Then With WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile("c:\error.pid") .Write CStr(lngErrLevel) .Close End With End If Цитата Udar_Nick:
Далее, в одном случае Вы пишете, чтобы файл «создавался», а ниже приводите пример дополнения файла данными (а не создания). |
|
Отправлено: 16:40, 28-06-2016 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Построчное чтение из файла в переменную | Elven | Скриптовые языки администрирования Windows | 10 | 05-02-2015 16:55 | |
CMD/BAT - [решено] Копирование в переменную значения из текстового файла | idlazarev_alex@vk | Скриптовые языки администрирования Windows | 1 | 05-04-2014 22:11 | |
Разное - Почему программе не получается считать из файла данные,записанные туда др.программой? | Nayan | Программирование и базы данных | 8 | 04-05-2011 20:31 | |
[решено] Считать инфу из разделов INI файла в разные массивы. | FlatX007 | AutoIt | 18 | 23-12-2010 22:57 | |
CMD/BAT - [решено] Чтение строки из файла в переменную | Николя | Скриптовые языки администрирования Windows | 42 | 17-01-2010 19:42 |
|