1 (изменено: madjahed, 2015-12-27 11:55:23)

Тема: VBS/WSH: Определить полный путь к расшареной папке

Здраствуйте.
Появилась необходимость мониторить несколько папок в сетевом окружении на наличие только что созданных файлов.
Видел на форуме несколько вариантов решения вопроса - остановился на этом http://forum.script-coding.com/viewtopi … 144#p99144
Сеть одноранговая, не AD, копьютеры в рабочей группе Win7 - Win XP.
Проблема возникла с определением полного пути к расшареной папке. То есть необходимо преобразовать путь "\\Andrey\Сетевая" в "D:\Работа\1\2\3\Сетевая"

2

Re: VBS/WSH: Определить полный путь к расшареной папке

Оформите тему в соответствии с правилами. Пока это не будет сделано, ответы будут удаляться. Через 3 дня сама тема будет удалена.

3 (изменено: godvin, 2015-12-02 06:40:39)

Re: VBS/WSH: Определить полный путь к расшареной папке

Присоединяюсь к вопросу. Задачи практически теже - в сетевом окружении следить за шарами на нескольких ПК - при появлении файлов сразу же их копировать к себе, а то удаляются оч быстро, буквально через минуту.

4

Re: VBS/WSH: Определить полный путь к расшареной папке

http://forum.script-coding.com/viewtopic.php?id=518
Flasher
Спасибо за пример. Замечание насчет пунктуации учел.

В примере явно указано

strDir = "c:\temp"

, а если мне неизвестно на каком диске расположена шара на удаленном пк - знаю только имя: "Сетевая". И хотелось бы иметь возможность следить за несколькими ПК.
Следующую процедуру:

' Процедура-обработчик события OnObjectReady объекта sWbemSink
Sub Sink_OnObjectReady(oOutParams, oContext)
    strResult = Date & " " & Time & vbCrLf &_
        "Создан файл: " &  oOutParams.TargetInstance.PartComponent
    Wscript.Echo strResult
End Sub

я так понимаю, для моих целей нужно заменить на:

TargetFolder = "C:\Documents and Settings\User\Рабочий стол\1"
Sub CopyFile(FilePath)
    On Error Resume Next
    SubPath = Mid(FilePath, Len(InitialFolder) + 1)
    TargetPath = TargetFolder & SubPath
    FolderPath = objFSO.GetParentFolderName(TargetPath)
    If Not objFSO.FolderExists(FolderPath) Then
        CreateFolder FolderPath 
    End If

а что передать вместо параметра InitialFolder что бы подставилось имя и путь к файлу, который был создан?

5 (изменено: Flasher, 2015-11-26 15:24:45)

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Для одной машины и папки выглядеть это будет примерно так:

OPath = "C:\Reserve"  ' папка на своей машине
IPath = "D:\Monitor"  ' расшаренная папка
Comp = "Ivanov" ' имя компьютера расшаренной папки

Set FSO = CreateObject("Scripting.FileSystemObject")
IPath = """" & Replace(IPath, "\", "\\\\") & """"
OPath = FSO.BuildPath(OPath, "\")

Set colEvents = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!\\" &_
Comp & "\root\cimv2").ExecNotificationQuery _
  ("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE " &_
   "Targetinstance ISA 'CIM_DirectoryContainsFile' and " &_
   "TargetInstance.GroupComponent= " &_
   "'Win32_Directory.Name=" & IPath & "'")

Do
   File = Replace(Split(colEvents.NextEvent._
   TargetInstance.PartComponent, "=")(1), "\\", "\")
   File = Mid(File, 2, Len(File) - 1)
   If Not FSO.FileExists(OPath & File) Then FSO.CopyFile File, OPath
Loop

Для нескольких я бы, наверно, сделал коллекции (имена машин, пути) для перебора.
Если все подряд, то что-то в таком ракурсе:

Set WshNetwork = CreateObject("WScript.Network")
Set NameSpace  = GetObject("WinNT://" & WshNetwork.UserDomain)
NameSpace.Filter = Array("computer")

For Each Comp In NameSpace
   If Comp <> WshNetwork.ComputerName Then
     ' делаем дела с каждым компьютером
   End If
Next

Можно ещё по шарам пробежаться, посмотреть:

For each Share in GetObject("winmgmts:{impersonationLevel=" &_
"impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Share")
   MsgBox Share.Path   
Next

Тестить было негде, т.ч. не обессудьте'с.

6 (изменено: godvin, 2015-12-02 06:40:50)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
А как поступить в первом указаном Вами примере, если мне не известно расположение расшареной папки?
Например: D:\Сетевая или С:\Сетевая или С:\Документы\Сетевая.

7

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher пишет:

Можно ещё по шарам пробежаться, посмотреть:

8

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
В итоге выйдет:

Set WshNetwork = CreateObject("WScript.Network")
Set NameSpace  = GetObject("WinNT:\\" & WshNetwork.UserDomain)
For each Share in GetObject("winmgmts:{impersonationLevel=" &_
"impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Share")
   MsgBox Share.Path   
Next

Я так понимаю, поиск будет идти по всем ПК в локальной сети?
А с каким интервалом будет происходить обновление?

9 (изменено: Flasher, 2015-11-25 19:09:30)

Re: VBS/WSH: Определить полный путь к расшареной папке

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

MyComp = CreateObject("WinNTSystemInfo").DomainName
Set NameSpace = GetObject("WinNT:")
NameSpace.Filter = Array("computer")
For Each Comp In NameSpace	
   If Comp.Name <> MyComp Then
      For each Share in GetObject("winmgmts:{impersonationLevel=" &_
      "impersonate}!\\" & Comp.Name & "\root\cimv2").ExecQuery("Select Path from Win32_Share")
         S = S & Share.Path & vbCrLf
      Next
   End If
Next : File = "C:\Расшаренное.txt"
CreateObject("Scripting.FileSystemObject").CreateTextFile(File, True).Write S
CreateObject("Shell.Application").Open File

Своя машина должна входить с подопытными в один домен.

10

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Компьютеры в одной рабочей группе - но критически важно мониторить шары в цикле - например каждые 5 сек. И в результате появления файла - скопировать на свой пк.
А каково назначение файла C:\Расшаренное.txt в последнем примере?

11

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Мониторинг производится в исходном скрипте, а не последующих шаблонах, которые предлагается с учётом задач подстроить под свои нужды к этому скрипту.
Назначение файла - записать в него все шары, открыть и уже самостоятельно найти необходимое (включая "Сетевая"). По-моему, проще было сперва протестировать, чем спрашивать, нет?

12 (изменено: godvin, 2015-11-21 08:55:08)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
http://forum.script-coding.com/viewtopi … 151#p99151
данный пример запустить не удалось - выдает ошибку
http://upload.akusherstvo.ru/thumbs/886236.png

13 (изменено: Flasher, 2015-11-21 09:35:06)

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Вход в систему, надеюсь, сетевой? Что вернёт этот код?

On Error Resume Next
D1 = CreateObject("WScript.Network").UserDomain
D2 = CreateObject("WinNTSystemInfo").DomainName
D3 = CreateObject("ADSystemInfo").DomainName
Set WMI = GetObject( "winmgmts:\\.\root\cimv2")
For Each Item in WMI.ExecQuery("Select Domain from Win32_ComputerSystem")
    Domain = Item.Domain
    If Item.PartOfDomain Then D4 = "D: " & Domain Else D4 = "WG: " & Domain
Next
For Each Item in WMI.ExecQuery("Select DomainName from Win32_NTDomain")
   D5 = Item.DomainName
Next
MsgBox "1) " & D1 & vbCr & "2) " & D2 & vbCr &_
"3) " & D3 & vbCr & "4) " & D4 &  vbCr & "5) " & D5

14 (изменено: godvin, 2015-11-23 20:43:02)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Выполнил предложенный выше скрипт
Результаты:
1. godvin
2. godvin
3.
4. D: OSNOVA
5.

15

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Имеем у машины два доменных имени - godvin и OSNOVA. Второй не входит в рабочую группу. Так?
Вот этот скрипт (запуск из Run: cmd /k cscript.exe //nologo "C:\List Domain or Workgroup Information.vbs") что покажет?

16 (изменено: godvin, 2015-12-02 06:41:08)

Re: VBS/WSH: Определить полный путь к расшареной папке

Здравствуйте, Flasher
godvin - имя моего пк в сети,
osnova - имя рабочей группы

Предложенный скрипт опробую завтра на работе.
Результаты скрипта:
Computer Name: GODVIN
Name Format:
Domain: OSNOVA
Part of domain: Ложь
workgroup: OSNOVA
Domain Role: Standalone Workstation
Roles: LM_Workstation, LM_Server, NT, Potential_Browser, Backup_Browser
Network Server Mode Enabled: Истина.

17

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Лучше писать новый пост, обновления по дате не видно.
Попробуем так.
Если не пройдёт, впишите OSNOVA после WinNT: на второй строке.

18 (изменено: godvin, 2015-12-02 06:41:14)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Добрый день.
Пример http://forum.script-coding.com/viewtopi … 151#p99151

создает пустой текстовый файл, а в случае замены в нем строчки на

 Set NameSpace = GetObject("WinNT:OSNOVA")

возвращает ошибку в этой строке на первом символе.

19 (изменено: Flasher, 2015-11-26 15:25:23)

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Неправильно я написал. Не OSNOVA, а //OSNOVA.
Что если в третьей строке прописать domain вместо computer?
Кстати, интересно, что-то покажет такой код?:

Set NameSpace = GetObject("WinNT:")
NameSpace.Filter = Array("computer")
For Each F in NameSpace
  S = S & F & vbCrLf
Next : MsgBox S

И как я уже писал, овервотить с тем же кодом не нужно. Есть ссылка на пост.

20 (изменено: godvin, 2015-12-02 06:41:27)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Код http://forum.script-coding.com/viewtopi … 296#p99296 выдал пустое окно с кнопкой ОК
Если подставить в код ранее http://forum.script-coding.com/viewtopi … 151#p99151  \\OSNOVA, выдает ошибку на первом символе в строке 2, код ошибки 0х80005000
Если прописать вместо computer - domain c оставленым  \\OSNOVA, выдает ошибку на первом символе в строке 2, код ошибки 0х80005000, а если оставить ("WinNT:") - ошибка в 7-м символе 6-й строки, код 800А01СЕ - Компьютер удаленного сервера не существует или недоступен: 'GetObject'.

21

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Пардон. Слэши прямые, а не обратные: //OSNOVA.

22 (изменено: godvin, 2015-12-02 06:41:38)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Заменил слеши на прямые.
Если оставить

Array("computer")

выдает ошибку в 6-й строке 7-м символе: 800А0046 - Разрешение отклонено 'GetObject'
Если подставить

Array("domain")

открывает пустой текстовый файл.

23

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Гм.. Этот запустите:

For Each Provider In GetObject("ADs:")
  S = S & Provider.Name & vbCrLf
Next
MsgBox  S, 64, " Сприсок провайдеров ADSI"

24

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Доброе утро. Скрипт выдал:
WinNT:
LDAP:

25 (изменено: Flasher, 2015-11-27 17:50:30)

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
ОК. Через LDAP позже можно посмотреть.
Сейчас в этом скрипте на 5 и 7 строке удалите .Name и замените первые 3 строчки на

Namespace = Split("ComputerName1 ComputerName2 ComputerName3")

, где вместо ComputerName нужно прописать имена машин с шáрами.

26 (изменено: godvin, 2015-12-02 06:40:22)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Код приобрел вид:

Namespace = Split("Andrey")
For Each Comp In NameSpace	
   If Comp <> MyComp Then
      For each Share in GetObject("winmgmts:{impersonationLevel=" &_
      "impersonate}!\\" & Comp & "\root\cimv2").ExecQuery("Select Path from Win32_Share")
         S = S & Share.Path & vbCrLf
      Next
   End If
Next : File = "C:\Расшаренное.txt"
CreateObject("Scripting.FileSystemObject").CreateTextFile(File, True).Write S
CreateObject("Shell.Application").Open File

При запуске выдает ошибку в 4-й строке- разрешение отклонено 'GetObject', код 800А0046.

27

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Первую строку удалять не стоило. Я поспешил. Но в данном случае не так важно.
Пока непонятно. Может, в политиках какой запрет на удалёнку стоит или прав не хватает.

28 (изменено: godvin, 2015-12-02 06:40:14)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Все политики по умолчанию - после установки винды никаких изменений не вносилось.

29

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
А на машине Andrey?

30 (изменено: godvin, 2015-12-02 06:40:07)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
На удаленной машине - Windows XP SP2 со стандартными настройками, в сети есть еще Windows XP SP3, на локальной машине Windows 7 - настройки так же стандартные.

31

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
А какое имя у серверной машины? godvin?

32 (изменено: godvin, 2015-12-02 06:43:09)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Да, сервер - это условно, сеть не на домене,- компьютеры в рабочей группе OSNOVA.

33

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Ну, тогда по логике с него можно пройтись по всем машинам:

For each Share in GetObject("winmgmts:{impersonationLevel=" &_
"impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Share")
   S = S & Share.Path & vbCrLf
Next : File = "C:\Расшаренное.txt"
CreateObject("Scripting.FileSystemObject").CreateTextFile(File, True).Write S
CreateObject("Shell.Application").Open File

P.S.: не советую пренебрегать точками.

34 (изменено: godvin, 2015-12-02 06:39:50)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Но ведь пример: http://forum.script-coding.com/viewtopi … 325#p99325, не удался.

35

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Так вот и стоит попробовать с сервера, а не клиента.

36 (изменено: godvin, 2015-12-03 23:21:08)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Сеть одноранговая - все машины в рабочей группе равноправны, Andrey - имя удаленного ПК, godvin - имя локального (моего) ПК.

37

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
И в данном случае любая машина может быть в роли сервера или клиента. Так?

38 (изменено: godvin, 2015-12-02 09:00:56)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Да - машины равноправны. Роли постоянно меняются. Отправляем запрос - клиент, получаем запрос - сервер.

39

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Так и?

40

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin, давайте всё же найдём утраченные точки, и желательно во всех ваших постах.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

41

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Вот и пытался пройтись http://forum.script-coding.com/viewtopi … 325#p99325 - выдает ошибку в 4-й строке- разрешение отклонено 'GetObject', код 800А0046.

42

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Кто пытается пройтись по тому скрипту, с которым уже проводились тесты?

43

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Еще на одной машине пробовал запускать - результаты те же.

44

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
С этим те же? Да ну?

45

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Если вместо точки подставить удаленный ПК - то да.

46

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
А без если?

47 (изменено: godvin, 2015-12-03 11:00:26)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Если без - в результате открывается текстовый файл с таким содержимым:

C:\Windows
C:\
D:\

D:\Сетевая
D:\СКАНЕР

48

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
D:\Сетевая - это не о ней речь шла? >>>

godvin пишет:

а если мне неизвестно на каком диске расположена шара на удаленном пк - знаю только имя: "Сетевая".

Кстати, странно, что на 4 строчке пусто.

49 (изменено: godvin, 2015-12-03 20:35:37)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
http://forum.script-coding.com/viewtopi … 483#p99483 - Это мои расшаренные ресурсы. А нужно получить путь к сетевой папке на удаленном ПК. Строчка действительно пустая, это на что то влияет?

50 (изменено: Flasher, 2015-12-18 14:15:28)

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Так ещё попробуем:

Comp = "Igor"   ' имя компьютера
User = "Lena"   ' имя юзера
Pass = "1234"   ' пароль юзера
Set Conn = CreateObject("WbemScripting.SWbemLocator").ConnectServer(Comp, "root\cimv2", User, Pass)
Conn.Security_.ImpersonationLevel = 4
Conn.Security_.Privileges.Add 7
For Each Share in Conn.ExecQuery("Select Name, Path from Win32_Share")
    S = S & Share.Name & ": " & Share.Path & vbCrLf
Next : File = "C:\Расшаренное.txt"
CreateObject("Scripting.FileSystemObject").CreateTextFile(File, True).Write S
CreateObject("Shell.Application").Open File

51

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Ошибочка вышла:http://imglink.ru/show-image.php?id=d52 … d19a88.jpg

52 (изменено: madjahed, 2015-12-11 09:24:52)

Re: VBS/WSH: Определить полный путь к расшареной папке

Добрый вечер. Возвращаюсь к теме. За диалогом следил - все предложенные решения испытывал. Рузультаты идентичны как и у пользователя Godvin.
При известном полном пути к расшареному ресурсу на другом компьютере скрипт http://forum.script-coding.com/viewtopic.php?id=518 выдает сообщение при появлении файла в указаной папке, но не реагирует на создание папки или на появление файла в подпапках указаной папки; а первый скрипт из поста http://forum.script-coding.com/viewtopi … 144#p99144 успешно копирует созданный файл при его появлении в указаной папке, но также не обрабатывает вложенные папки и создание папок.
Так же считаю актуальным вопрос об определении полного пути к расшаренной папке на удаленном компьютере.
Скрипт http://forum.script-coding.com/viewtopi … 523#p99523 выдает ошибку аналогичную как и у пользователя Godvin.

53 (изменено: Flasher, 2015-12-12 02:19:00)

Re: VBS/WSH: Определить полный путь к расшареной папке

madjahed пишет:

Рузультаты идентичны как и у пользователя Godvin.

Судя по нижеследующему тексту, результаты таки отличаются. Тут на лицо положительный результат с копированием. Имя машины же не своё подставляли?

madjahed пишет:

но также не обрабатывает вложенные папки

Сомневаюсь, что есть мякий способ рекурсивно просматривать директории. А стандартная рекурсия наверняка приведёт к тормозам.

А вообще мне сейчас негде тестировать, проблемы с серверными службами. Разве что к кому-то через удалённый стол подключаться.

54 (изменено: madjahed, 2015-12-12 09:22:36)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Тестировал локально на своем компе, вместо имени удаленного пк подставлял точку и на другом компе где точно знал расположение сетевой папки.
Полный путь к сетевой папке на другом пк так и не удалось получить.

55

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin, madjahed, этот скрипт что вернёт?

Comp = "Andrey"  ' имя др. ПК
For Each Item In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")._
ExecQuery("Select * from Win32_NetworkLoginProfile")
   Name = Item.Name
   If InStr(Name, Comp) Then
      MsgBox "Caption: " & Item.Caption & vbCr &_
      "Name: " & Name & vbCr &_
      "Full Name: " & Item.FullName & vbCr &_
      "Home Directory Drive: " & Item.HomeDirectoryDrive & vbCr &_
      "Workstations: " & Item.Workstations
      Exit For
   End If
Next

56

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Никакой реакции после запуска скрипта не последовало - ни ошибок, ни сообщений.

57

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
А вход точно сетевой?

58

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
А как можно проверить?

59

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Должна быть запущена одноимённая служба (она же netlogon в lsass.exe). В sysdm.cpl должно быть Рабочая группа: OSNOVA или Домен: ... при членстве в домене.

60 (изменено: godvin, 2015-12-17 15:17:54)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Рабочая группа стоит. А служба сетевого входа в систему стоит в ручном режиме - при попытке запуска выдает что была запущена и остановлена так как не используется. Зависящие и смежные службы включены - робачая станция, сервер, модуль поддержки netbios через tcp/ip.

61

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Так, не в ту степь. Вот этот точно должен список машин показать:

For Each N In CreateObject("Shell.Application").NameSpace(&H12).Items
	If N.IsFolder Then S = S & N.Name & vbTab & "|" & vbTab & N.Path & vbCr
Next : MsgBox S

62

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Код вернул список машин в сетевом окружении в виде:
Andrey | \\Andrey
Igor | \\Igor
и т.д.

63

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
ОК. Хотел убедиться, что всё сходится.
Вернёмся к скрипту, дабавив имя и пароль юзера.

64

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
Ошибка в первом символе 4-й строки - Сервер RPC недоступен.

65

Re: VBS/WSH: Определить полный путь к расшареной папке

godvin
Попробуйте поиграться с этой строкой на основании данной информации.

66 (изменено: godvin, 2015-12-27 12:03:17)

Re: VBS/WSH: Определить полный путь к расшареной папке

Flasher
К сожалению имя и пароль пользователя нужного мне компьютера не известны.