Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удалённое монтирование сетевых дисков посредством скрипта (http://forum.oszone.net/showthread.php?t=248980)

Elusive87 12-12-2012 18:51 2044099

Удалённое монтирование сетевых дисков посредством скрипта
 
Доброго времени суток, ув. форумчане
Помогите разобраться новичку-скриптописателю.
Поставил перед собой задачу написать скрипт, выполняющий рутинную работу, причём, удалённо. Застрял на задаче монтирования сетевого диска на удалённом компьютере.

Суть следующая. Я выполняю скрипт на компьютере А, он подсоединяется к компьютеру Б, совершает там много всякой всячины, в числе которой и монтирование сетевого диска - шары компьютера В.

Вот такой участочек кода.

читать дальше »
strComputer = ""
UserName = ""
Password = ""
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password)
Set objProcess = objWMIService.Get("Win32_Process")
errReturn = objProcess.Create("net use * \\10.40.*.*\shara_name password /user:domain\username", Null, Null, intProcessID)
WScript.Echo errReturn


Как видите, я решил заставить WMI выполнить команду чтобы примапить шару, поскольку я не нашёл у WMI специального "инструмента" для этих целей. Этот код отрабатывает на ура на компьютере А - шара мапится. На компьютере Б он тоже отрабатывается, объект objProcess возвращает 0, что означает что ему ничто не помешало отправить команду (ясень пень, что сама утилита net нам ничего таким образом не вернёт). :( А вот результате на компьютере Б диск мапится, но его не видно в проводнике, в списке примапленых дисков он висит как не доступный.

Думал что дело в настройках имперсонации и аутентификации WMI. Экспериментировал с ними.

читать дальше »
'SWBemlocator.Security_.ImpersonationLevel = 3
'SWBemlocator.Security_.AuthenticationLevel = 6
'SWBemlocator.Security_.Privileges.AddAsString "SeCreateTokenPrivilege"


Ничего не добился - диск как мапился так и мапится не правильно.
Все 3 компьютера - члены домена. На компьютере А я авторизирован под доменной учёткой, на компьютере Б скрипт авторизируется под локальной учёткой с правами админа (потому, что моя учётка там не имеет админ. полномочий), шару В на компьютере Б мапит от имени доменной учётки (я экспериментировал со своей).

Буду рад выслушать ваши советы, ув. коллеги. А также буду благодарен если кто подскажет как ещё можно монтировать сетевые диски удалённо (logon скрипты в данном случае мне не нужны).

Iska 12-12-2012 19:57 2044140

Цитата:

Цитата Elusive87
объект objProcess возвращает 0, что означает что ему ничто не помешало отправить команду (ясень пень, что сама утилита net нам ничего таким образом не вернёт). »

Не «объект objProcess», а метод «.Create()» возвращает «0», если ему удалось запустить процесс. Ничего более это не означает. Никакой связи с ErrorLevel созданного процесса этот «0» не несёт.

Для кого, для какой учётной записи должен быть смонтирован сетевой ресурс на удалённой машине?

Elusive87 12-12-2012 21:52 2044207

Цитата:

Цитата Iska
Не «объект objProcess», а метод «.Create()» возвращает «0», если ему удалось запустить процесс. Ничего более это не означает. Никакой связи с ErrorLevel созданного процесса этот «0» не несёт. »

Да, не объект, а метод. А по поводу остального я то же самое говорил.

Цитата:

Цитата Iska
Для кого, для какой учётной записи должен быть смонтирован сетевой ресурс на удалённой машине? »

Скрипт авотризируется на машине Б под учётной записью локального администратора (не доменной, поэтому я к net use добавляю доменные credentials, чтобы шара смонтировалась), и для этой же учётной записи будет монтироваться диск, разумеется.

Iska 12-12-2012 22:54 2044257

Цитата:

Цитата Elusive87
Да, не объект, а метод. А по поводу остального я то же самое говорил. »

Elusive87, ясно. Разобрались.

Цитата:

Цитата Elusive87
Скрипт авотризируется на машине Б под учётной записью локального администратора (не доменной, поэтому я к net use добавляю доменные credentials, чтобы шара смонтировалась), и для этой же учётной записи будет монтироваться диск, разумеется. »

Ничего не понятно. Приведите здесь:
читать дальше »
Код:

strComputer = ""
UserName = ""
Password = ""
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password)
Set objProcess = objWMIService.Get("Win32_Process")
errReturn = objProcess.Create("net use * \\10.40.*.*\shara_name password /user:domain\username", Null, Null, intProcessID)
WScript.Echo errReturn


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

Elusive87 13-12-2012 00:37 2044342

читать дальше »
strComputer = "192.168.1.14"
UserName = "192.168.1.14\administrator"
Password = "password"
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password)
Set objProcess = objWMIService.Get("Win32_Process")
errReturn = objProcess.Create("net use * \\192.168.1.20\shara_name password /user:domain\username", Null, Null, intProcessID)
WScript.Echo errReturn


Я со своего компьютера запускаю скрипт и авторизируюсь на компьютере 192.168.1.14 под учётной записью administrator, эта учётная запись хранится локально на 192.168.1.14 и имеет права админа. Общий ресурс хранится на 192.168.1.20, его нужно примонтировать, однако, поскольку компьютер 192.168.1.20 является членом домена и политикой запрещён гостевой доступ (авторизация на 192.168.1.14 прошла не под доменной учёткой, а под локальной), он будет монтироваться от имени доменной учётной записи - domain\username password.

Iska 15-12-2012 14:55 2045815

Elusive87, вот диск смонтирован на разделённый ресурс. Что дальше?

А дальше будет именно это:
Цитата:

Цитата Elusive87
А вот результате на компьютере Б диск мапится, но его не видно в проводнике, в списке примапленых дисков он висит как не доступный. »

«localhost(192.168.1.14)\administrator» у Вас ведь не имеет доступа к «192.168.1.20».

Elusive87 16-12-2012 17:57 2046537

Iska, посмотрите внимательно на код. Я утилите NET передаю те учтёные данные, что имеют доступ на 192.168.1.20
Цитата:

Цитата Elusive87
net use * \\192.168.1.20\shara_name password /user:domain\username »

Если я этого не сделаю, что диск не примонтируется вообще и в списке примонтированных дисков его видно не будет, проверено. Здесь же он монтируется, но он не доступен. Ещё раз уточню.

В проводнике его не видно среди перечня логических дисков. Но видно в перечне примонтированных дисков как недоступный (просмотриваем либо утилитой net либо с помощью "отключить сетевой диск").

У меня такое впечатление, что сам процесс, порождаемый методом Create имеет какие-то ограничения.

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

Пробовал "перехитрить" ограничение - запускал команду через cmd /c start, чтобы таким образом породить новый процесс. Но результат тот же (как такое может быть - ума не приложу). Причём, если сделать то же самое руками на целевом компьютере - всё прекрасно монтируется. Экспериментировал на разных компьютерах. Вот у меня и закрались подозрения насчёт подводных камней самой конструкции класса и метода.

Сразу уточню по поводу "делал руками" чтобы не было лишних вопросов: на удалённых компьютерах я авторизировался под localhost\administartor и выполнял команду net use оттуда. И вообще всякую команду, что я передавал методу Create я сначала проверял на целевом компьютере "вручную".

Kazun 16-12-2012 18:11 2046552

Как вариант создать задачу через schtasks.

Petya V4sechkin 16-12-2012 18:21 2046558

Цитата:

Цитата Elusive87
На компьютере А я авторизирован под доменной учёткой, на компьютере Б скрипт авторизируется под локальной учёткой с правами админа (потому, что моя учётка там не имеет админ. полномочий), шару В на компьютере Б мапит от имени доменной учётки

[решено] Copy отличия в работе при запуске от администратора

Elusive87 16-12-2012 22:21 2046681

Petya V4sechkin, все рабочие станции работают на XP. Но всё же спасибо за любопытный нюанс, он мне пригодится, поскольку в сл. году мы все перейдём на "семёрку".

Iska 16-12-2012 22:27 2046686

Вложений: 1
Цитата:

Цитата Elusive87
Iska, посмотрите внимательно на код. »

Elusive87, я сталкивался с подобным когда-то. Не аналогичным вопросом, но подобным: Файл 91475. Вопрос там в итоге остался открытым.

Elusive87 17-12-2012 20:00 2047504

Цитата:

Цитата Kazun
Как вариант создать задачу через schtasks »

Насколько я понял в Win32_ScheduledJob мгновенное задание создать не получится. Никаких таких параметров я не нашёл. Можно лишь задать текущую минуту для времени запуска, если уж его использовать. Слышал я что у него всё равно какая-то задержка есть, это правда? А то собственноручно проверять пока что не приходилось
Цитата:

Цитата Iska
Elusive87, я сталкивался с подобным когда-то. Не аналогичным вопросом, но подобным: WshNetwork_RemoveNetworkDrive на удаленном компьютере не работает.7z. Вопрос там в итоге остался открытым. »

Судя по тому, что там пишет Русинович, получается, что создаваемый процесс не имеет сетевого доступа и это было спроектировано намеренно. Обидно получается. А что за инструмент(ы) оставили "мелкогмягкие" для доступа по сети? Ведь что выходит - даже если примонтированные диски и существуют заранее, забраться туда всё равно не сможешь - облом!

Max441 19-12-2012 12:45 2048745

я использую psexec для этого.

Код:

@echo off
set /p "c=Введите имя компьютера: "
psexec.exe  -i -s  \\%c% net use l: \\server001\common 
pause



Время: 10:32.

Время: 10:32.
© OSzone.net 2001-