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

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