1 (изменено: im2002, 2013-08-15 19:48:07)

Тема: JS:подключение сетевого диска

Задача такая: подключить определённый общий ресурс на сервере, как сетевой диск с определённой буквой на локальный комп., если такая буква в локальной системе уже используется, сообщить об ошибке, если с этой буквой подключён другой общий ресурс, отключить его и подключить требуемый. Написал как мне кажется коряво... Может кто подскажет как покороче(поизящнее)...

var netObj = new ActiveXObject("WScript.Network");            
var fsoObj = WScript.CreateObject("Scripting.FileSystemObject");    

var netDsk = "\\\\192.168.7.22\\distrib", netDsk$ = "\\\\server2003\\distrib", netLetter = "x";

var netDrv = netObj.EnumNetworkDrives(), arr = [], cnt = 0;        
var coll = new Enumerator(netDrv);                

for(i = 0, coll.moveFirst(); !coll.atEnd(); coll.moveNext(), i++)
    {                                // запись в массив имён и ресурсов всех сетевых дисков 
    arr[i] = coll.item();
    }


for(j = 0; j < netDrv.length; j++)
    {
    if( (arr[j].toLowerCase() == (netLetter.toLowerCase() + ":")) && ( (arr[j+1].toLowerCase() == netDsk.toLowerCase()) || (arr[j+1].toLowerCase() == netDsk$.toLowerCase()) ) )
        {                            // буква диска совпадает и ресурс совпадает


        cnt++;                            
        WScript.Quit();                        // выходим, ничего не делая, всё и так хорошо
        }
    else                        
        {
        if(arr[j].toLowerCase() == netLetter.toLowerCase() + ":")
            {                        // совпадает буква диска, про ресурс ничего не известно, кроме того, что он, не тот, который нас интересует
            cnt++;                        
            try                        
                {
                netObj.RemoveNetworkDrive(arr[j], true, true);
                                    
                WScript.Sleep(1000);            // немного спим...

                DrvConn();                // вызов функции
                }
            catch(err)
                {
                WScript.Echo("Ошибка отключения диска:\n " + err.message);
                WScript.Qiut();                // завершение скрипта по ошибке
                }
            
            }
        }
    }                              
if(cnt == 0)                                
    {DrvConn();}                            // вызов ф-ции, если интересующий ресурс не был найден и буква также "не встретилась", среди сетевых дисков.


function DrvConn()
    {
    var drvColl = fsoObj.Drives;                    
    var en = new Enumerator(drvColl);                

    while(!en.atEnd())                        
        {
        if((en.item().DriveLetter.toLowerCase() == netLetter.toLowerCase()) && (en.item().DriveType != 3))
            {
            WScript.Echo("Подключение сетевого диска как  \"" +  netLetter.toUpperCase() + "\"  невозможно\n" +
                         "так как такой диск уже присутствует в системе и это не сетевой диск");
            WScript.Quit();                    // завершение работы по ошибке                
            }
        en.moveNext();
        }
    try                                
        {
        netObj.MapNetworkDrive(netLetter + ":", netDsk, true);
                                    
        }
    catch(err)
        {
        WScript.Echo("Ошибка подключения диска: " + err.message);
        WScript.Quit();                        // завершение работы по ошибке        
        }
    }