Как определить полный путь из расшаренного ресурса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как определить полный путь из расшаренного ресурса

Сообщение Vova_2581 » 12.05.2010 (Ср) 15:55

Имеется расшаренный сетевой ресурс сервера, например, «Temp». Нужно удаленно определить полный адрес директории этого ресурса, типа «C:\Program Files\Temp». Как сделать? UNC не предлагать.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить полный путь из расшаренного ресурса

Сообщение jangle » 12.05.2010 (Ср) 16:19

Vova_2581 писал(а):Имеется расшаренный сетевой ресурс сервера, например, «Temp». Нужно удаленно определить полный адрес директории этого ресурса, типа «C:\Program Files\Temp». Как сделать? UNC не предлагать.


Ты задачу правильно сформулировал? А то получается следующее: Есть фото блондинки в шубе. Нужно удаленно определить цвет ее трусов. Как сделать? Догадки не предлагать.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как определить полный путь из расшаренного ресурса

Сообщение Antonariy » 12.05.2010 (Ср) 16:37

UNC не предлагать.
Автор походу не знает, что такое UNC, иначе бы не выдвинул такое требование.
"Имеется расшаренный сетевой ресурс сервера … Расшареный ресурс сервера не предлагать" — примерно такой смысл поста.

Вообще за расшаренным ресурсом может скрываться что угодно, принтер к примеру, клиенту о сути этого "что угодно" знать как минимум незачем, а как максимум — не положено. Так что к серверу нужно подключаться через WMI и перебрать расшаренные ресурсы его собственными средствами. Если он это позволит.
Лучший способ понять что-то самому — объяснить это другому.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как определить полный путь из расшаренного ресурса

Сообщение Vova_2581 » 13.05.2010 (Чт) 10:12

Меня не интересует «\\Srv1\Folder1\Sub1\» по-моему я написал это четко и ясно.
Насчет WMI подробней можно?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить полный путь из расшаренного ресурса

Сообщение jangle » 13.05.2010 (Чт) 11:05

Vova_2581 - честным способом ты никак не узнаешь локальный путь сетевой папки. Это тебе и не нужно вообще-то. А методом грязного хака теоретически можно, положить в сетевую папку экзешник и попросить его запустить оператора сервера. Экзешник определит папку из которой он запущен и скинет путь потом тебе путь по электронной почте или по сети. Но это уже троян получается.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как определить полный путь из расшаренного ресурса

Сообщение Antonariy » 13.05.2010 (Чт) 15:11

Vova_2581 писал(а):Меня не интересует «\\Srv1\Folder1\Sub1\» по-моему я написал это четко и ясно.
Ты написал лишнее. "Имеется расшаренный сетевой ресурс" — ежу ясно, что ты этот путь уже знаешь.
Vova_2581 писал(а):Насчет WMI подробней можно?

Код: Выделить всё
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colShares = objWMIService.ExecQuery("Select * From Win32_Share")

For Each objShare in colShares
    Set colAssociations = objWMIService.ExecQuery _
        ("Associators of {Win32_Share.Name='" & objShare.Name & "'} " _
            & " Where AssocClass=Win32_ShareToDirectory")
    For Each objFolder in colAssociations
        Wscript.Echo objShare.Name & vbTab & objFolder.Name
    Next
Next
Однако, указав имя сервера при его стандартных настройках безопасности, получишь отлуп вида "Разрешение отклонено: 'GetObject'".
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как определить полный путь из расшаренного ресурса

Сообщение Денис » 13.05.2010 (Чт) 16:03

jangle писал(а):Vova_2581 - честным способом ты никак не узнаешь локальный путь сетевой папки. Это тебе и не нужно вообще-то. А методом грязного хака теоретически можно, положить в сетевую папку экзешник и попросить его запустить оператора сервера. Экзешник определит папку из которой он запущен и скинет путь потом тебе путь по электронной почте или по сети. Но это уже троян получается.


А если в нужную папку положить DirInfo.txt в котором написать локальное расположение, а потом тупо читать этот файл?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить полный путь из расшаренного ресурса

Сообщение jangle » 13.05.2010 (Чт) 16:33

Денис писал(а):А если в нужную папку положить DirInfo.txt в котором написать локальное расположение, а потом тупо читать этот файл?


А не проще тогда просто назвать сетевую папку локальным путем? Например C-Programms_Files-projects-folder
Где "-" надо заменить на "\", а "_" на пробелы. И никакие файлы не нужны. Весь путь уже указан в названии папки.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как определить полный путь из расшаренного ресурса

Сообщение Денис » 13.05.2010 (Чт) 17:34

jangle писал(а):
Денис писал(а):А если в нужную папку положить DirInfo.txt в котором написать локальное расположение, а потом тупо читать этот файл?


А не проще тогда просто назвать сетевую папку локальным путем? Например C-Programms_Files-projects-folder
Где "-" надо заменить на "\", а "_" на пробелы. И никакие файлы не нужны. Весь путь уже указан в названии папки.


Тогда так:
C=-Programms_Files-projects-folder
Где "=" заменть на ":", "-" надо заменить на "\", а "_" на пробелы.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как определить полный путь из расшаренного ресурса

Сообщение Vova_2581 » 14.05.2010 (Пт) 10:54

Vivat WMI! Все получилось! Причем, самым честным способом! По свободе отпишусь.
jangle, Денис -- Вы куда-то не туда завернули. :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как определить полный путь из расшаренного ресурса

Сообщение iGrok » 14.05.2010 (Пт) 12:16

Vova_2581 писал(а):...По свободе отпишусь...

Посадили таки человека.. И ведь за такую ерунду!
Сколько лет хоть дали? :lol:
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить полный путь из расшаренного ресурса

Сообщение jangle » 14.05.2010 (Пт) 13:58

iGrok писал(а):
Vova_2581 писал(а):...По свободе отпишусь...

Посадили таки человека.. И ведь за такую ерунду!
Сколько лет хоть дали? :lol:


За такое точно пожизненное дали! :mrgreen:

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как определить полный путь из расшаренного ресурса

Сообщение Vova_2581 » 15.05.2010 (Сб) 15:22

Сперва просьба модераторам: не допускайте пожлст неадекватных людей к участию на форумах. Шутки какие-то непонятные и неуместные.

Теперь по делу касательно вопроса по форуму (буду уточнять на всякий случай), Antonariy, да, в самом деле ты был прав – указывая имя сервера, получал «permission denied». Стал изучать вопрос, по ходу понял, что твой код можно упростить вообще до трех строчек.
Код: Выделить всё
For Each objShare In GetObject("WinMgmts:\\.\root\cimv2").InstancesOf("Win32_Share")
Print objShare.Path
Next 

Но это пути локальной шары. А мне надо было достать шару сервера. Как быть? Чтобы все получилось легально, нужно указывать имя пользователя и пароль админа (мне это известно, сорри, что не сказал вначале, не думал, что будет важно). Как выяснилось, сделать это через моникер невозможно, по причине все той же безопасности. Чтобы получить легальный доступ к серверу, нужно использовать объект SWbemLocator через метод ConnectServer.
Короче, все что мне надо получил простым кодом:
Код: Выделить всё
strComputer = "192.168.212.41" 'IP сервера
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, "root\CIMV2", _
    "strUserLogin", _
    "strUserPassword", _
    "MS_409", _
    "ntlmdomain:" + strDomain)

For Each objShare In objWMIService.InstancesOf("Win32_Share")
Print objShare.Path
Next

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


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 104

    TopList