Показать полную графическую версию : Windows Scripting Host trouble...
Привет всем!!!
Народ, кто сталкивался с WSH - помогите.....
Пытаюсь подключить сетевой диск, предварительно удалив старый, делаю:
JScript:
var Network = WScript.CreateObject("WScript.Network");
Network.RemoveNetworkDrive ("O:");
Network.MapNetworkDrive ("O:", "\\\\krrunion\\user");
При запуске выдает ошибку:
"Локальное имя устройства уже используется для подключения к другому сетевому ресурсу"
Получается, что Network.RemoveNetworkDrive ("O:") отрабатывает, а Network.MapNetworkDrive ("O:", "\\\\krrunion\\user") - нехочет, ругается.........
В чем проблема, не пойму?! Помогите.....
З.Ы. Да, кстати паузу между этими коммандами я пробовал ставить - тоже не помогает
команды
net use o: /del
net use o: \\krrunion\user
выполняются успешно?
Хорошо бы перехватывать ошибку в строке Network.RemoveNetworkDrive ("O:"); если О: не подключен.
У меня этот скрипт выполняется без проблем.
2DAnG
Да в том то и дело, что net use выполняется успешно, а вот Network.MapNetworkDrive ("O:", "\\\\krrunion\\user"); - нет. ?!
До использования Network.RemoveNetworkDrive ("O:"); выполняется проверка подключен ли сетевой диск, аль нет, так что тут проблем никаких.....
Такое ощущение что WSH просто не могёт подряд выполнять команды RemoveNetworkDrive и MapNetworkDrive
???
Сорри, поторопился с ответом.
Расследование показало, что нужно использовать
Network.RemoveNetworkDrive ("O:",1,1);
object.RemoveNetworkDrive(strName, [bForce], [bUpdateProfile])
2DAnG
Во спасибо, выручил.......последние два параметра оказались как нельзя кстати :)
Да, кстати, а ты пробовал подключать сетевые принтеры через метод AddWindowsPrinterConnection?
Насколько я понял можно подключать только те принтеры, которые непосредственно подключены к машине на базе NT.
А у меня в сети подавляющее большинство машин с 98-й виндой и этот метод не отрабатывает......при попытке подключения AddWindowsPrinterConnection("\\\\CompName\\EPSON") пишет:
"The remote server machine does not exist or is unavailable", хотя эта машина есть и доступ к ней тоже есть и принтер расшаренный и все такое.........
Может сталкивался?!
To Mr Dan:
Объяните чайнику: Прочитал ваши письма, вдохновился,
скопировал следующие строки в файл FFF.js
var Network = WScript.CreateObject("WScript.Network");
Network.RemoveNetworkDrive ("n:",1,1);
Network.MapNetworkDrive ("n:", "\\\\comp1\\c$");
щелкнул дважды по этому файлу и получил ошибку во второй строке (символ 1), недоступный сетевой диск
Что я сделал не так? Команда net use n: \\comp1\c$ исправно срабатывает и подключает сетевой диск N.
Естественно, когда запускаю *.js n-диска нет.
Вообще зачем вторая строка? Пробовал ее переставить третьей - не помогло.
Функцию Block Scripting в Norton АV отключил, может ее надо отключать и на компе, куда подключаешься?
Исправлено: SergOst, 14:58 6-11-2003
2SergOst
Если тебе просто нужно подключить диск, делаешь Network.MapNetworkDrive ("n:", "\\\\comp1\\c$"), без Network.RemoveNetworkDrive ("n:",1,1).
В твоём же случае получается, что сначала выполняется команда *Network.RemoveNetworkDrive ("n:",1,1), которая пытается отключить диск n: , но поскольку диска n: у тебя нету, она тебе и ругается, грит мол недоступный сетевой диск.
Делай так:
var Network = WScript.CreateObject("WScript.Network");
Network.MapNetworkDrive ("n:", "\\\\comp1\\c$");
и все должно быть ОК.
З.Ы. А вобще при желании можешь написать ф-ю которая бы сначала проверяла подключен ли уже сетевой диск или нет, а потом в зависимости от результата действуешь....:)
Например моя ф-я выглядит так:
function CheckNetworkMapping(DriveLetter,Path)
*// Возвращаемые значения:
* * // 0 - диск не найден
* * // 1 - диск найден, но несоответствует Path
* * // 2 - диск найден и соответствует Path
* *var Bool;
* *var Result;
* * Bool = false;
* *var Drives = Network.EnumNetworkDrives();
* *for(var i = 0; i < Drives.length; i += 2)
* *{
* * *if(Drives.Item(i).toLowerCase() == DriveLetter.toLowerCase())
* * * { Bool = true; if(Drives.Item(i+1).toLowerCase()==Path.toLowerCase()) Result = 2; else Result = 1;
* * * * break;
* * * }
* *}
* *if(Bool)
* * return Result
* *else
* * return Result = 0; *
}
To Mr Dan
Спасибо, все получилось с подключением-отключением.
А эту функцию тоже можно в *.js файл запихать и в нем вызывать?
функция не совсем понятна: что имеется в виду под Path, когда диск подключен? UNC имя что-ли? (в моем случае \\comp1\c$ ?)
Если да, то оно прямо так в кавычках строкой и подставляется в вызов функции, как и "n:"?
2SergOst
>> А эту функцию тоже можно в *.js файл запихать и в нем вызывать?
Using Windows Script Files (.wsf)
A Windows script (*.wsf) file is a text document containing Extensible Markup Language (XML) code. It incorporates several features that offer you increased scripting flexibility. Because Windows script files are not engine-specific, they can contain script from any Windows Script compatible scripting engine. They act as a container.
With .wsf files, you can take advantage of the following features as you create your scripts:
.wsf files support
Include statements, Multiple engines,Type libraries, Tools,Multiple jobs in one file.
Include Statements
If you have .js and .vbs files from previous Windows Script Host projects, a .wsf file enables you to use them with Windows Script Host. A .wsf file encapsulates a library of functions that can in turn be used by multiple .wsf files.
The following example shows a .wsf file that includes a JScript file (fso.js), plus a VBScript function that calls a function (GetFreeSpace) in the included file. The contents of fso.js are also shown.
<job id="IncludeExample">
<script language="JScript" src="FSO.JS"/>
<script language="VBScript">
' Get the free space for drive C.
s = GetFreeSpace("c:")
WScript.Echo s
<sScript>
</job>
The fso.js file contains the following:
function GetFreeSpace(drvPath) {
var fs, d, s;
fs = new ActiveXObject("Scripting.FileSystemObject");
d = fs.GetDrive(fs.GetDriveName(drvPath));
s = "Drive " + drvPath + " - " ;
s += d.VolumeName;
s += " Free Space: " + d.FreeSpace/1024 + " Kbytes";
return s;
}
>>функция не совсем понятна: что имеется в виду под Path, когда диск подключен? UNC имя что-ли? (в моем случае \\comp1\c$ ?)
>>Если да, то оно прямо так в кавычках строкой и подставляется в вызов функции, как и "n:"?
Под Path имеется в виду UNC имя, записывается в кавычках, например CheckNetworkMapping("n:","\\\\disk\\dir")
Mr Dan
ты пробовал подключать сетевые принтеры через метод AddWindowsPrinterConnection?
нет. Но судя по "ручному подключению", для подключения принтера win9x нужно указывать его драйвер. Возможно. проблема в этом.
P.S. я не спец по WSH, и не очень его люблю за громоздкость. perl, имхо, гораздо симпатичнее :)
DAnG
Интересно, а в чем заключается громоздкость WSH ? Тем более ,он поддерживает Perl. Просто себе хост и все.....работает довольно быстро.
Option Explicit
Dim Network
Const PrinterShare = "\\server\printer"
Set Network = CreateObject("Wscript.Network")
'Network.AddWindowsPrinterConnection PrinterShare
Network.SetDefaultPrinter PrinterShare
строчка типа
Network.AddWindowsPrinterConnection PrinterShare
отрабатывается только на принтерах при сервере 2000
а если 98 или jet стоит то не будет работать
а для мапирования дисков мне и полегче хватает
sub groupsmap(objDiskName,objDiskMap)
On Error Resume Next
Add2Log Now & ":Подключение диска -" & objDiskName & " от - " & objDiskMap
objNetwork.RemoveNetworkDrive objDiskName, True, True
objNetwork.MapNetworkDrive objDiskName, objDiskMap
Err.clear
end sub
Sub Add2Log (txt)
Const Myfile = "C:\MyLog.txt"
Const ForAppending = 8
Dim fso, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(MyFile, ForAppending, TRUE)
file.WriteLine (txt)
Set file = Nothing
End Sub
Помогите написать скрипт для создания ярлыков в папке
%USERPROFILE%\Application Data\Microsoft\Internet Explorer\Quick Launch
Заранее спасибо
jurapolet
20-03-2009, 10:24
А где найти этот Windows Script Host, поиск ничо не нашёл...
2poisonS
20-03-2009, 11:49
jurapolet, Google (http://www.google.com.tj/search?q=Windows+Script+Host&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a) в помощь...
jurapolet
20-03-2009, 12:36
jurapolet, Google в помощь... »
Это я уже находил, везде книги и описание, реально из файлов нашёл только
Windows Script 5.6 for Windows XP and Windows 2000, куда это ставить, в систему или дистрибутив? В систему установил - тоже самое, ничё не изменилось. Специалисты!!! Покажите пальцем чо откуда взять и куда положить, тем более раз эта проблема не единичная.
Enforcer2K
20-03-2009, 13:25
А где найти этот Windows Script Host »
В системе он уже есть. Создайте текстовой файл:
msgbox("AAA")
измените расширение на .vbs, а потом выполните. Работает?
А можно ли сделать что-то на подобие этого »
Конечно! Сделать можно все.
jurapolet
20-03-2009, 14:05
В системе он уже есть. Создайте текстовой файл: »
Создал текстовый файл msgbox, сохранил как msgbox.vbs, запускаю двойным кликом открывается как пустой текстовый файл
Запускаю меню Выполнить, ввожу msgbox.vbs, появляется это:
http://pic.ipicture.ru/uploads/090320/40868/7UUBv7165Q.jpg
Извиняюсь, неправильно сделал.
Щас просто изменил расширение, запускаю двойным кликом появляется окно выбора программы для открытия, выбираю Microsoft (R) Windows Based Script Host, появляется такое окно:
http://pic.ipicture.ru/uploads/090320/40868/jxMFRJjP4p.jpg
Habetdin
20-03-2009, 14:10
Создал текстовый файл msgbox, сохранил как msgbox.vbs »
а внутри написали что-нибудь?
Запускаю меню Выполнить, ввожу msgbox.vbs »
вводите полный путь, например "C:\Test\Script.vbs"
jurapolet
20-03-2009, 14:15
Внутри ни чо не писал, чистый файл, сообщает не обнаружено ядро, хотя программа в окне выбора есть Microsoft (R) Windows Based Script Host. Ошибку в предыдущем посте отредактировал
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.