Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужен VBS скрипт для GPO (мапинг сетевого диска, запуск файла, отключение диска) (http://forum.oszone.net/showthread.php?t=174817)

Anton04 04-05-2010 10:40 1406240

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

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

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

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

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

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

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

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


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

[VBS]
Set objNetwork = CreateObject("WScript.Network")
objNetwork.RemoveNetworkDrive "X:"
[/VBS]


Или вот ещё:

Данный скрипт подключает расшареную папку (\\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 1406501

Вложений: 1
Цитата:

Цитата Anton04
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 1407344

megaloman,

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

megaloman 06-05-2010 22:14 1408314

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 1408403

А зачем
Цитата:

Цитата Anton04
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 1408588

megaloman,

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

Anton04 28-05-2010 15:30 1423003

В общем самый последний вариант скрипта выглядит так (чтоб можно было ещё с аргументами запускать):

читать дальше »

Код:

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



Время: 23:15.

Время: 23:15.
© OSzone.net 2001-