Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 2

Автор: mrmarvin
Дата сообщения: 20.06.2007 14:34
подскажите каким скриптом отключить сетевое подключение "подключение по локальной сети" для windows xp ?
Автор: BULLDOG
Дата сообщения: 20.06.2007 15:04
Народ, такая проблема. Хочу написать скрипт, который, на основании того, в каком OU расположен пользовател, автоматически перемещал компьютер из Computers в нужный OU.
Вот скрипт, который перемещает компьютер в OU под именем PD01.

On Error Resume Next
strComputer="."
strCompDN = "cn=Computers,dc=011,dc=087,dc=pfr,dc=ru"
arrComputers = Array("localhost")
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NTDomain",,48)
For Each objItem In colItems
    compname = CStr(objItem.Caption)
    compnamestr = "cn=" & compname & ","
    strOUDN = "ou=PD01,ou=UPFR11,dc=011,dc=087,dc=pfr,dc=ru"
    set objComp = GetObject("LDAP://" & compnamestr & strCompDN)
    set objOU = GetObject("LDAP://" & strOUDN)
    objOU.MoveHere objComp.ADsPath, objComp.Name
next
next

1) Этот скрипт работает только под администратором домена, хотелось бы, чтобы под любым пользователем.
2) Компьютер перемещается только в OU с именем PD01. Местоположение пользователя не определяется (т.е. его PD**), приходится создавать групповую политику для каждого PD** (хотя это уже пол беды).
Автор: Etalon
Дата сообщения: 20.06.2007 17:04
ShafMAN
Если прсто из сценария утановить или разорвать соединение то

rasdial имя_подключения [имя_пользователя [{пароль|*}]] [/domain:домен] [/phone:номер_телефона] [/callback:номер_для_ответного_вызова] [/phonebook:путь_к_телефонной_книге] [/prefixsuffix]

rasdial [имя_подключения] /disconnect

Автор: YNY
Дата сообщения: 21.06.2007 05:50

Цитата:
1) Этот скрипт работает только под администратором домена, хотелось бы, чтобы под любым пользователем.

Интересно девки пляшут)))))). Может тебе ваще на 98 перейти? -- там ваще никаких проблем с правами не будет
Автор: BULLDOG
Дата сообщения: 21.06.2007 08:51
YNY
Ты по нормальному разговаривать умеешь? Сам скрипт выполняется под любым аккаунтом, а вот компы двигаются только под администратором домена. Вернее не так. На моем компе даже под любым аккаунтом, а вот на остальных под теми же аккаунтами не двигаются.
Автор: mrmarvin
Дата сообщения: 21.06.2007 09:41
подскажите каким скриптом отключить сетевое подключение "подключение по локальной сети" для windows xp ?
Автор: vlazari
Дата сообщения: 21.06.2007 09:55
набери netsh /?
Автор: Etalon
Дата сообщения: 21.06.2007 12:47
mrmarvin

Computer = "."
Set WMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")

' Выбираем нужный сетевой адаптер
Set NetAdapter = WMIService.ExecQuery _
("Select * from Win32_NetworkAdapter where Name='VIA Rhine II Fast Ethernet Adapter'")

' Отключаем сетевой адаптер (3 --- включить, 4 --- выключить)
NetAdapter.StatusInfo = 4
NetAdapter.Put_
Автор: DmyDry
Дата сообщения: 21.06.2007 13:35
Народ, помогите.
Ещё не успел выучить vbs, но нужно позарез написать скрипт на запуск exe'шника с определенными ключами. Помогите кому не лень. В домене уже есть скрипты, я туда дописал, вроде бы правильно, прицеплен он к стартапу компов в ГП, но выполнение скриптов для машин идет невероятно долго и так и не выполняется, хотя если этот самый дописанный мною скрипт выполнять юзером, то все выполняется на ура... поэтому может подскажите, как написать короткий, только для этой задачи...
Автор: AnteC
Дата сообщения: 21.06.2007 14:57
vlazari

Цитата:
набери netsh /?

наверное Вы никогда не пытались это сделать в WinXp
тк на Win2K3 netsh interface set interface LAN disabled
работает а на WinXp нет (даже на форуме M$'а это пишут

Etalon

Цитата:
Computer = "."
Set WMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")

' Выбираем нужный сетевой адаптер
Set NetAdapter = WMIService.ExecQuery _
("Select * from Win32_NetworkAdapter where Name='LAN'")

' Отключаем сетевой адаптер (3 --- включить, 4 --- выключить)
NetAdapter.StatusInfo = 4
NetAdapter.Put_


Строка: 10
Символ: 1
Объект не поддерживает это свойство или метод:
NetAdapter.StatusInfo

Автор: Teo
Дата сообщения: 21.06.2007 16:05

Цитата:
На моем компе даже под любым аккаунтом, а вот на остальных под теми же аккаунтами не двигаются.

ну если ту себя сделал админом домена, то что тут удивительного
насколько я знаю, двигать можно тока под админом, иначе любой дурак ТАК начнёт двигать, что заколебёшься вертать назад

Добавлено:
AnteC
http://softwarecommunity.intel.com/isn/Community/en-US/forums/permalink/30233496/30234118/ShowThread.aspx#30234118
Автор: DmyDry
Дата сообщения: 21.06.2007 16:13
Никто шаблоном не поделится?
Автор: Teo
Дата сообщения: 21.06.2007 18:40
DmyDry
    strDiskpartCmd = Chr(34) & "c:\windows\system32\diskpart.exe " & Chr(34) & "/s " & Chr(34) & "c:\Windows\Temp\cmd.txt" & Chr(34)
    WScript.Echo strDiskpartCmd
    WshShell.Run(strDiskpartCmd)
Автор: as2389
Дата сообщения: 22.06.2007 02:50
Вообщем такая задача. Нужно проверить все носители, у далить на тех, на которых возможно картинки в формате *.jpg которые были созданы после определённого дня. Написал вот такой скрипт. Если его запускать указав определённую букву диска, на котором записать пару папок с подпапками и туда раскидать картинки то скрипт работает на ура. Когда начал запускать на VMware скрипт захлебунлся на моменте получения списка папок. fso.GetFolders - пишет недостаточно памяти в Sub Descend. Какие есть мысли? Как это можно обойти? Или принцип моего решения вообще не верный?

Код:
Dim fso, D, FileSys, drive
Dim objdrives
Dim objDrive

Age = 2

Set fso = CreateObject("Scripting.FileSystemObject")
Set objdrives = fso.Drives
For Each objDrive In objdrives
If objDrive.IsReady Then
'if (objDrive.DriveLetter="H") then
Set D = fso.GetDrive(objDrive.DriveLetter)
FileSys = D.FileSystem
If ((FileSys="NTFS") or (FileSys="FAT") or (FileSys="FAT32")) then
's = s & objDrive.DriveLetter & " - " & FileSys & vbCrLf
call del(objDrive.DriveLetter)
end if
'end if
end if
Next

'MsgBox s

sub del(drive)
Set arg = WScript.Arguments
If arg.Count > 0 Then
Call Descend(arg(0))
Else
drive2=drive+":"
Call Descend(drive2)
End if
end sub


Sub ArcCheck(file)
If DateDiff("d", file.DateLastModified, Now()) < Age Then
'WScript.Echo "Файлы младше 2 дней: " & file.Name
file.Delete(True)
Else
'WScript.Echo "Файлы которые не будут удалены: " & file.Name
End if
End Sub


Sub Descend(spec)
Dim d, f, s
Set d = fso.GetFolder(spec)

For Each f In d.Files
s = fso.GetExtensionName(f)
If StrComp(s, "jpg", 1) = 0 Or StrComp(s, "jpeg", 1) = 0 Then
Call ArcCheck(f)
End if
Next
' check subfolders
For Each f In d.SubFolders
Call Descend(f)
Next
End Sub
Автор: as2389
Дата сообщения: 22.06.2007 08:53
Хм запустил на своей машине всё работает, тога загрузка процессора 100% wscript.exe, как этого можно избежать?
Автор: abasov
Дата сообщения: 22.06.2007 09:20
Сценарий сканирует указанные каталоги и
удаляет в нем файлы с указанными расширениями


Код:
Option Explicit
'err.raise 1, "Achtung!", "для запуска закоментировать строку генерации ошибки"
'1) Задать папки для поиска в массив aFolders, например "C:\","E:\"
'2) задать расширения файлов в массив aExtensions, например "mp3","avi","wma"
'3) задать путь и файл для логирования LogFileName1 , например "d:\temp\i.txt"
'см. дальше по тексту...


'Сценарий сканирует указанные каталоги и
'удаляет в нем файлы с указанными расширениями
'
'
Dim LogFileName1
'dim NameFileOfMessage    
dim TextOfMessage

Dim aFolders    'массив каталогов
Dim aExtensions    'массив расширений файлов

dim file1
dim FileOfMessage

'1) Задать папки для поиска в массив aFolders, например aFolders = Array("C:\","E:\")
aFolders = Array("D:\")

'2) задать расширения файлов в массив aExtensions, например aExtensions = Array( "mp3","avi","wma")
aExtensions = Array( "id","nsf")

Dim fso


'3) задать путь и файл для логирования LogFileName1 , например LogFileName1 = CStr("d:\temp\i.txt")
LogFileName1 = CStr("c:\Log_Delete_Incoming.txt")

'
'4) пункт убран
'

'5)текст сообщения, которое будет в файле в папке где был удалён файл
TextOfMessage = CStr("Администрация предупреждает: ")


Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.OpenTextFile(LogFileName1,8,true)

Dim i
file1.WriteLine "----------- начало поиска --------------" & cstr(Date()) & "|" & cstr(Time())
For i = 0 To UBound(aFolders)
If fso.FolderExists(aFolders(i)) Then
on error resume next
Err.Clear

Dim folder
Set folder = fso.GetFolder(aFolders(i))
Dim file
For Each file In folder.Files
if Err then
file1.WriteLine "---> " & cstr(Date()) & "|" & cstr(Time()) &"!!! ->!Ошибка при доступе к папке!<- " &folder
exit for
End If
If IsKnowExtensions(file) Then

Set FileOfMessage = fso.OpenTextFile(folder+"\"+file.name+".txt",8,true)
FileOfMessage.WriteLine (TextOfMessage)
FileOfMessage.WriteLine ("файл '"& file.name & "' изъят до выяснения обстоятельств...")
FileOfMessage.close
file.Delete True
end if


Next
dim subFolder
For Each subFolder In folder.SubFolders
if Err then
exit for
end if
ScanSubFolder subFolder
Next


end if
Next
file1.WriteLine "----------- конец поиска --------------" & cstr(Date()) & "|" & cstr(Time())
file1.close


Function IsKnowExtensions(file)
    Dim strExtensions
    strExtensions = fso.GetExtensionName(file.Path)
    Dim i
    For i = 0 To UBound(aExtensions) '- 1
        If ucase(strExtensions) = ucase(aExtensions(i)) Then
            'msgbox "!"
            file1.WriteLine (cstr(Date()) & "|" & cstr(Time()) &" был Удалён : " & file.Path )

            IsKnowExtensions = True
            Exit Function
        End If
    Next
    IsKnowExtensions = False
End Function


Sub ScanSubFolder(folder)

Dim file
on error resume next
Err.Clear
For Each file In folder.Files
if Err then
file1.WriteLine "---> " & cstr(Date()) & "|" & cstr(Time()) &"!!! ->!Ошибка при доступе к папке!<- " &folder
Err.Clear
exit sub
end if    
If IsKnowExtensions(file) Then

Set FileOfMessage = fso.OpenTextFile(folder+"\"+file.name+".txt",8,true)
FileOfMessage.WriteLine (TextOfMessage)
FileOfMessage.WriteLine ("файл '"& file.name & "' изъят до выяснения обстоятельств...")
FileOfMessage.close
file.Delete true
end if
Next
Dim subFolder
For Each subFolder In folder.SubFolders
ScanSubFolder subFolder
Next
End Sub
Автор: DmyDry
Дата сообщения: 22.06.2007 09:47
Teo

Dim WshShell

strDiskpartCmd = Chr(34) & "\\connect\EVEREST\USER\everest.exe /ACCEPTBG /SILENT" & Chr(34) & "/s" & Chr(34) & "c:\Windows\Temp\cmd.txt" & Chr(34)
WScript.Echo strDiskpartCmd
WshShell.Run(strDiskpartCmd)


Вот так выглядит, но не пашет, пишет
Требуется объект: "
Автор: as2389
Дата сообщения: 22.06.2007 11:28
abasov во первых твой пример не делает то что надо мне, а именно самопоиск дисков определение файловой системы и поиск по ним файлов, я уже не говорю о сроке жизни файлов которые надо удалить. А во вторых алгоритм поиска файлов тот же самый.
Автор: Etalon
Дата сообщения: 22.06.2007 11:53
AnteC

Если Вы используете Windows Vista или Windows Server 2008 то должен работать метод
...
NetAdapter.Disable
Автор: Teo
Дата сообщения: 22.06.2007 17:20
DmyDry
не тупи...
я ж те дал свой пример
а ты его один-в-один почти перекопировал
у меня дискпарт запускается с ключиком /s
а у тебя что?
CHR(34) - это кавычка
& - конкатенация строк (объединение)
поэтому у меня "длинный путь с пробелами к diskpart.exe" & "/s" & "длинный путь с пробелами к файлу ответов"


Добавлено:
abasov
боже... скока кода...
а в юнихе:
find /dir -iname *.ext -exec rm '{}' \;

разница, да?

Добавлено:
ну можна -Ntime добавить по вкусу, если надо убивать по критерию "старости"
Автор: YNY
Дата сообщения: 25.06.2007 09:17

Цитата:
На моем компе даже под любым аккаунтом, а вот на остальных под теми же аккаунтами не двигаются.

зайди под собой на любом компе и запускай скрипт

Добавлено:

Цитата:
а в юнихе:
find /dir -iname *.ext -exec rm '{}' \;

а где проверка по дате? а так нечто подобное мона и в bat своять может чуть длиньше но используя тот же find и "<", ">"
Автор: Bugriy
Дата сообщения: 29.06.2007 13:16
Знающие люди, скажите, а можно ли с помощью xcacls.vbs дать пользователю такое право на папку: "чтение (применять только для этой папки)".
То есть флаг наследования не трогать, но пользователь не сможет во вложеные папки попасть. Если можно, то как?

Добавлено:
Всё, разобрался. Оказалось что в статье на майкрософте не полная справка. Если запустить скрипт с параметром /?, то там больше информации.
Автор: xndxnd
Дата сообщения: 29.06.2007 16:58
6
Автор: Teo
Дата сообщения: 29.06.2007 17:03
YNY

Цитата:
а где проверка по дате?

грю же, можно втыкать [m,a,c]time по вкусу =)

Цитата:
а так нечто подобное мона и в bat своять может чуть длиньше но используя тот же find и "<", ">"

ну-ну
проще cygwin поставить и поюзать там эту же команду
кстати, если не ошибаюсь, если правильно поставить cygwin, то cmd будет знать команду ls, rm, find и иже с ними
Автор: SPV_Ed
Дата сообщения: 02.07.2007 10:55
Использую WSH для отправки писем через SMTP провайдера. Возможно ли добавить функционал, чтобы на адрес отправителя автоматом приходило уведомление о доставке письма адресату? MSDN смотрел, ничего на эту тему не нашлось...

Код: Set Message = CreateObject("CDO.Message")
With Message
.From = "xxx@yandex.ru"
.To = "xxx@zaural.ru"
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.infocentr.ru"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
.Send
End With
Автор: Sk1f
Дата сообщения: 03.07.2007 08:21
SPV_Ed, через какой почтовк ты письма посылаешь?

p.s. Можно сделать через групповые политики (через шаблоны для outlook-а)


Автор: as2389
Дата сообщения: 03.07.2007 09:36
Народ а как вытащить хеши md5 юзеров из AD? очень надо, надо пробежаться по OU и собрать все пароли
Автор: SPV_Ed
Дата сообщения: 03.07.2007 17:10

Цитата:
через какой почтовк ты письма посылаешь?

Через провайдерский SMTP, как уже говорилось.

PS Ответ на свой вопрос нашел здесь: http://support.microsoft.com/kb/302839
Автор: Sid Salmon
Дата сообщения: 04.07.2007 08:11
Вот нашел у себя скриптик Создание Файл Сервера с Паками Отделов пользователей на основе структуры AD с расдачей прав доступа К папкам оделов имеют доступ все кто в ходят в соответсвующую группу а к пользователей тока сами пользователи. ну и про себя конечно не забудем
скритп писался пару лет назад возможно буду ошибки
[more]

Код:
[no]
//Greate SidSalmon
//
//****************************************************************
var strComputer = "."; // not change
var Path="F:\\ShareFolderForUser"; // Root folder for Share Folder
var AdminUser="ADMINgROUP"; // УНИКАЛЬНОЕ НАЗВАНИЕ ГРУПЫ С ПРАВАМИ ПОЛНОГО ДОСТУПА
var ViewUser="vIEWgROUP" ; УНИКАЛЬНОЕ НАЗВАНИЕ ГРУПЫ С ПРАВАМИ ТОЛЬКОДЛЯ ЧТЕНИЯ ДОСТУПА

var strComputer = "."; // not change
var PatchVol= "F:\\" ;
//****************************************************************
//Option Explicit
//Declare Global Variables
var OnlyWrite,ReadDirectory, ReadOnly, ModifyOnly, FullControl, WR, RD, RX, MO, FU;
var WMI, SecDescriptor, objFSO, objFile, objTextFile, colDiskQuotas; // Scripting object
var Trust, SecDes, User; // var object
var objOU, objOrg, objUser, objUser1, Group, objUsrQ, User; //
var Path, ShareDescr, NewFolderName, retvalue, SelectStr, strComputer;
var i, j;
var ACE1 = new Array();
//************************* NOT CHANGE ***************************************************************
//*** var CONSTANT
var ForReading = 1;
var ForWrite = 2;
var ForAppending = 2;
//*** Share types
var DiskShare = 0;
var PrintShare = 1;
var DevShare = 2;
var IPCShare = 3;
var DriveAdminShare = 2147483648;
var PrintAdminShare = 2147483649;
var DevAdminShare = 2147483650;
var IPCAdminShare = 2147483651;
var MaxAllowed = 0;
//*** Access masks - Share, File, Folder.
var F_List         = 1;     //can read a file or list folder contents
var F_Add            = 2;        //can write to a file or add a file to a folder
var F_Append        = 4;        //can append to a file or add a subfolder to a folder
var F_Rd_EA         = 8;        //can read Extended Attributes
var F_Wr_EA         = 16;        //can write Extended Attributes
var F_Ex_Trav        = 32;        //can execute a file or traverse folders
var F_Del_Child     = 64;        //can delete a folder And its contents, even RO files
var F_Rd_Attr        = 128;        //can read attributes
var F_Wr_Attr        = 256;        //can write attributes
var F_Delete        = 65536;    //can delete files And folders
var F_Rd_Contr     = 131072;    //assigns read access for this user
var F_Wr_DAC        = 262144;    //can change DACL
var F_Wr_Owner     = 524288;    //can take ownership
var F_Synch         = 1048576;    //synch changes And wait for synch
//*** Default combinations of Access masks - Share, File, Folder.
WR = F_Wr_Attr + F_Wr_EA + F_Append + F_Add;
RD = F_Rd_Contr + F_Rd_Attr + F_Rd_EA + F_List;
RX = RD + F_Ex_Trav;
MO = RX + WR + F_Delete;
FU = MO + F_Wr_Owner + F_Wr_DAC + F_Del_Child;

OnlyWrite = WR + F_Synch;
ReadDirectory = RD + F_Synch;
ReadOnly = RX + F_Synch;
ModifyOnly = MO + F_Synch;
FullControl = FU + F_Synch;

//*** ACE type
var Allow    = 0;    //allows access
var Deny     = 1;    //denies access
var Audit    = 2;    //audits access
//*** ACE flags
var ObjInh     = 1;    //non-container children inherit this ace
var ContInh    = 2;    //container objects inherit this ACE
var WorkInh    = 3;    //container objects inherit this ACE
var NoProp    = 4;    //do not propagate beyond first child
var InhOnly    = 8;    //only controls access to children
var InhAce    = 16;    //only controls access to children

//*** SecurityDescriptor ControlFlags
var SE_OWNER_DEFAULTED         = 1;     //A default mechanism, rather than the original provider of the security descriptor, provided the security descriptor//s owner security identifier (SID).
var SE_GROUP_DEFAULTED          = 2;     //A default mechanism, rather than the original provider of the security descriptor, provided the security descriptor//s group SID.
var SE_DACL_PRESENT             = 4;     //Indicates a security descriptor that has a DACL. If this flag is not var, or if this flag is var and the DACL is NULL, the security descriptor allows full access to everyone.
var SE_DACL_DEFAULTED            = 8;    //Indicates a security descriptor with a default DACL. For example, if an object//s creator does not specify a DACL, the object receives the default DACL from the creator//s access token. This flag can affect how the system treats the DACL, with respect to ACE inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not var.
var SE_SACL_PRESENT             = 16;    //Indicates a security descriptor that has a SACL.
var SE_SACL_DEFAULTED            = 32;     //A default mechanism, rather than the original provider of the security descriptor, provided the SACL. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not var.
var SE_DACL_AUTO_INHERIT_REQ     = 256;     //Requests that the provider for the object protected by the security descriptor automatically propagate the DACL to existing child objects. If the provider supports automatic inheritance, it propagates the DACL to any existing child objects, and vars the SE_DACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects.
var SE_SACL_AUTO_INHERIT_REQ     = 512;     //Requests that the provider for the object protected by the security descriptor automatically propagate the SACL to existing child objects. If the provider supports automatic inheritance, it propagates the SACL to any existing child objects, and vars the SE_SACL_AUTO_INHERITED bit in the security descriptors of the object and its child objects.
var SE_DACL_AUTO_INHERITED     = 1024; //Windows 2000 only. Indicates a security descriptor in which the DACL is var up to support automatic propagation of inheritable ACEs to existing child objects. The system vars this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not var in security descriptors for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs.
var SE_SACL_AUTO_INHERITED     = 2048; //Windows 2000: Indicates a security descriptor in which the SACL is var up to support automatic propagation of inheritable ACEs to existing child objects. The system vars this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. This bit is not var in security descriptors for Windows NT versions 4.0 and earlier, which do not support automatic propagation of inheritable ACEs.
var SE_DACL_PROTECTED          = 4096; //Windows 2000: Prevents the DACL of the security descriptor from being modified by inheritable ACEs.
var SE_SACL_PROTECTED          = 8192; //Windows 2000: Prevents the SACL of the security descriptor from being modified by inheritable ACEs.
var SE_SELF_RELATIVE             = 32768; //Indicates a security descriptor in self-relative format with all the security information in a contiguous block of memory. If this flag is not var, the security descriptor is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors in the Platform SDK section Low-Level Access-Control.

function Main(){
//****************************************************************
//****************************************************************
    objFSO = new ActiveXObject("Scripting.FileSystemObject");
    if (!objFSO.FolderExists(Path))
         objFSO.CreateFolder(Path);
    if (!objFSO.FileExists(Path + "\\ShareFolder.log")) {
        objTextFile = objFSO.CreateTextFile(Path + "\\ShareFolder.log");
        }
    else    {
        objTextFile = objFSO.OpenTextFile(Path + "\\ShareFolder.log", ForAppending, 'True');
        }
    QuotasInit(PatchVol);

WMI = GetObject("winmgmts://" + strComputer + "/root/cimv2");
    SecDescriptor = WMI.Get("Win32_SecurityDescriptor").SpawnInstance_();
SecDescriptor.ControlFlags = SE_DACL_PROTECTED + SE_DACL_PRESENT + SE_GROUP_DEFAULTED + SE_OWNER_DEFAULTED + SE_DACL_AUTO_INHERITED;

AdminRight();

//************** Create Folder for AD User and OU Group
        var objOU = GetObject("LDAP://DC=matrix");
var e1 = new Enumerator(objOU);
     for(;!e1.atEnd ();e1.moveNext ()){
     objOrg = e1.item ();
     if (objOrg.ou > "" ) {
     PrintF(objOrg.ou)
             if (!objFSO.FolderExists(Path + "\\" + objOrg.ou)){
                 objFSO.CreateFolder(Path + "\\" + objOrg.ou);
                 }
             PrintF ("LDAP://ou=" + objOrg.ou + ",DC=matrix");
             var objUser = GetObject("LDAP://ou=" + objOrg.ou + ",DC=matrix");
         var e2 = new Enumerator(objUser);
         for(;!e2.atEnd ();e2.moveNext ()){
          objUser1 = e2.item ();
             if (objUser1.sAMAccountName > "" ) {
                 NewFolderName = Path +"\\" + objOrg.ou + "\\" + objUser1.sAMAccountName;
                                 if (objUser1.sAMAccountName == objUser1.cn && objUser1.sAMAccountType == "268435456" )
                                  SetUserRigthShare(Path + "\\" + objOrg.ou);
                                 if(objUser1.sAMAccountName != objUser1.cn && objUser1.sAMAccountType == "805306368" ){
                      if (!objFSO.FolderExists(NewFolderName)){
                                objFSO.CreateFolder(NewFolderName);
         retvalue = SetUserRigthLocal(SecDescriptor, NewFolderName);
                                     PrintF(Path +"\\" + objOrg.ou + "\\" + objUser1.sAMAccountName +" Create OK");
                                        }
                       else {
                   PrintF(Path +"\\" + objOrg.ou + "\\" + objUser1.sAMAccountName +"All ready exist");
                                     }
                                    }

                     }
                     }
            }
        }
            //objTextFile.close
}
function AdminRight(){
i = 0;
        var AdminUserList = AdminUser.split(",")
        var eA = new Enumerator(AdminUserList);
            for(;!eA.atEnd ();eA.moveNext ()){
                Admin = eA.item();
                 ACE1[i]= SelectRight(Admin, FullControl,WorkInh);
         i++;
     }

var ViewUserList = ViewUser.split(",")
        var eB = new Enumerator(ViewUserList);
            for(;!eB.atEnd ();eB.moveNext ()){
                View = eB.item();
                     ACE1[i]= SelectRight(View, ReadOnly, WorkInh);
         i++;
     }
}


function SetUserRigthShare(Path){

    ACE1[i] = SelectRight(objUser1.sAMAccountName, FullControl, ContInh);

        SecDescriptor.DACL = ACE1;
CreateShare(SecDescriptor, objUser1.sAMAccountName, Path);
    retvalue = ShareSecF(objUser1.sAMAccountName, SecDescriptor);
        }



function SelectRight(AccountName, Right, Nas){
            Group = WMI.ExecQuery("Select Name, SID from Win32_Account where domain='matrix'and name like '" + AccountName + "%'");
        var e = new Enumerator(Group);
        for(;!e.atEnd();e.moveNext ()){
    User =e.item();
    Trust = SetTrustee(User.Domain, User.Name, User.SID );
    var ACE2 = SetACE(Right, Nas, Allow, Trust);
     }
return(ACE2);
}

/*
var Group = WMI.ExecQuery("Select Domain, Name, SID from Win32_Account where domain='matrix' and name like'%21%'");
var e = new Enumerator(Group);
User ="";
for(;!e.atEnd ();e.moveNext ()){
User =e.item ();
Trust = SetTrustee(WMI, User.Domain, User.Name, User.SID);
ACE1[1] = SetACE(WMI,RX + F_Synch, ContInh, Allow, Trust);
}
*/



    function SetUserRigthLocal(Path){

    ACE1[i] = SelectRight(objUser1.sAMAccountName, FullControl, WorkInh);
        SecDescriptor.DACL = ACE1;
     retvalue = LocalSecF(NewFolderName, SecDescriptor);
}

//******** Create the Share Folder
function CreateShare(SecDesc, UserName, FolderName){
var Share;
Share = WMI.Get("Win32_Share");
     var InParam = Share.Methods_("Create").inParameters.SpawnInstance_();
     InParam.Access = SecDesc;
         InParam.Description = UserName;
         InParam.Name = UserName;
     InParam.Path = FolderName;
         InParam.Type = DiskShare;
var OutParam = Share.ExecMethod_("Create", InParam);
// PrintF( UserName & vbTab & "Folder Create")
}
//**** var Local Security ********************
function LocalSecF(FolderUserName, SecDesc){
wmiFileSecSetting = GetObject("winmgmts:Win32_LogicalFileSecuritysetting.path='"+ Path +"\\" + objOrg.ou + "\\" + objUser1.sAMAccountName +"'");
wmiFileSecSetting.setSecurityDescriptor(SecDesc);
}
//**** var Share Security ********************
function ShareSecF(FolderUserName,SecDesc){
wmiShareSecsetting = GetObject("winmgmts:Win32_LogicalShareSecuritysetting.name='"+ FolderUserName+ "'");
wmiShareSecsetting.setSecurityDescriptor(SecDesc);
}

//***************************** system function not change
//********** Create the Trustee object
    function SetTrustee(strDomain, strName, strSID){
        var Trustee;
var Trustee = WMI.Get("Win32_Trustee").SpawnInstance_();
         Trustee.Domain = strDomain;
         Trustee.Name = strName;
         Trustee.SIDString = strSID;
        return(Trustee);
    }
//********* Create the ACE object
    function SetACE(AccessMask, AceFlags, AceType, Trustee){
        var Ace;
var Ace = WMI.Get("Win32_Ace").SpawnInstance_();
         Ace.AccessMask = AccessMask;
         Ace.AceFlags = AceFlags;
         Ace.AceType = AceType;
         Ace.Trustee = Trustee;
        return(Ace);
    }
//********* Convert the SID string to a binary array
    function Conv2Bin(WMI, SidStr){
        var SID;
        var SID = WMI.Get("Win32_SID.SID='" + SidStr + "'");
                PrintF(SidStr);
var str = SID.BinaryRepresentation;
return(SID.BinaryRepresentation);
    }

function PrintF (Str){
objTextFile.WriteLine(Str);
}
//***************************** system function not change
function QuotasInit(Patch){
colDiskQuotas = new ActiveXObject("Microsoft.DiskQuota.1");
    colDiskQuotas.Initialize(PatchVol, 'True');
    if (colDiskQuotas.QuotaState != 2){
        PrintF("Quota disable");
            colDiskQuotas.QuotaState=2;
     PrintF("Quota will be enable");
            }
    else {
    PrintF("Quota are enable");
    }
            colDiskQuotas.DefaultQuotaLimit = 50000000 ;
            colDiskQuotas.DefaultQuotaThreshold = 45000000;
}
Main();
[/no]
Автор: Sk1f
Дата сообщения: 05.07.2007 10:03
Sid Salmon, очень интересно.
Сам писал такой же скрипт, но так и не нашел как раздавать разрешения на папки.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.