Войти

Показать полную графическую версию : скрипт, создающий нового пользователя, группу, и добавляющий пользователя в группу


Niaoppla
10-01-2012, 16:17
Помогите, пожалуйста :o Необходимо написать скрипт, создающий нового пользователя, группу, и добавляющий пользователя в группу. Создать logon-скрипт, назначить его пользователю. Так же скрипт должен подключать сетевые диски :)

cameron
10-01-2012, 16:23
это принципиально делать именно через WMI? =)

Niaoppla
10-01-2012, 16:30
cameron, к сожалению, думаю да ;)

Kazun
10-01-2012, 16:41
Через WMI это сделать нельзя,можно использовать провайдер WinNT,самый простой и наверно лучший вариант использовать утилиту net.

net user /?
net localgroup /?

Niaoppla
10-01-2012, 16:44
Есть предполагаемый план работы, взгляните :)
План работы
1. Сначала необходимо создать нового пользователя через WMI, используя WSH.
2. Далее, создать на компьютере группу и добавить в неё созданного пользователя.
3. Автоматически создать сетевой диск L: при помощи WMI. Пример на VBS:
Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 25
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
errReturn = objNewShare.Create _
("C:\SomeDir", "SomeShareName", FILE_SHARE, _
MAXIMUM_CONNECTIONS, "Public share for the student.")
Wscript.Echo errReturn
4. В основном скрипте добавить команды создания logon-скрипт в папке с сетевым диском. Также основной скрипт должен прописать в созданный файл все необходимые команды.
5. Через основной скрипт прописать пользователю путь к logon-скрипту.
6. В logon-скрипте реализовать автоматическое подключение сетевых дисков

Kazun
10-01-2012, 16:46
Все действия решаются утилитой net,для создания общей папки использовать net share /? ,для подключения общей папки net use /?.

Niaoppla
10-01-2012, 17:04
Kazun, без этой утилиты никак не обойтись? Не предcтавляю как ею пользоваться ;_;

megaloman
11-01-2012, 19:34
Разыскал у себя в архиве: когда-то давно делал похожие задачи WSH на JS. Если пригодится, буду рад.
Подключение сетевых дисков /********************************************************************/
/* Язык: JScript */
/* Описание: Отключение и подключение сетевых дисков */
/********************************************************************/

var WshNetwork,
WshShell,
Drive,
NetPath,
Port,
NetPrinter,
Mess,
Mess_On,
IsError;
//Инициализируем константы для диалоговых окон
var vbCritical=16,vbInformation=64;

WshNetwork = WScript.CreateObject("WScript.Network"); //Создаем объект WshNetwork
WshShell = WScript.CreateObject("WScript.Shell"); //Создаем объект WshShell



Mess_On=""

Mess_On+=DiskConnect("M:","\\\\Имя_сервера1\\Имя_ресурса1");
Mess_On+=DiskConnect("N:","\\\\Имя_сервера2\\Имя_ресурса2");
Mess_On+=DiskConnect("K:","\\\\Имя_сервера3\\Имя_ресурса3");
Mess_On+=DiskConnect("P:","\\\\Имя_сервера4\\Имя_ресурса4");

WshShell.Popup(Mess_On,10,"Подключение сетевого диска",vbInformation);

/************* Конец *********************************************/

function DiskConnect(Drive,NetPath)
{
/************* Отключение сетевого диска ***********************/
if (false) { //Этот блок отключен за ненадобностью, текст оставлен для примера

IsError=false;

try {WshNetwork.RemoveNetworkDrive(Drive);} //Отключаем сетевой диск

catch (e) //Обрабатываем возможные ошибки
{
if (e != 0) //Выводим сообщение об ошибке
{
IsError=true;
Mess="Ошибка при отключении диска "+Drive+"\nКод ошибки: "+
e.number+"\nОписание: "+e.description;
WshShell.Popup(Mess,0,"Отключение сетевого диска",vbCritical);
}
}
if (!IsError) //Все в порядке
{
Mess="Диск "+Drive+" отключен успешно";
WshShell.Popup(Mess,0,"Отключение сетевого диска",vbInformation);
}
}

/************* Подключение сетевого диска ***********************/

IsError=false;
try {WshNetwork.MapNetworkDrive(Drive,NetPath);} //Подключаем сетевой диск

catch (e) //Обрабатываем возможные ошибки
{
if (e != 0) //Выводим сообщение об ошибке
{
IsError=true;
return Drive+" не подключен к " + NetPath+ " " +e.description + "\n";
}
}
if (!IsError) //Все в порядке
{
return Drive+" подключен к " + NetPath+"\n" ;
}
return "";
}
Создание групп,пользователей,помещение пользователей в группу /********************************************************************/
/* Имя: Add_Groups_Users.js */
/* Язык: JScript */
/* Описание: Создание групп на компьютере */
/* Создание пользователей на компьютере */
/* Помещение пользователей в группы на компьютере */
/********************************************************************/

var NetWork=WScript.CreateObject("WScript.Network");
var NameComp=NetWork.ComputerName; // Имя текущего компьютера
//var NameComp="Enother_Comp"; // Имя произвольного компьютера

var WshShell=WScript.CreateObject("WScript.Shell"),
ComputerObj=GetObject("WinNT://"+NameComp), //Экземпляр объекта Computer
Mess=""; //Текст сообщения

// Делаю группы

Make_Group("Наименование_Группы1","Описание, например: Отдел рогов и копыт");
Make_Group("Наименование_Группы2","Описание, например: Отдел хвостов и ушей");

WScript.Echo(Mess);

// Делаю юзеров
Make_User("Наименование_Группы1","Ivanov","Иванов Александр Петрович","Начальник отдела","пароль");
Make_User("Наименование_Группы2","Sidorov","Сидоров Александр Петрович","Зам. Начальника отдела","пароль");
Make_User("","Barmaley","Бармалей Александр Петрович","Инженер по инф. безопасности","пароль");


// Помещаю юзеров в группы, отличные от первоначальных

UserInGroup(NameComp,"Администраторы","Barmaley");
UserInGroup(NameComp,"Наименование_Группы2","Ivanov");


/************* Конец *********************************************/
// Функции

// Создаю группу с именем ng, описанием dg
function Make_Group(ng,dg)
{
var i_err=true;
var GroupObj=ComputerObj.Create("group",ng); //Создаем объект класса Group
GroupObj.Description=dg; //Меняем описание
try {GroupObj.SetInfo()}; //Сохраняем информацию на компьютере
catch (e)
{
i_err=false;
Mess+="\n Группа "+ng+" "+e.description;
}
if (i_err)
{
Mess+="\n Группа "+ng+" создана";
}
}

// Создаю пользователя в группе ng
// с именем входа nu
// полное имя fu
// описание du
// начальный пароль pu
//
function Make_User(ng,nu,fu,du,pu)
{
var i_err=true;
var Mess;
var UserObj=ComputerObj.Create("user",nu); //Экземпляр объекта User

UserObj.FullName=fu; //Добавляем полное имя
UserObj.Description=du; //Добавляем описание созданного пользователя
UserObj.SetPassword(pu); //Добавляем пароль

try {UserObj.SetInfo()}; //Сохраняем информацию на компьютере
catch (e)
{
i_err=false;
Mess="\n Безуспешно пользователь "+nu+" "+e.description;
}
if (i_err)
{
Mess="\n Пользователь "+nu+" создан";
}

i_err=YesNever(nu);


if (ng != "") {UserInGroup(NameComp,ng,nu)};

WshShell.Popup(Mess,1,"Создаем пользователей",64);

}

// В компьютере nc в группу ng помещаю пользователя nu
function UserInGroup(nc,ng,nu)
{
var GroupObj= GetObject("WinNT://"+nc+"/"+ng), //Связываемся с компьютером
UserObj, //Экземпляр объекта User
Mess;

try {GroupObj.Add("WinNT://"+nc+"/"+nu)}; //Сохраняем информацию на компьютере
catch (e)
{
Mess="\n Безуспешно в группу "+nu+" "+e.description;
WshShell.Popup(Mess,1,"Ошибка при группировке",64);
}
}

//// ставим юзеру птичку пароль никогда не меняется
function YesNever(NUser)
{
var OUser,ltry=true;
try // Пытаемся найти имя в текущем компьютере
{
OUser=GetObject("WinNT://"+NameComp+"/"+NUser+",user");
}

catch (e)
{
ltry=e==0;
}

if (ltry)
{
var Never=OUser.Get("UserFlags");
OUser.Put("UserFlags",0x10000);
OUser.SetInfo();
}
return true;
}

Почитать можно здесь (http://www.intuit.ru/department/os/compromtwin/8/)




© OSzone.net 2001-2012