Книга: Windows Script Host для Windows 2000/XP

Подключение и отключение сетевых дисков и принтеров

Подключение и отключение сетевых дисков и принтеров

Имеющиеся в локальной сети общедоступные ресурсы (диски и принтеры) можно посредством сценария подключить к рабочей станции для совместного использования. Подключаемому сетевому диску при этом нужно поставить в соответствие незанятую букву локального диска (например, если в системе уже имеются диски С:, D: и Е: (локальные или сетевые), то сетевой диск можно подключить под буквой F: или K:, но не Е:). В случае подключения сетевого принтера можно либо напрямую соединиться с этим принтером (для печати из приложений Windows), либо поставить в соответствие удаленному принтеру локальный порт (для печати из старых приложений MS-DOS).

Замечание

Сетевые диски и принтеры также можно подключить с помощью Проводника Windows или выполнив соответствующую команду NET USE.

В качестве примера рассмотрим JScript-сценарий MapResources.js (листинг 2.50), в котором производится подключение диска K: к сетевому ресурсу RS_NT_Serverd и установка связи локального порта LPT1 с сетевым принтером 104_StepankovaHP.

Сначала нужно создать экземпляры объектов WshNetwork и WshShell:

WshNetwork = WScript.CreateObject("WScript.Network");
WshShell = WScript.CreateObject("WScript.Shell");

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

WshNetwork.RemoveNetworkDrive(Drive);

(переменной Drive заранее было присвоено значение "K:"). При выполнении этой команды может произойти ошибка времени выполнения (например, диск K: не существует или возникла ошибка при отключении связанного с ним сетевого ресурса), поэтому вызов метода RemoveNetworkDrive помещается внутрь блока try конструкции try…catch языка JScript, которая позволяет обрабатывать такие ошибки:

try {
 //Отключаем сетевой диск
 WshNetwork.RemoveNetworkDrive(Drive);
} catch (e) { //Обрабатываем возможные ошибки
if (е.number != 0) {
 //Выводим сообщение об ошибке
 IsError=true;
 Mess="Ошибка при отключении диска "+Drive + "nКод ошибки: "+
  е.number+"nОписание: " + е.description;
 WshShell.Popup(Mess, 0, "Отключение сетевого диска", vbCritical);
 }
}

Теперь в случае возникновения ошибки при работе метода RemoveNetworkDrive управление передастся внутрь блока catch, а в полях переменной-объекта е будет содержаться информация о произошедшей ошибке (е.number — числовой код ошибки, е.description — краткое описание ошибки); эта информация отображается в диалоговом окне (рис. 2.23).


Рис. 2.23. Информация об ошибке, произошедшей при отключении диска K:

Если же отключение диска K: прошло успешно, на экран выводится диалоговое окно с информацией об этом (рис. 2.24):

if (!IsError) { //Все в порядке
 Mess="Диск "+Drive+" отключен успешно";
 WshShell.Popup(Mess, 0, "Отключение сетевого диска", vbInformation);
}


Рис. 2.24. Информация об успешном отключении диска K:

Аналогичный блок try…catch используется и при подключении сетевого диска:

try {
 //Подключаем сетевой диск
 WshNetwork.MapNetworkDrive(Drive, NetPath);
} catch (e) {
 //Обрабатываем возможные ошибки
 if (e != 0) {
  //Выводим сообщение об ошибке
  IsError=true;
  Mess="Ошибка при подключении диска " + Drive + " к " + NetPath+
   "nКод ошибки: "+е.number + "nОписание: "+е.description;
   WshShell.Popup(Mess, 0, "Подключение сетевого диска", vbCritical);

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


Рис. 2.25. Информация об ошибке, произошедшей при подключении диска K:

Освобождение локального порта (метод RemovePrinterConnection), подключение сетевого принтера к этому порту (метод AddPrinterConnection) и обработка ошибок времени выполнения, которые могут возникнуть при этих действиях, производится в сценарии аналогичным образом.

Листинг 2.50. Отключение и подключение сетевых ресурсов (JScript)

/********************************************************************/
/* Имя: MapResources.js                                             */
/* Язык: JScript                                                    */
/* Описание: Отключение и подключение сетевых дисков и принтеров    */
/********************************************************************/
//Объявляем переменные
var WshNetwork,WshShell,Drive,NetPath,Port,NetPrinter,Mess,IsError;
//Инициализируем константы для диалоговых окон
var vbCritical=16,vbInformation=64;
Drive="K:";      //Буква диска
//NetPath="\RS_NT_Serverd";  //Сетевой путь для подключения диска
NetPath="\RS_NT_Serverd";  //Сетевой путь для подключения диска
Port="LPT1";   //Название локального порта
//Сетевой путь для подключения принтера
NetPrinter="\104_StepankovaHP";
//Создаем объект WshNetwork
WshNetwork = WScript.CreateObject("WScript.Network");
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
/*************  Отключение сетевого диска  ***********************/
IsError=false;
try {
 //Отключаем сетевой диск
 WshNetwork.RemoveNetworkDrive(Drive);
} catch (e) {  //Обрабатываем возможные ошибки
 if (e != 0) {
  //Выводим сообщение об ошибке
  IsError=true;
  Mess="Ошибка при отключении диска "+Drive+"nКод ошибки: "+
   e.number+"nОписание: "+e.description;
  WshShell.Popup(Mess,0,"Отключение сетевого диска",vbCritical);
 }
}
if (!IsError) {
 //Все в порядке
 Mess="Диск "+Drive+" отключен успешно";
 WshShell.Popup(Mess,0,"Отключение сетевого диска",vbInformation);
}
/*************  Подключение сетевого диска  ***********************/
IsError=false;
try {
 //Подключаем сетевой диск
 WshNetwork.MapNetworkDrive(Drive,NetPath);
} catch (e) { //Обрабатываем возможные ошибки
 if (e != 0) {
  //Выводим сообщение об ошибке
  IsError=true;
  Mess="Ошибка при подключении диска " + Drive + " к " + NetPath+
   "nКод ошибки: "+e.number+"nОписание: "+e.description;
  WshShell.Popup(Mess,0,"Подключение сетевого диска",vbCritical);
 }
}
if (!IsError) {
 //Все в порядке
 Mess="Диск "+Drive+" успешно подключен к "+NetPath;
 WshShell.Popup(Mess,0,"Подключение сетевого диска",vbInformation);
}
/*************  Освобождение локального порта  ***********************/
IsError=false;
try {
 //Разрываем связь с сетевым принтером
 WshNetwork.RemovePrinterConnection(Port);
} catch (e) {
 if (e != 0) {  //Обрабатываем возможные ошибки
  //Выводим сообщение об ошибке
  IsError=true;
  Mess="Ошибка при отключении порта "+Port+"nКод ошибки: "+
   e.number+"nОписание: "+e.description;
  WshShell.Popup(Mess,0,"Отключение локального порта от сетевого ресурса",vbCritical);
 }
}
if (!IsError) {
 //Все в порядке
 Mess="Порт "+Port+" отключен успешно";
 WshShell.Popup(Mess,0,"Отключение локального порта от сетевого ресурса",vbInformation);
}
/*****  Подключение локального порта  к сетевому принтеру  *********/
IsError=false;
try {
 //Подключаем сетевой принтер к локальному порту
 WshNetwork.AddPrinterConnection(Port,NetPrinter);
} catch (e) {  //Обрабатываем возможные ошибки
 if (e != 0) {
  //Выводим сообщение об ошибке
  IsError=true;
  Mess="Ошибка при переназначении порта "+Port+ " на "+NetPrinter+
   "nКод ошибки: "+e.number+"nОписание: "+e.description;
  WshShell.Popup(Mess,0,"Подключение локального порта к сетевому ресурсу",vbCritical);
 }
}
if (!IsError) {
 //Все в порядке
 Mess="Порт "+Port+" успешно подключен к "+NetPrinter;
 WshShell.Popup(Mess,0,"Подключение локального порта к сетевому ресурсу",vbInformation);
}
/*************  Конец *********************************************/

Реализация того же сценария на языке VBScript представлена в листинге 2.51. Главное отличие здесь состоит в способе обработки возможных ошибок времени выполнения. В VBScript для этой цели предназначен оператор On Error Resume Next — при возникновении ошибки после выполнения этого оператора сценарий не прервется, а просто перейдет к выполнению следующей строки кода. Проанализировать же возникшую ошибку можно с помощью специального объекта Err, в полях Number и Description которого будут соответственно содержаться код и описание ошибки.

Листинг 2.51. Отключение и подключение сетевых ресурсов (VBScript)

'********************************************************************
' Имя: MapResources.vbs
' Язык: VBScript
' Описание: Отключение и подключение сетевых дисков и принтеров
'********************************************************************
Option Explicit
' Объявляем переменные
Dim WshNetwork,Drive,NetPath,Port,NetPrinter
Drive="K:"   ' Буква диска
NetPath="RS_NT_Serverd"    ' Сетевой путь для подключения диска
Port="LPT1"   ' Название локального порта
' Сетевой путь для подключения принтера
NetPrinter="104_StepankovaHP"
' Создаем объект WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next  ' Включаем обработку ошибок времени выполнения
'*************  Отключение сетевого диска  ***********************
' Отключаем сетевой диск
WshNetwork.RemoveNetworkDrive Drive
If Err.Number<>0 Then
 Mess="Ошибка при отключении диска " & Drive & vbCrLf & _
  "Код ошибки: " &  e.number & vbCrLf &+ _
  "Описание: " & e.description
 WshShell.Popup Mess,0,"Отключение сетевого диска",vbCritical
Else
 ' Все в порядке
 Mess="Диск " & Drive & " отключен успешно"
 WshShell.Popup Mess,0,"Отключение сетевого диска",vbInformation
End If
'*************  Подключение сетевого диска  ***********************
' Подключаем сетевой диск
WshNetwork.MapNetworkDrive Drive,NetPath
If Err.Number<>0 Then
 Mess="Ошибка при подключении диска " & Drive & " к " & NetPath &_
  "Код ошибки: " & e.number & "Описание: " & e.description
 WshShell.Popup Mess,0,"Подключение сетевого диска",vbCritical
Else
 ' Все в порядке
 Mess="Диск " & Drive & " успешно подключен к " & NetPath
 WshShell.Popup Mess,0,"Подключение сетевого диска",vbInformation
End If
'*************  Освобождение локального порта  ***********************
' Разрываем связь с сетевым принтером
WshNetwork.RemovePrinterConnection Port
If Err.Number<>0 Then
 Mess="Ошибка при отключении порта " & Port & "Код ошибки: " &_
  e.number & "Описание: " & e.description
 WshShell.Popup Mess,0,"Отключение порта от сетевого ресурса",vbCritical
Else
 ' Все в порядке
 Mess="Порт " & Port & " отключен успешно"
 WshShell.Popup Mess,0,"Отключение порта от сетевого ресурса",_
  vbInformation
End If
'*****  Подключение локального порта  к сетевому принтеру  *********
' Подключаем сетевой принтер к локальному порту
WshNetwork.AddPrinterConnection Port,NetPrinter
If Err.Number<>0 Then
 Mess="Ошибка при переназначении порта " & Port & " на " & NetPrinter &_
  "Код ошибки: " & e.number & "Описание: " & e.description
 WshShell.Popup Mess,0,"Подключение порта к сетевому ресурсу",vbCritical
Else
 ' Все в порядке
 Mess="Порт " & Port & " успешно подключен к " & NetPrinter
 WshShell.Popup Mess,0,"Подключение порта к сетевому ресурсу",
  vbInformation
End If
'*************  Конец *********************************************

Оглавление книги


Генерация: 2.470. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз