PDA

Показать полную графическую версию : [решено] Нужен VBS скрипт для GPO (мапинг сетевого диска, запуск файла, отключение диска)


Anton04
04-05-2010, 10:40
Помогите написать скрипт:

необходимо в при запуске ПК (до логина пользователя, т.е. когда обрабатывается GPO ПК) выполнение несложного vbs скрипта который делает следующее:

1. мапит диск \\server\script
2. выполняет определённую команду или запускает файл (exe)
3. отключает диск
единственное что ещё хотелось бы предусмотреть это возможность недоступности сервера по пути и в этом случае просто завершения работы скрипта без создания лог файла с ошибкой.

Я даже более чем уверен что что-то подобное уже реализовывалось, поделитесь кодом.

P.S. Само собой что данный скрипт выполняется в сети домена.
P.P.S. Скрипт должен быть совместим, т.е. выполняться на Windows XP/Vista/7/2008/2008R2.
P.P.P.S. Поиск в Интернете и на форуме дал только код для решения отдельных элементов задачи, а решение задачи в целом не нашёл.

Вот примеры, того чего нашёл:

Подключить сетевой диск из VBScript


Set objNetwork = CreateObject("WScript.Network")
objNetwork.MapNetworkDrive "X:", "\\server\script"


Отключить сетевой диск из VBScript


Set objNetwork = CreateObject("WScript.Network")
objNetwork.RemoveNetworkDrive "X:"


Или вот ещё:

Данный скрипт подключает расшареную папку (\\server\shared) на диск X:

On Error Resume Next

Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName

strDriveLetter = "X:"
strRemotePath = "\\server\shared"
strNewName = "003 otdel"
mapped = false

Set objNetwork = CreateObject("WScript.Network")
Set oDrives=objNetwork.EnumNetworkDrives

For i = 0 to oDrives.Count - 1 Step 2
If oDrives.Item(i)=strDriveLetter Then mapped = true

Next
'WScript.echo "mapped = " & mapped
If mapped Then objNetwork.RemoveNetworkDrive strDriveLetter
If mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
If Not mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath

Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strDriveLetter).Self.Name = strNewName

WScript.Quit

Запуск файла

set WshShell = WScript.CreateObject("WScript.Shell") 'Наделяем переменную WshShell силой.
WshShell.Run ":X\run.exe" 'Запускаем файл

megaloman
04-05-2010, 16:15
1. мапит диск \\server\script
2. выполняет определённую команду или запускает файл (exe)
3. отключает диск »
Set WShell = CreateObject("Wscript.Shell")
Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork

Mess_Off = NetDiskUnMap("S:")
Mess_On = NetDiskMap("S:", "\\Server\Resurs")
If Mess_On = "yes" Then
Sending = WShell.Run("C:\\WINDOWS\\system32\\notepad.exe", 1, True)
Mess_Off = NetDiskUnMap("S:")
End If

' Подключение сетевого диска
Function NetDiskMap(Drive, NetPath)
' Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork
On Error Resume Next
WshNetwork.MapNetworkDrive Drive, NetPath
If Err.Number <> 0 Then
Mess = "Ошибка при подключении диска " + Drive + vbCrLf + "Код ошибки: " + CStr(Err.Number) + vbCrLf + "Описание: " + Err.Description
MsgBox Mess, 16, "Подключение сетевого диска"
Else
Mess = "yes"
End If
On Error GoTo 0
NetDiskMap = Mess
' MsgBox Mess, 16, "Подключение сетевого диска"

End Function


' Отключение сетевого диска
Function NetDiskUnMap(Drive)
' Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork
On Error Resume Next
WshNetwork.RemoveNetworkDrive Drive
If Err.Number <> 0 Then
Mess = "Ошибка при отключении диска " + Drive + vbCrLf + "Код ошибки: " + CStr(Err.Number) + vbCrLf + "Описание: " + Err.Description
Else
Mess = "yes"
End If
On Error GoTo 0
NetDiskUnMap = Mess
' MsgBox Mess, 64, "Отключение сетевого диска"
End Function
Совместим с 98, Me, 2000, XP, 2003. На остальное не проверял. В GPO не встраивал.

Anton04
05-05-2010, 16:59
megaloman,

Спасибо, :bow: проверю отпишусь.

megaloman
06-05-2010, 22:14
Anton04, Уверен, скрипт работает, но более функционально его главную часть написать в виде (определил данные в заголовке, в принципе, лучше бы вообще их передавать в аргументах при вызове, но Вы просили проcто)
DiskLetter = "S:" ' Буква сетевого диска
NetPath = "\\Server\Resurs" ' Путь к расшаренной папке
Program = "C:\WINDOWS\system32\notepad.exe" ' Программа для запуска после подключения сетевого диска

Set WShell = CreateObject("Wscript.Shell")
Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork

Mess_Off = NetDiskUnMap(DiskLetter)
Mess_On = NetDiskMap(DiskLetter, NetPath)
If Mess_On = "yes" Then
Sending = WShell.Run(Program, 1, True)
Mess_Off = NetDiskUnMap(DiskLetter)
End If

А сообщение об ошибке лучше уточнить дополнительной информацией
Mess = "Ошибка при подключении диска " + Drive + " к " + NetPath + vbCrLf + "Код ошибки: " + CStr(Err.Number) + vbCrLf + "Описание: " + Err.Description

AkP
07-05-2010, 02:50
А зачем 1. мапит диск \\server\script
2. выполняет определённую команду или запускает файл (exe)
3. отключает диск »

А есть ли необходимость в пунктах 1 и 3 ??

ГП: Конфигурация компьютера\конфигурация Windows\Сценарии(запуск\завершение)\Автозагрузка

Размещенные здесь скрипты будут выполняться при запуске оси, еще до логина пользователей.
Реально они живут по такому пути: "\\zup.local\SysVol\zup.local\Policies\{379ADE4E-5F7C-40C4-BA6D-D2DBAE60CB07}\Machine\Scripts\Startup" и не доступны обычным пользователям.
Ну и предусматривать, как ты хотел, возможность недоступности сервера тут не надо..... ибо если недоступен сисвол, тебе ужо не до скриптов... ))))

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

Anton04
07-05-2010, 12:14
megaloman,

Элегантно и просто :clapping: :good:

Anton04
28-05-2010, 15:30
В общем самый последний вариант скрипта выглядит так (чтоб можно было ещё с аргументами запускать):



Option Explicit
DiskLetter = "X:" ' Буква сетевого диска
NetPath = "\\server\Script" ' Путь к расшаренной папке
Pr = " "
Kav = Chr(34)
Program =
Kav&"%SYSTEMROOT%\regedit.exe"&Kav&Pr&"/s"&Pr&Kav&"x:\my.reg"&Kav ' Программа для запуска после подключения сетевого диска

Set WShell = CreateObject("Wscript.Shell")
Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork

Mess_Off = NetDiskUnMap(DiskLetter)
Mess_On = NetDiskMap(DiskLetter, NetPath)
If Mess_On = "yes" Then
Sending = WShell.Run(Program, 1, True)
Mess_Off = NetDiskUnMap(DiskLetter)
End If

' Подключение сетевого диска
Function NetDiskMap(Drive, NetPath)
' Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork
On Error Resume Next
WshNetwork.MapNetworkDrive Drive, NetPath
If Err.Number <> 0 Then
Mess = "Ошибка при подключении диска " + Drive + vbCrLf + "Код ошибки: " + CStr(Err.Number) + vbCrLf + "Описание: " + Err.Description
MsgBox Mess, 16, "Подключение сетевого диска"
Else
Mess = "yes"
End If
On Error GoTo 0
NetDiskMap = Mess
' MsgBox Mess, 16, "Подключение сетевого диска"

End Function


' Отключение сетевого диска
Function NetDiskUnMap(Drive)
' Set WshNetwork = CreateObject("WScript.Network") 'Создаем объект WshNetwork
On Error Resume Next
WshNetwork.RemoveNetworkDrive Drive
If Err.Number <> 0 Then
Mess = "Ошибка при отключении диска " + Drive + vbCrLf + "Код ошибки: " + CStr(Err.Number) + vbCrLf + "Описание: " + Err.Description
Else
Mess = "yes"
End If
On Error GoTo 0
NetDiskUnMap = Mess
' MsgBox Mess, 64, "Отключение сетевого диска"
End Function




© OSzone.net 2001-2012