1 (изменено: Александр, 2011-05-15 15:15:42)

Тема: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Добрый день. Помогите с vbs скриптом.
Задача такая. На клиентских местах есть папка c:\temp. Необходимо что бы с сетевого ресурса например \\server\share\temp все данные перемещались в c:\temp с заменной. Но есть одно но, пользователи находятся в разных офисах ,и укаждого свой шлюз, и соотвестствено свой файловый сервер.
Нужно что бы этот скрипт отробатывал при логоне, определял местоположение пользователя, и в зависемоти от этого выполнял необходимую задачу, в данном случа  копирование со своего файлового сервера данные.

Заранее огромное спасибо.

2

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

2 Александр:

1) Читаем тему - http://forum.script-coding.com/viewtopic.php?id=1740. ) И присоединяемся к общей толпе безграмотных (в которую вхожу и я), желающих говорить по русски и "лечить" свой русский язык. )
2) Предполагаю, что Вам вполне подойдёт Scripting.FileSystemObject.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Каким образом определить шлюз и дальше его использовать?

4 (изменено: Евген, 2011-05-15 16:06:31)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Определение шлюза

Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set oDGs = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each oDG In oDGs
If Not IsNull(oDG.DefaultIPGateway) Then
DefaultGateway=oDG.DefaultIPGateway(0)
End If
Next

использование шлюза

Select Case DefaultGateway
Case "10.1.254.1"
'Do something
Case "10.2.254.1"
'Do something
Case "10.3.254.1"
'Do something
Case "10.4.254.1"
'Do something
Case "10.5.254.1"
'Do something
Case "10.6.254.1"
'Do something
End Select
Времени не хватает... :-(

5

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

а можно для новичка подробно определение шлюза, каждую из команд

6 (изменено: Евген, 2011-05-15 18:45:48)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Неа...     (читай подпись...)  гугль Вам в помощь + MSDN + TechNet + википедия

Времени не хватает... :-(

7

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Подскажите ещё, как можно сначала получить имя папки с установленной Ос. А потом скопировать определенный файл туда?

8 (изменено: Alexey, 2011-05-18 21:48:12)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

Подскажите ещё, как можно сначала получить имя папки с установленной Ос. А потом скопировать определенный файл туда?

Set fso = WScript.CreateObject("Scripting.Filesystemobject")
MsgBox "Папка Windows "+fso.GetSpecialFolder(0)
fso.CopyFile "c:\autoexec.bat",fso.GetSpecialFolder(0)+"\"

9

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

спасибо. Небольшое уточнение, для новичка, обязательны ли вот эти символы +"\"?

10

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

спасибо. Небольшое уточнение, для новичка, обязательны ли вот эти символы +"\"?

Да. Без замыкающего слэша copyfile будет воспринимать папку windows как имя файла и попытается скопировать исходный файл в файл с именем папки windows.

11

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

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

12

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

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

Можно. Например, так:
- запустите (например, с помощью метода Exec объекта WScript.Shell) из основного сценария вспомогательный, целью которого будет "вывешивание" окошка MsgBox с соответствующим сообщением, и сохраните ProcessID вспомогательного сценария;
- после завершения копирования из основного сценария снимите (руководствуясь уже известным PID) процесс вспомогательного, а затем запустите его вновь, но уже с другим сообщением (здесь удобнее использовать метод Popup объекта WScript.Shell, т.к. есть возможность задать интервал времени, в течение которого окошко будет "висеть").

Однако, если смысл обсуждаемой задачи лишь в том, чтобы как-то визуализировать процесс копирования, то, думается, лучше вместо самодельной конструкции использовать метод CopyHere объекта Shell.Application).

13

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

спасибо

14

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Евген пишет:

Определение шлюза

Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set oDGs = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each oDG In oDGs
If Not IsNull(oDG.DefaultIPGateway) Then
DefaultGateway=oDG.DefaultIPGateway(0)
End If
Next

использование шлюза

Select Case DefaultGateway
Case "10.1.254.1"
'Do something
Case "10.2.254.1"
'Do something
Case "10.3.254.1"
'Do something
Case "10.4.254.1"
'Do something
Case "10.5.254.1"
'Do something
Case "10.6.254.1"
'Do something
End Select

а почему определение шлюза может не отрабатывать???, на некоторых машинах на редких на 2-3 из 200, значение DefaultGateway пустое.

15 (изменено: Dmitrii, 2011-06-23 09:48:49)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

... почему определение шлюза может не отрабатывать???, на некоторых машинах на редких на 2-3 из 200, значение DefaultGateway пустое.

Вероятно, эти станции IP-адреса (свой, шлюза) получают автоматически от DHCP-сервера.

16

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

нет все в одном домене, главное интересно то, что если потом в ручную запустить все работает, определяет, думал о том что сделать задержку перед выполнение скрипта делал до 20 секунд не помагает.

17

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

... все в одном домене...

Речь о том, как именно станциям назначаются IP-адреса: статически или динамически.

Александр пишет:

... если потом в ручную запустить все работает <...> задержку перед выполнение скрипта делал до 20 секунд...

Адрес станция получает до начала какого-либо пользовательского сеанса, поэтому задержка здесь не должна играть никакой роли.

OFF (прошу не обижаться )
----
1. Отсутствие знаков препинания или их неверная расстановка затрудняет понимание смысла текста (иногда очень сильно).
2. "Вручную" - наречие, пишется слитно.
3. "Помогает" - безударная гласная в корне проверяется однокоренным словом, в котором ударение падает на нужный слог: "Чем сможем, тем поможем".

18

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

как то ни странно у мс есть логон и удаленное подключение

Я конечно далек от мысли... (с)

19 (изменено: yuriy2000, 2011-06-23 22:06:10)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Можно еще "посмотреть"  на переменную окружения %LOGONSERVER%. Она должна содержать имя компьютера который использовался для авторизации пользователя. Если в каждом офисе имеется контроллер домена (обычная практика) - тогда можно использовать этот метод.

Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")

IF WshSysEnv("LOGONSERVER")="SERVER1" THEN

elseif WshSysEnv("LOGONSERVER")="SERVER2"

Else
  WScript.Echo("У нас новый офис?")
end if
...

20

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

нет, сервер, не во всех офисах!
Раздача ip идёт статически.

21 (изменено: Dmitrii, 2011-06-24 09:49:27)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр пишет:

Раздача ip идёт статически.

Стало быть и адрес шлюза указан статически?

yuriy2000, переменная %LOGONSERVER% может содержать и пустую строку. Кроме того, в мультиконтроллерном домене на запрос процедуры аутентификации пользователя (не путайте с авторизацией, у MS это не одно и то же) может ответить любой из контроллеров.

22

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Да и шлюз тоже.

23

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

yuriy2000,   Кроме того, в мультиконтроллерном домене на запрос процедуры аутентификации пользователя (не путайте с авторизацией, у MS это не одно и то же) может ответить любой из контроллеров.

На счет любого я не уверен, там есть какая-то процедура, которая выбирает сервер по пингу или что-то типа того, во всяком случае я  свое время пользовался именно этим методом (в Bath-файле) и все работало как задумано: - если в доп.офисе сервер жив (логон отработал) подключаемся к нему, в противном случае к центральному серверу. Может быть в каких-то исключительных случаях и случалось так что пользователь ДО подключался к центральному серверу, но это было крайне редко.

24

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Александр, если некорректность в определении шлюза наблюдается на одних и тех же станциях, то пока могу предложить следующее:
1) убедитесь, что на "проблемных" станциях адрес шлюза настроен статически;
2) в случае положительной ситуации по первому пункту, убедитесь, что сценарий на этих станциях отрабатывает без ошибок;
3) если и со вторым пунктом всё в порядке, то сравните таблицы маршрутизации "проблемной" и "нормальной" станций.

Кстати, какие версии ОС на станциях?

yuriy2000 пишет:

На счет любого я не уверен, там есть какая-то процедура, которая выбирает сервер по пингу или что-то типа того...

Процедура выбора не столь тривиальна. Посылка датаграммы ("пинг") службой клиента "Сетевой вход в систему" серверам-"кандидатам" - это лишь один из пунктов алгоритма.
Если говорить очень кратко, то выбирается первый из ответивших контроллеров. Причины, по которым тот или иной контроллер ответил первым,- это целая совокупность деталей сетевой инфраструктуры и текущего состояния контроллеров. Например, имеют значение: деление домена на сайты, наличие контроллера в сайте, наличие разницы в приоритетах и весах, указанных в SRV-записях для контроллеров, текущая нагрузка контроллеров...
Даже если руководствоваться только "пингом", то и в этом случае вероятность опережающего ответа конкретного сервера не будет равна 1 (при условии опроса нескольких серверов, разумеется).

yuriy2000 пишет:

... Может быть в каких-то исключительных случаях и случалось так что пользователь ДО подключался к центральному серверу, но это было крайне редко.

Раз такое событие не невероятно, значит имеется возможность некорректного решения обсуждаемой задачи этим методом.

25

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

, если некорректность в определении шлюза наблюдается на одних и тех же станциях, то пока могу предложить следующее:
1) убедитесь, что на "проблемных" станциях адрес шлюза настроен статически;
2) в случае положительной ситуации по первому пункту, убедитесь, что сценарий на этих станциях отрабатывает без ошибок;
3) если и со вторым пунктом всё в порядке, то сравните таблицы маршрутизации "проблемной" и "нормальной" станций.

Кстати, какие версии ОС на станциях?

1)да
2)да
3) надо проверить

ОС- ХР

Проблема, например на одной из станций, решилось переустановкой ОС (была такая необходимость)

26

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Вообщем проблема, в том что wmi не видет пространства имен root\cimv2. Что можно сделать, что бы поднять wmi?

27

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Вот рецепт

Времени не хватает... :-(

28

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

не помогло(((

29 (изменено: Евген, 2011-07-19 15:42:30)

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

У меня помогло на 5 компах подряд... (во всех случаях), у нас в организации мы этой инструкции обрадовались как маленькие дети, т.к. раньше просто образ винды по-новой накатывали
Вы что-то не так сделали...
Просто смысл в том, что после данной процедуры WMI репозиторий восстанавливается в изначальное состояние, тут промаха быть не может...
Следуйте внимательнее инструкциям, выполняйте всё как есть.

Времени не хватает... :-(

30

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

ну все так сдела
единственное


2) толкаем команду rundll32 wbemupgd, UpgradeRepository

это так??
rundll32 UpgradeRepository

31

Re: VBS: Скрипт копирование файлов, в зависимости от шлюза пользователя

Нет...  это вот так...
Пуск -> Выполнить -> rundll32 wbemupgd, UpgradeRepository

Времени не хватает... :-(