Создание общих папок с параметрами из файла

Это продолжение скрипта выгрузки общих ресурсов в файл

Dim objArgs
Dim strFileName, strLogName
Dim oFSO, oFile, oLog
Dim strShareCaption, intShareMaxAllowed, strShareName, strSharePath

'Скрипт работает, если указано имя файла для выгрузки списка сетевых папок.
'если файл не указан, скрипт не выполняется.
Set objArgs = WScript.Arguments
If objArgs.Named.Item("f")="" or objArgs.Named.Item("l")="" Then
	WScript.Echo "Использование: CreateSharedFolders.vbs /f:<filename> /l:<logfile>"
	WScript.Quit (1)
Else
	strFileName = objArgs.Named.Item("f")
	strLogName = objArgs.Named.Item("l")
End If

Wscript.Echo "Начинаем работу."   

'Имя компьютера, с которого надо получить список папок
' "." означает компьютер, на котором выполняется скрипт
strComputer = "."


'Предварительная подготовка объектов для формирования правильного разрешения Everyone:FULL
Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!\\" & strComputer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
Set ACE = Services.Get("Win32_Ace").SpawnInstance_

'2032127 = "Full"; 1245631 = "Change"; 1179817 = "Read"
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)


'Инициализация текстового файла для загрузки
'Если файл не существует, скрипт не выпоняется
Set oFSO = CreateObject("Scripting.FileSystemObject")	
If Not oFSO.FileExists(strFileName) Then
	WScript.Echo "Файл " + strFileName + " не найден!"
	WScript.Quit (2)
End If

'Инициализация лог-файла
Set oLog = oFSO.CreateTextFile(strLogName)

'Чтение файла для загрузки. Предполагается, что файл подготовлен скриптом EnumerateSharedFolders.vbs
Set oFile = oFSO.OpenTextFile(strFileName, 1)

Do While Not oFile.AtEndOfLine 
	'Чтение файла построчно, с разбором строки
	strTemp = oFile.ReadLine
	'Caption
	strShareCaption = Mid(strTemp, 1, InStr(strTemp,",") - 1)
	strTemp = Mid(strTemp, InStr(strTemp,",") + 1)
	'MaxAllowed
	intShareMaxAllowed = Cint(Mid(strTemp, 1, InStr(strTemp,",") - 1))
	strTemp = Mid(strTemp, InStr(strTemp,",") + 1)
	'Name
	strShareName = Mid(strTemp, 1, InStr(strTemp,",") - 1)
	strTemp = Mid(strTemp, InStr(strTemp,",") + 1)
	'Path
	strSharePath = strTemp

	'Начало создания общей папки
	wscript.echo ">>> Создание общей папки '" + strShareCaption + "'"
	wscript.echo "Название '" + + strShareName + "'"
	wscript.echo "Путь '" + + strSharePath + "'"
	wscript.echo "Максимальное количество подключений '" & intShareMaxAllowed & "'"

	oLog.WriteLine ">>> Создание общей папки '" + strShareCaption + "'"
	oLog.WriteLine "Название '" + + strShareName + "'"
	oLog.WriteLine "Путь '" + + strSharePath + "'"
	oLog.WriteLine "Максимальное количество подключений '" & intShareMaxAllowed & "'"
	

	If Not oFSO.FolderExists(strSharePath) Then
		'Если папки назначения не существует, общая папка не создается
		wscript.echo "!!! Путь '" + + strSharePath + "' не существует !!!"
	Else
		'Если папки назначения существует, переходим к созданию общей папки
		
                Set objWMIService = GetObject("winmgmts:" _
                    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

                Set objNewShare = objWMIService.Get("Win32_Share")

		'Если в свойствах общей папки было указано количество соединений,
		' новую создаем с таким же значением. Иначе устанавливаем "Неограничено"
		If intShareMaxAllowed > 0 then
	                errReturn = objNewShare.Create (strSharePath, strShareName, 0, intShareMaxAllowed, strShareCaption,,secDesc)
		Else
	                errReturn = objNewShare.Create (strSharePath, strShareName, 0, , strShareCaption,,secDesc)
		End If
		
		'Если при создании папки произошла ошибка, код должен объяснить, почему это произошло.
		If errReturn = 0 Then
			Wscript.Echo "Успешно. Код возврата 0"
			oLog.WriteLine "Успешно. Код возврата 0"
		Else
			Wscript.Echo "!!! Ошибка. Код возврата " & errReturn
			oLog.WriteLine "!!! Ошибка. Код возврата " & errReturn
		End If
	
	End If

	wscript.echo ""
	oLog.WriteLine ""
Loop

Wscript.Echo "Готово!"

Function asd
Set SecDescClass = objWMIService.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = objWMIService.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
Set ACE = objWMIService.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)

asd = SecDesc

End Function

Также интересно:

Интересное на сайте: 
0
Голосов пока нет

Оставить комментарий