1 (изменено: im2002, 2012-08-04 19:02:39)

Тема: JS: Как запустить скрипт от имени определённого пользователя.

Не могу грамотно решить такую проблему: есть удалённая машина в локальной сети, на которую хочу скопировать файл test.rar.
На удалённом компе мне известны имя пользователи и пароль. Не знаю как их "прикрутить"  к данному скрипту, чтобы последняя строка не
выдавала ошибку: "Вход в систему не произведён, имя пользователя или пароль не опознаны".

var fsObj = new ActiveXObject("Scripting.FileSystemObject");            // объект fso
dest = "\\\\192.168.7.2\\c$\\Users\\Администратор\\AppData\\Local";        // папка назначения на удалённом компьютере

fl = fsObj.GetFile("test.rar");                                           // получение объекта File, test.rar лежит в той же папке, откуда запускается скрипт

fl.Copy(dest + "\\" + fl.Name, true);                                                   // копирование файла test.rar в директорию, определённую в dest, под тем же именем

P.S. домена нет, заводить на своей машине такого же пользователя как на удалённой, входить под ним и потом запускать скрипт - не подходит. (хотя в этом случае всё работает).

2

Re: JS: Как запустить скрипт от имени определённого пользователя.

im2002 пишет:

Не могу грамотно решить такую проблему: есть удалённая машина в локальной сети, на которую хочу скопировать файл test.rar.
На удалённом компе мне известны имя пользователи и пароль. Не знаю как их "прикрутить"

Если работаете в рамках WSH, то советую посмотреть на метод "MapNetworkDrive" объекта "WScript.Network", а после копирования примапленный диск отключать.

По-умолчанию подключение ресурса выполняется от имени текущего пользователя, но по идее можно в аргументах передавать и имя с паролем. Вот, можно почитать кратенько мануал:
http://www.computerperformance.co.uk/Lo … uments.htm

Имя локального пользователя по идее должно содержать и имя сервера (удаленной машины)

Вот, пример подключения-отключения ресурса объектом "WScript.Network", но без передачи еще и данных пользователя:


//************************************************
// Файл:    MapDrives.js (Пример WSH в JScript) 
// Автор:  (c) G. Born
//
// Отображение сетевых дисководов и Листинг их внутри 
// диалоговое окно
//
// Mapping network drives and listing them in a 
// dialog box
//************************************************
 
var machine = "\\\\Wien\\";
 
// Create a new WshNetwork object, which we need
// to access network properties.
var WshNetwork = WScript.CreateObject("WScript.Network");
 
// Remove mapping to prevent run-time errors.
DisconnectDrive("X:");
DisconnectDrive("Y:");
DisconnectDrive("Z:");
 
// Create some mappings for network drives.
ConnectDrive("X:", machine + "C");
ConnectDrive("Y:", machine + "D");
ConnectDrive("Z:", machine + "E");
 
// List all mapped drives.
Text = "Mapped drives \n";
 
var oDevices = WshNetwork.EnumNetworkDrives();
 
for (var i = 0; i <= oDevices.length - 2; i = i + 2)
{
    Text = Text + oDevices(i) + "    " + oDevices(i+1) + "\n";
} 
 
WScript.Echo(Text);
 
function DisconnectDrive(drive)
{
    try
    {
        WshNetwork.RemoveNetworkDrive(drive);
    }
    catch (e)
    {
        if (e != 0)       // Display a possible error message.
            WScript.Echo("Remove " + drive, "\nError code : ", 
                         e.number, e.description);
    }
}
 
function ConnectDrive(drive, resource)
{
    try
    {
        WshNetwork.MapNetworkDrive(drive, resource);
    }
    catch (e)
    {
        if (e != 0)          // Display a possible error message.
            WScript.Echo("Map " + drive + " to " + resource,
                         "\nError code : ", e.number, e.description);
    }
}
 
//*** End

ps. А батником можно выполнить копирования на ресурс без примапливания ресурса на привод, например, где-то так:


rem подключение ресурса с правами указанного пользователя
net use \\192.168.7.2\c$ /user:192.168.7.2\имя_пользователя пароль_пользователя

rem само копирование
copy .\test.rar \\192.168.7.2\c$\Users\Администратор\AppData\Local

rem отключение от ресурса, правда - я не уверен, что так можно
net use \\192.168.7.2\c$ /delete
WBR. Roman

3 (изменено: im2002, 2012-08-09 16:12:50)

Re: JS: Как запустить скрипт от имени определённого пользователя.

использовать объект Fso либо WshNetwork абсолютно без разницы:

строка:

objNet.MapNetworkDrive("Y:", rmPath);

где rmPath = путь к папке на удалённом ПК
даст ошибку "неправильный сетевой пароль".

надо понять как пройти авторизацию. я нашел метод (из ADSI):

var dso = GetObject("WinNT:");                    
var adsi = dso.OpenDSObject("WinNT://192.168.7.2", "UserNeme", "Password", 0);

такой метод работает. прочитать бы где подробнее про авторизацию...
я например не пойму почему вместо конструкции как выше нельзя использовать:

var dso = GetObject("WinNT://192.168.7.2", "UserNeme", "Password", 0);

да, кстати, как в вашей Rom5 ссылке:

objNet.MapNetworkDrive("Y:", rmPath, false, "UserNeme", "Password");

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