Главная > Script > Подключение сетевых дисков

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

26 Январь 2011

Наверное, самый часто используемый скрипт в жизни системного администратора — скрипт, подключающий сетевые диски пользователям. На просторах Интернета их великое множество, но периодически они не подходят под требования. У меня как раз возник такой случай и пришлось написать свой.

Скрипт был необходим для одной специализированной программы, которая использует как общие диски для всех пользователей, так и персональные для каждого, причем персональные диски называются по собственному алгоритму программы и как-то объединить их вроде \\server\%username% — нельзя.
Подключать диски через Group Policy Preferences тоже нельзя, т.к. добавлять/удалять/изменять набор сетевых дисков (например при появлении нового сотрудника) должен низкоквалифицированный персонал, которому делать это в оснастке gpmc.msc будет сложновато.

В итоге я решил сделать текстовый файл с конфигурацией сетевых дисков, дать на него права на редактирование нужным сотрудникам и обрабатывать его скриптом.

Еще немаловажным минусом во всех скриптах является отсутствие логов. В моем скрипте все пишется в лог подробно-преподробно.

Итак скрипт.

'==========================================================================
' VBScript Source File
'
' NAME: Logon script for connect network drives which used by SunSystem and Q&A
'
' AUTHOR: Yakov Barinov
' DATE  : 20.01.2011
'
' COMMENT:
'==========================================================================

'On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = WScript.CreateObject("WScript.Network")
Set WSHShell = Wscript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments

Dim strShareFilePath, objTS
Dim LogFile, LogEnabled, SilentMode
Dim strDomain, strUserName, strComputerName

strComputerName = objNetwork.ComputerName
strDomain = objNetwork.UserDomain
strUserName = objNetwork.UserName

LogFile = "\\domen.ru\dfs\Logs\LogonScripts\SS5_DriveMappings\" & strComputerName & "--" & strUserName & ".log"
strShareFilePath = "\\domen.ru\SYSVOL\domen.ru\scripts\SS5_Shares.txt"

'Checking script arguments
If objArgs.Count=1 Then
	if objArgs(0)="disable" Then
		BackupServerName = ""
	Else
		BackupServerName = objArgs(0)
	End If
Else
	BackupServerName = ""
End If

' Enable Logging
LogEnabled = True
' Enable silent mode (It is strong recomended for run scripts by double click)
SilentMode = True

WriteLog ""
WriteLog "**********************Logging Start**********************"
WriteLog "Current domain - " & strDomain
WriteLog "Current computer - " & strComputerName
WriteLog "Current user - " & strUserName
WriteLog ""
WriteLog "Starting..."
WriteLog ""

'=====================   Start work zone    ==============================

Dim arCurDisks, intStrNum

Set objTS = objFSO.OpenTextFile(strShareFilePath)
CheckError

intStrNum = 0
Do Until objTS.AtEndOfStream
	intStrNum = intStrNum+1
	curLine = objTS.ReadLine
	curLine = Trim(curLine)
	'skip comments and empty lines
	If (Left(curLine,1) <> "#" and Left(curLine,1) <> "") Then
		WriteLog "Processing line " & intStrNum & " [" & curLine & "]"
		'convert string to array
		arCurDisks = Split(curLine, "|")
		'check array count (must be 3 elements)
		If (UBound(arCurDisks) = 2) Then 'Ubound show last element index. Then we checks it with
			arCurDisks(0) = Trim(arCurDisks(0))
			arCurDisks(1) = Trim(arCurDisks(1))
			arCurDisks(2) = Trim(arCurDisks(2))
			'check username For disk
			If (arCurDisks(0) = "*" Or arCurDisks(0) = strUserName) Then
				MapNetworkDrive arCurDisks(1), arCurDisks(2)
			Else
				WriteLog "Diferent user. Skipping."
			End If
		Else
			WriteLog "Error - wrong count of parametrs"
		End If
		WriteLog "" 'write delemetr to log file
	End If
Loop
objTS.Close

Set colDrives = objNetwork.EnumNetworkDrives

WriteLog "Network drives:"
'enumerate network drives
If colDrives.Count = 0 Then
	WriteLog "You have no mapped networked drives"
Else
	For i = 0 To colDrives.Count - 1 Step 2
		WriteLog colDrives(i) & vbTab & colDrives(i + 1)
	Next
End If

'=====================   End work zone    ================================

WriteLog ""
WriteLog "Script Done"
WriteLog "**********************Logging Stop**********************"

'==========================================================================
' Custum functions Function
'==========================================================================

'---------- Map network drive----------------------------------------------
Function MapNetworkDrive(strDrive, strShare)
	strDrive = strDrive & ":"
	If objFSO.FolderExists(strShare) Then 'verify share exists
		if objFSO.DriveExists(strDrive) Then 'see if drive letter is in use
			objNetwork.RemoveNetworkDrive strDrive,True,True
			WriteLog "Disconnecting Old Network Drive"
			CheckError
		end If
		'Map new drive
		objNetwork.MapNetworkDrive strDrive, strShare
		If Err.Number = 0 Then
			WriteLog "Drive sucesfully connected"
		End If
		CheckError
	Else
		WriteLog "Path doesn't exist: " & strShare
	End If
	MapNetworkDrive = True

End Function

'==========================================================================
' Common functions Function
'==========================================================================

'---------- Write log messages to screen and log file -------------
Sub WriteLog (logtext)
	If LogEnabled = True then
		' Write message to screen
		If SilentMode = False Then
			Wscript.echo logtext
		End If
		' Write message to log file
		Set TextFile = objFSO.OpenTextFile (LogFile, 8, True)
		TextFile.WriteLine(Date() &" " & Time() & " : "& logtext)
		TextFile.Close()
	End IF
End Sub

'---------- Check current error and log it ------------------------
Sub CheckError()
    If Err.Number <> 0 Then
     WriteLog "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description
        Err.Clear
    End If
End Sub

Файл с настройками сетевых дисков:

########################################################
# Enum of users shares for S5                          #
#------------------------------------------------------#
# Format:                                              #
# username | drive | share                             #
# or                                                   #
# * | drive | share                                    #
#------------------------------------------------------#
# spaces near pipes are ignored                        #
# empty lines are ignored                              #
# coments starts with #                                #
# don't use coments at the and of the lines!!!         #
#------------------------------------------------------#
# Examples:                                            #
# iivanov | f | \\server\share                         #
# ppetrov|h|\\server\share2                            #
# * | f | \\server\share3                              #
########################################################

* | S | \\domen.ru\dfs\SS5_Updates
* | V | \\domen.ru\dfs\SS5_TransferDesk
* | Y | \\domen.ru\dfs\SS5_print

iivanova       | W | \\SRV-S5\S5\_WORKAKO
apetrov        | W | \\SRV-S5\S5\_WORKANI
ksidorov       | W | \\SRV-S5\S5\_WORKMRL

Как видно файл с настройками очень простой. имя пользователя | буква диска | папка Пробелы игнорируются, можно делать комментарии. Имя файла указываем в скрипте в переменной strShareFilePath. Папку куда писать указываем в переменной LogFile. Чтобы скрипт смог писать в паку с логами необходимо дать права пользователям создавать файлы, а владельцу изменять (create files и modify, соответственно)

Categories: Script Tags: ,
Комментирование отключено.