Форум » [x]Harbour » Доступ к сетевым ресурсам. » Ответить

Доступ к сетевым ресурсам.

Dazzler: Добрый день. Подскажите пожалуйста, есть ли в Harbour функции доступа к сетевым ресурсам под определенной учетной записью? Например: Надо взять файл с ресурса \\serv1\folders2\load.txt Доступ туда имеет учетная запись: user: mdomen\user10 passw: Qazwsx!12

Ответов - 48, стр: 1 2 3 All

Sergy: Dima пишет: А не подскажешь как программно убить задачу на определенном компе по IP или имени ? Из CMD это примерно выглядит так Wmic /node:@computers.txt process where (caption=”notepad.exe”) call terminate А что мешает сделать: RUN("cmd /c Wmic /node:@computers.txt process where (caption=”notepad.exe”) call terminate")

Dima: Да ни чего не мешает , не люблю такие подходы если возможен нормальный путь , программный. Это примерно тоже самое если вместо функции directory() юзать RUN("dir") с разбором строки.

Andrey: Dima пишет: Да ни чего не мешает , не люблю такие подходы если возможен нормальный путь , программный. +1


Haz: Dima пишет: А не подскажешь как программно убить задачу на определенном компе по IP или имени ? не пробовал но возможно примерно так 1 подключиться к компу по вми примерно так цеплялся oLocator := CreateObject( "wbemScripting.SwbemLocator" ) oWMI := oLocator:ConnectServer('192.168.0.107',,'domain\user', 'password') 2 получить список процессов 3 убить выбранный PS но остается вопрос с правами на эти действия http://msdn.microsoft.com/en-us/library/windows/desktop/aa394589(v=vs.85).aspx

Andrey: Haz Давай пример в студию ! Очень хочется посмотреть !

Haz: Andrey пишет: Давай пример в студию ! Какой именно ? если для локального компа - Dima привел уже рабочий, если для удаленки - то это параметры в :ConnectServer , примерно такие ( подробнее нужно гуглить "wbemScripting.SwbemLocator" ) oLocator := CreateObject( "wbemScripting.SwbemLocator" ) oWMI := oLocator:ConnectServer( cComputer,'root\CIMV2','cUser', 'cPass') если успешно подключились - Valtype(oWMI) == 'O' , то можно объекту подсунуть любой его разрешенный запрос SELECT * ... PS. Если задачу запускать из под учетки администратора домена ( именно так и делал когда-то ) , то к любому компу в домене легко цепляется без явного указания пользователя, пароля и пространства имен - oWMI := oLocator:ConnectServer(cComputer,,,,,,128)

Dima: Haz Спасибо идею понял !

Dima: Haz пишет: oWMI := oLocator:ConnectServer(cComputer,,,,,,128) Если IP не доступен то вот такая бяка вылазит [pre2] Error WINOLE/1007 ╤σ≡Γσ≡ RPC φσΣε±≥≤∩σφ. (0x800706BA): SWbemLocator (DOS Error -2147352567) Called from TOLEAUTO:CONNECTSERVER(0) [/pre2] Как бы пролечить ? Средствами WMI можно проверить доступность IP адреса ?

Haz: По сути успешный коннект и есть доступность Можно все делать в обработчике ошибок и проверять типы Valtype(oLacator) == 'O' Valtype(oWmi) == 'O' у меня в случае недоступного IP oWMI := oLocator:ConnectServer(cComputer,,,,,,128) просто висит чуть дольше , но не валиться кстати cComputer это можбыть не только адрес но и сетевое имя, может с ним поппробывать

Dima: Haz пишет: oWMI := oLocator:ConnectServer(cComputer,,,,,,128 Сделал так try oWMIserver := oWMIob:ConnectServer(cComputer,,,,,,128) catch ? "Bad IP" return END

Haz: ))) мысли сходятся PS отпишись чего да как потом получится - тоже интересно .

Dima: Haz Отписываюсь ;) Не пашет почему то. Работает только на том компе на котором прога лежит. Указав любой живой IP прога кажет Error Исходник на скорую руку. Вроде должно пахать а не пашет ;) [pre2] Proc main (...) local apar apar:=hb_aparams() if len(apar)==0 quit endif ListProcIP(apar[1]) return FUNCTION ListProcIP (cip) #ifndef __XHARBOUR__ #xcommand TRY => BEGIN SEQUENCE WITH {|e| Break( e )} #xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr-> #endif Local oWMIob, oWMIserver, aProcess, objProcess Try oWMIob := CreateObject( "wbemScripting.SwbemLocator" ) oWMIserver := oWMIob:ConnectServer(cip,,,,,,128) Catch ? "Error" RETURN nil End if Valtype(oWMIserver) == 'O' .and. Valtype(oWMIob) == 'O' aProcess :=oWMIserver:ExecQuery( "Select * from Win32_Process" ) For Each objProcess in aProcess ? objProcess:Name next else ? "Object Error" endif RETURN nil [/pre2] Если вот так Test 127.0.0.1 или Test IP адрес компа на котором эта прога лежит то все работает.

PSP: Брандмауэр не рубит выход проги в сеть?

Dima: PSP пишет: Брандмауэр не рубит выход проги в сеть? Нет , выключен он

PSP: Тогда, возможно, недостаточно прав пользователя. Наверное, надо указать, под каким юзером производится подключение http://msdn.microsoft.com/en-us/library/aa393720%28v=vs.85%29.aspx

Dima: PSP Надо будет пробнуть , хотя думал и так прокатит Haz пишет: Если задачу запускать из под учетки администратора домена ( именно так и делал когда-то ) , то к любому компу в домене легко цепляется без явного указания пользователя, пароля и пространства имен -

Haz: скорее всего в правах доступа засада, года два назад именно так и запускал задачу с сервера под админской учеткой . и без проблем лазил по компам

Dima: Haz Видимо надо копать в сторону Security_.Privileges.AddAsString

Haz: видимо , но тут я пас ((

Dima: При желании можно функцию перевести и на Harbour http://infostart.ru/public/165702/ смотрим "Функция получения информации о сетевом окружении." я было начал но потом работы накидали по самое не хочу [pre2] ShellApplication := CreateObject("Shell.Application") Network:= ShellApplication:NameSpace(18) EntireNetwork:= Network:Items():Item("EntireNetwork"):GetFolder [/pre2] PS Тоже самое только проще (test.vbs) // проверил работает нормик [pre2] Set Shell = CreateObject("Shell.Application") 'получение папки "Сетевое окружение" Set objFolder = Shell.NameSpace("::{208D2C60-3AEA-1069-A2D7-08002B30309D}") 'получение папки "Вся сеть" Set objFolder = objFolder.Items().Item("EntireNetwork").GetFolder 'получение папки "Microsoft Windows Network" For Each objItem In objFolder.Items() If objItem.Name = "Microsoft Windows Network" Then Set objFolderNetwork = objItem.GetFolder End If Next 'перебор доменов и рабочих групп For Each objItem In objFolderNetwork.Items() If objItem.IsFolder Then Set objFolder = objItem.GetFolder 'перебор компьютеров For Each objSubItem In objFolder.Items() WScript.Echo objSubItem.Name Next End If Next [/pre2]



полная версия страницы