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

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

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

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

Dima: Выкроил минутку ;) Пробуем в лоб перевести VBScript на Harbour В тексте указал где падает прога и хз почему [pre2] Proc main local Shell local objFolder local objFolderNetwork local objItem local objSubItem Shell:=CreateObject("Shell.Application") // 'получение папки "Сетевое окружение" objFolder:=Shell:NameSpace("::{208D2C60-3AEA-1069-A2D7-08002B30309D}") // 'получение папки "Вся сеть" objFolder:=objFolder:Items():Item("EntireNetwork"):GetFolder // 'получение папки "Microsoft Windows Network" For Each objItem In objFolder:Items() // а вот тут почему то падает //Error WINOLE/1005 Argument error: __OLEENUMCREATE (DOS Error -2147352573) If objItem:Name == "Microsoft Windows Network" objFolderNetwork:= objItem:GetFolder exit EndIf Next // 'перебор доменов и рабочих групп For Each objItem In objFolderNetwork:Items() If objItem:IsFolder objFolder:=objItem:GetFolder // 'перебор компьютеров For Each objSubItem In objFolder:Items() ? objSubItem:Name Next EndIf Next return [/pre2]

Andrey: Dima пишет: For Each objItem In objFolder:Items() // а вот тут почему то падает А что будет если получить ? objFolder:Items() хХарбор 1.2.1 падает на строке: // 'получение папки "Вся сеть" objFolder:=objFolder:Items():Item("EntireNetwork"):GetFolder

Andrey: Dima пишет: PS Тоже самое только проще (test.vbs) // проверил работает нормик Не работает: Win8 32bit


Dima: Andrey пишет: Win8 32bit я проверял на XP у себя и удаленно тож на XP , работало. Счас чекану на 2008 64 бит удаленно Проверил та же фигня что у тебя.......

Andrey: Взял функцию из 1С. Язык еще тот... Без вливания не разберешься... Не знаю как перевести части кода (пометил красным цветом) Вот код: * Translation 1C at Harbour http://clipper.borda.ru #define Функция Function #define КонецФункции Return Nil #define Если IF #define Тогда THEN #define КонецЕсли; ENDIF #define Прервать; EXIT #define Для Каждого FOR #define КонецЦикла; NEXT #define нПП nI #define ---> Добавляйте // Функция получения информации о сетевом окружении. // Возвращает: // Таблица значений со структурой: // №, Домен, Компьютер, IP-адрес, Комментарий. // // Рекомендация: // Перед применением проверить на компьютерах // Windows Management Instrumentation (WMI): // 1. Состояние служб. // 2. Разрешение в брандмауэре. // // Примечание: // 1. WMI - медленнее, PING - быстрее. // 2. WMI - безоконный, PING - с формированием окна. // &НаСервереБезКонтекста Функция NetworkNeighborhood() ТСетевоеОкружение = Новый ТаблицаЗначений; ТСетевоеОкружение.Колонки.Добавить("нПП", ,"№"); ТСетевоеОкружение.Колонки.Добавить("Домен"); ТСетевоеОкружение.Колонки.Добавить("Компьютер"); ТСетевоеОкружение.Колонки.Добавить("IP"); ТСетевоеОкружение.Колонки.Добавить("Комментарий"); Попытка ShellApplication = Новый COMОбъект("Shell.Application"); // Сетевое окружение. Network = ShellApplication.NameSpace(18); // Вся сеть. EntireNetwork = Network.Items().Item("EntireNetwork").GetFolder; Для Каждого EntireNetworkItem ИЗ EntireNetwork.Items() Цикл Если EntireNetworkItem.Name = "Microsoft Windows Network" Тогда MicrosoftWindowsNetwork = EntireNetworkItem.GetFolder; Прервать; КонецЕсли; КонецЦикла; нПП = 0; Для Каждого MicrosoftWindowsNetworkItem ИЗ MicrosoftWindowsNetwork.Items() Цикл // Рабочая группа или Домен. Domain = MicrosoftWindowsNetworkItem.GetFolder; Домен = ВРег(Domain.Title); НоваяСтрока = ТСетевоеОкружение.Добавить(); нПП = нПП+1; НоваяСтрока.нПП = нПП; НоваяСтрока.Домен = Домен; Для Каждого DomainItem ИЗ Domain.Items() Цикл // Компьютер. Компьютер = ВРег(DomainItem.Name); НоваяСтрока = ТСетевоеОкружение.Добавить(); нПП = нПП+1; НоваяСтрока.нПП = нПП; НоваяСтрока.Домен = Домен; НоваяСтрока.Компьютер = Компьютер; Попытка WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Компьютер + "\root\cimv2"); // Без вывода окна на экран. IPConfig = WinMGMT.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where ipenabled = true"); // IP-адреса. Для Каждого IPCFG ИЗ IPConfig Цикл Если ЗначениеЗаполнено(IPCFG.IPAddress) Тогда Для Каждого IP ИЗ IPCFG.IPAddress Цикл НоваяСтрока = ТСетевоеОкружение.Добавить(); нПП = нПП+1; НоваяСтрока.нПП = нПП; НоваяСтрока.Домен = Домен; НоваяСтрока.Компьютер = Компьютер; НоваяСтрока.IP = IP; НоваяСтрока.Комментарий = "WMI"; КонецЦикла; КонецЕсли; КонецЦикла; Исключение Сообщить("Проверьте на компьютере " + Компьютер + " |Windows Management Instrumentation (WMI): |1. Состояние служб, отвечающих за WMI; |2. Разрешение в брандмауэре для WMI."); WshShell = Новый COMОбъект("WScript.Shell"); // Exec - выводит окно на экран. WshExec = WshShell.Exec("ping -n 1 " + Компьютер); TextStream = WshExec.StdOut; // IP-адреса. Пока НЕ TextStream.AtEndOfStream Цикл СтрокаIP = TextStream.ReadLine(); ПозицияСкобкиЛевая = Найти(СтрокаIP, "["); Если ПозицияСкобкиЛевая > 0 Тогда ПозицияСкобкиПравая = Найти(СтрокаIP, "]"); IP = Сред(СтрокаIP, ПозицияСкобкиЛевая+1, ПозицияСкобкиПравая-ПозицияСкобкиЛевая-1); НоваяСтрока = ТСетевоеОкружение.Добавить(); нПП = нПП+1; НоваяСтрока.нПП = нПП; НоваяСтрока.Домен = Домен; НоваяСтрока.Компьютер = Компьютер; НоваяСтрока.IP = IP; НоваяСтрока.Комментарий = "PING"; Прервать; КонецЕсли; КонецЦикла; КонецПопытки; КонецЦикла; КонецЦикла; Исключение КонецПопытки; Возврат ТСетевоеОкружение; КонецФункции

Dima: Andrey пишет: Взял функцию из 1С. Язык еще тот... Без вливания не разберешься... Да тут без 100 грамм точно не обойтись кто не готов воспринять язык 1С , мне лично тяжело понять такой текст так как не привык к типа "КонецЦикла" или "КонецФункции"и тд и тп ЗЫ А это жесть "Если ПозицияСкобкиЛевая"

Andrey: Dima пишет: А это жесть "Если ПозицияСкобкиЛевая"

PSP: Андрей, "ТСетевоеОкружение" - объект, содержащий таблицу. "Попытка" = "TRY" или "BEGIN SEQUENCE WITH" "Исключение" = "CATCH" или "RECOVER" "ПозицияСкобкиЛевая" - просто переменная.



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