Создание общих папок с параметрами из файла
Это продолжение скрипта выгрузки общих ресурсов в файл
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
Интересное на сайте:
Голосов пока нет
Оставить комментарий