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

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

Автор: north_crow
Дата сообщения: 05.09.2007 07:40
коллеги!
у меня вот такая проблема как в этой теме http://forum.ru-board.com/topic.cgi?forum=8&bm=1&topic=16722

можно ли с помощью ВБС выставить права юзеру на его профиль?
Автор: YNY
Дата сообщения: 05.09.2007 10:33
north_crow
см тут:
http://forum.ru-board.com/topic.cgi?forum=8&bm=1&topic=19088&start=280
Автор: north_crow
Дата сообщения: 05.09.2007 13:16
YNY
ты про xcacls.vbs??? то она не помогает (( т.к. стоит фат32
Автор: pusiyjan
Дата сообщения: 05.09.2007 16:33
есть скрипт подключения принтера расположенного на шаре к пользователям

Цитата:
Set objNetwork = CreateObject("Wscript.Network")
objNetwork.AddWindowsPrinterConnection "\\archiv4\CanonMF3"
'objNetwork.SetDefaultPrinter "\\archiv4\CanonMF3"

он распространяется на всю группу архив допустим, но мне не надо чтобы он срабатывал для
для принтера на котором он и так расположен, как мне это сделать?

Добавлено:
ох старый стал вот рабочий скрипт который не подключает этот принтер его владельцу

Код:
Set objNetwork = CreateObject("Wscript.Network")
info = objNetwork.ComputerName
if info <> archiv4 then
objNetwork.AddWindowsPrinterConnection "\\archiv4\CanonMF3"
'сделать дефолтный принтер
'objNetwork.SetDefaultPrinter "\\archiv4\CanonMF3"
end if
Автор: ali1977
Дата сообщения: 05.09.2007 23:56
подскажите пжалста где у нас на форуме можно найти скрипт (если он был - искал в батниках, ниче не нашел) чтоб настоить его так чтоб он каждый день определенный файл (или папку) копировал по сети с другого компа, упаковывал и прожигал его на болванку на моем компьютере
Автор: YNY
Дата сообщения: 06.09.2007 05:49

Цитата:
north_crow


Цитата:
т.к. стоит фат32

че-то я тя совсем не понимаю? где у тя FAT32??? о каких правах тогда гришь??? у тя че профиль на серваке кот не на NTFS томе???

Добавлено:
pusiyjan -- вопрос про скрип по принтерам не понял, по этому:

if info <> archiv4 then -- это условие говорит о том что нада выполнять действия ниже если info <> archiv4, т.е. если эт принтер нах на компе archiv4, то на нем он подкл не будет


Добавлено:
строка начинающаяся с ' является комментарием и не выполняется!

Добавлено:
и ПРОЖИГАГ его НА БОЛВАНКУ на моем компьютере
см
http://www.nu2.nu/bcd/

Добавлено:
для ali1977
на стр. 22 у
Цитата:
shola
есть нчечто похожее на то, что тебе нада - пиши ему в личку


Добавлено:
см 23 Vby

А ты гришь не нашел, конечно не совсе то чего ты хочешь но собрать из этого то что тебе надо мона
Автор: north_crow
Дата сообщения: 06.09.2007 07:43
YNY
фат или нтфс - это уже не имеет значение!!!
я уже разобрался где проблема в профиле, решение здесь http://forum.ru-board.com/topic.cgi?forum=8&topic=16722&start=0#18
теперь встречный вопрос... как с помощью ВБС добавить в юзерский куст ntuser.dat пользователя с полными правами?
Автор: YNY
Дата сообщения: 06.09.2007 08:35
north_crow если я не ошибаюсь (иначе извеняюсь), то ntuser.dat хранит инфу кот отображается в HKEY_CURRENT_USER и если тебе в конкретные разделы надо внести изменения, то ранее есть примеры его редактирования:
стр 25: WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment", objUser.DisplayName

Автор: pusiyjan
Дата сообщения: 06.09.2007 11:42
YNY

Цитата:
if info <> archiv4 then -- это условие говорит о том что нада выполнять действия ниже если info <> archiv4, т.е. если эт принтер нах на компе archiv4, то на нем он подкл не будет

есть ПК archiv4 на нем есть принтер подключенный по УСБ, открыт для доступа, я должен его раздать другим в группе архив, но его я не должен подключать к самому себе вот это я и пытаюсь реализовать, но чето не получатся =(
Автор: YNY
Дата сообщения: 07.09.2007 05:47
pusiyjan

пример (из MSDN) подцепления принтера и выставления ему соотв роли
к NT
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\research\library1"
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath

к W9x/ME
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
PrinterDriver = "Lexmark Optra S 1650"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
WshNetwork.SetDefaultPrinter PrinterPath

Добавлено:
The Windows 95 Rundll and Rundll32 Interface

Below is a sample script using Rundll32.exe:
Dim WshShell

Set WshShell = CreateObject("WScript.Shell")
Wshell.Run "RunDLL32 <\\server\share\drvsrv,Install> "<\\server\share>", 1, True
Set WshShell = Nothing

Error: 80070705 The printer driver is unknown.
-or-

Error: 8007070A The printer already exists.
CAUSE
This behavior can occur in Windows Script Host if either of the following conditions are true:

The printer driver is not installed when you use the AddWindowsPrinterConnection method in a script.
-or-

Two or more installed printers use the same printer driver. The AddWindowsPrinterConnection method uses the printer driver name for the printer name.


Добавлено:
на крайняк пользуй Net use и убедись что к комуп подключаясь тебе пароль не нужен

Добавлено:
У меня пример из мсдн работает (принт на ХР ставлю в 2К), правда если доступ к компу с принтом по паролю, то без ввода пароля выводится ошибка "Разрешение отклонено", ПРОВЕРЬ правильность ввода скрипта и особа КОММЕНТАРИИ (символ ' )!!!
Автор: awsswaawsswa
Дата сообщения: 07.09.2007 08:52
Цепляем принтер

//*****************************************************
//JScript 2005 ShS addPrn.js
//Подключение сетевого принтера и установка его принтером по умолчанию
//Пример запуска: %LOGONSERVER%\NETLOGON\addPrn.js \\PrintServer\HPLJ2200DN(23)
//*****************************************************
var WshNetwork,
objArgs,
strErrMsg,
strPrinterPath;
//Путь к подключаемому принтеру берем из параметров запуска
objArgs=WScript.Arguments.Unnamed;
strPrinterPath=objArgs.Item(0);
//
WshNetwork=WScript.CreateObject("Wscript.Network");
try
{
WshNetwork.AddWindowsPrinterConnection(strPrinterPath);
WshNetwork.SetDefaultPrinter(strPrinterPath);
}
catch (objError)
{
if (objError !=0)
{
strErrMsg = "Произошла ошибка при пордключении сетевого принтера - "+strPrinterPath+"\n"+
"Скорее всего узанный сетевой путь не существует"+"\n\n"+
"Обратитесь к системному администратору по тел. 128"
//"Код ошибки: "+ objError.number;
WScript.Echo(strErrMsg);
}
}


Добавлено:
Актуальный скриптик - запись 1с в реест

Dim oShell
Set oShell = CreateObject("WScript.Shell")
sRegKey = "HKCU\Identities"

' C ошибками нафиг
On Error Resume Next

If Not oShell Is Nothing Then
sProfileLoaded2 = oShell.RegRead( sRegKey & "\Super_exe")
    ' а есть ли метки ?
    If sProfileLoaded2 <> "yes" Then
        ' запись метки в реестр и запуск остального
'--------------------------------------------------------------------------
Set WSShell = WScript.CreateObject("WScript.Shell")
Set oShell = CreateObject("WScript.Shell")
WSShell.Run ("regedit /s \\server\NETLOGON\1C_реестр_запись.reg"), 1, true
'--------------------------------------------------------------------------
        oShell.RegWrite sRegKey & "\Super_exe", "yes"
    Else
        ' а если метка была тупо пропускаем ход
    End If
' Free object again
Set oShell = Nothing
End If


а вот тот кусок реестра который пихается под именем
1C_реестр_запись.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"\\\\Server\\1C_BASE\\1C_Superfirma_2007\\"="Бухгалтерия Суперфирмы"
"\\\\Server\\1C_BASE\\ДемоБаза\\"="Демобаза"


Добавлено:
А вот актуальность под названием
автоматическоя настройка Outlook 2003

имя Outlook.prf
---------------------------------------------------------------------------------------
; **************************************************************
; Section 1 - Profile Defaults
; outlook.exe /importprf \\proxima-srv1\netlogon\outlook.prf
; Delete the following registry key values:
; HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Setup\First-Run
; HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Setup\FirstRun
; In the HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Setup
; subkey, set the value of ImportPRF to a string value that specifies the name and path of the PRF file.
; For example, set ImportPRF to \\server1\share\outlook.prf.
; **************************************************************

[General]
Custom=1
DefaultProfile=Yes
;OverwriteProfile=Append
OverwriteProfile=Yes
ModifyDefaultProfileIfPresent=TRUE

; **************************************************************
; Section 2 - Services in Profile
; **************************************************************

[Service List]
Service1=Microsoft Exchange Server
ServiceEGS=Exchange Global Section

;***************************************************************
; Section 4 - Default values for each service.
;***************************************************************

[ServiceEGS]
MailboxName=%UserName%
HomeServer=server.firma.local ; Name of the new Exchange Server

[Service1]
OverwriteExistingService=No
UniqueService=Yes
MailboxName=%UserName%
HomeServer=server.firma.local ; Name of the new Exchange Server
AccountName=Microsoft Exchange Server

;***************************************************************
; Section 6 - Mapping for profile properties
;***************************************************************

[Microsoft Exchange Server]
ServiceName=MSEMS
MDBGUID=5494A1C0297F101BA58708002B2A2517
MailboxName=PT_STRING8,0x6607
HomeServer=PT_STRING8,0x6608
OfflineAddressBookPath=PT_STRING8,0x660E
OfflineFolderPath=PT_STRING8,0x6610

[Exchange Global Section]
SectionGUID=13dbb0c8aa05101a9bb000aa002fc45a
MailboxName=PT_STRING8,0x6607
HomeServer=PT_STRING8,0x6608
RPCoverHTTPflags=PT_LONG,0x6623
RPCProxyServer=PT_UNICODE,0x6622
RPCProxyPrincipalName=PT_UNICODE,0x6625
RPCProxyAuthScheme=PT_LONG,0x6627
CachedExchangeConfigFlags=PT_LONG,0x6629

[Personal Folders]
ServiceName=MSPST MS
Name=PT_STRING8,0x3001
PathToPersonalFolders=PT_STRING8,0x6700
RememberPassword=PT_BOOLEAN,0x6701
EncryptionType=PT_LONG,0x6702
Password=PT_STRING8,0x6703

[Outlook Address Book]
ServiceName=CONTAB

[LDAP Directory]
ServiceName=EMABLT
ServerName=PT_STRING8,0x6600
UserName=PT_STRING8,0x6602
UseSSL=PT_BOOLEAN,0x6613
DisplayName=PT_STRING8,0x3001
ConnectionPort=PT_STRING8,0x6601
SearchTimeout=PT_STRING8,0x6607
MaxEntriesReturned=PT_STRING8,0x6608
SearchBase=PT_STRING8,0x6603

[Microsoft Outlook Client]
SectionGUID=0a0d020000000000c000000000000046
FormDirectoryPage=PT_STRING8,0x0270
WebServicesLocation=PT_STRING8,0x0271
ComposeWithWebServices=PT_BOOLEAN,0x0272
PromptWhenUsingWebServices=PT_BOOLEAN,0x0273
OpenWithWebServices=PT_BOOLEAN,0x0274

[Personal Address Book]
ServiceName=MSPST AB
NameOfPAB=PT_STRING8,0x001e3001
Path=PT_STRING8,0x001e6600
ShowNamesBy=PT_LONG,0x00036601
----------------------------------------------------------------------------------------
конец


Добавлено:
а вот теперь уже скрипт для Outlook
cleanOutlook.vbs
------------------------------------------------------------------------------
Dim oShell
Set oShell = CreateObject("WScript.Shell")
sRegKey = "HKCU\Identities"

' C ошибками нафиг
On Error Resume Next

If Not oShell Is Nothing Then
sProfileLoaded2 = oShell.RegRead( sRegKey & "\Super_outlook_run")
    ' а есть ли метки ?
    If sProfileLoaded2 <> "yes" Then
        ' запись метки в реестр и запуск остального
'--------------------------------------------------------------------------
        ' clean.vbs
        Const HKEY_CURRENT_USER = &H80000001
        sComputer = "."
        Set oRegistry=GetObject("winmgmts:\\" & _
            sComputer & "\root\default:StdRegProv")
        sKeyPath = "Software\Microsoft\Office\11.0\Outlook\Setup"
        sValueName = "First-Run"
        oRegistry.DeleteValue HKEY_CURRENT_USER, sKeyPath, _
            sValueName
'--------------------------------------------------------------------------
        oShell.RegWrite sRegKey & "\Super_outlook_run", "yes"
    Else
        ' а если метка была тупо пропускаем ход
    End If
' Free object again
Set oShell = Nothing
End If
-------------------------------------------------------------------------------------------------


Добавлено:
а теперь сома запись уже в реестр
Outlook_path.vbs
-------------------------------------------------------------------------------
Dim oShell
Set oShell = CreateObject("WScript.Shell")
sRegKey = "HKCU\Identities"

' C ошибками нафиг
On Error Resume Next

If Not oShell Is Nothing Then
sProfileLoaded2 = oShell.RegRead( sRegKey & "\Super_outlook_path")
    ' а есть ли метки ?
    If sProfileLoaded2 <> "yes" Then
        ' запись метки в реестр и запуск остального
'--------------------------------------------------------------------------
' Outlook.vbs
Const HKEY_CURRENT_USER = &H80000001
sComputer = "."
Set oRegistry=GetObject("winmgmts:\\" & _
sComputer & "\root\default:StdRegProv")
sKeyPath = "Software\Microsoft\Office\11.0\Outlook\Setup"
oRegistry.CreateKey HKEY_CURRENT_USER, sKeyPath
sValue = "\\server\netlogon\Outlook.prf"
sValueName = "ImportPRF"
oRegistry.SetStringValue HKEY_CURRENT_USER, _
sKeyPath, sValueName, sValue

'--------------------------------------------------------------------------
        oShell.RegWrite sRegKey & "\Super_outlook_path", "yes"
    Else
        ' а если метка была тупо пропускаем ход
    End If
' Free object again
Set oShell = Nothing
End If
----------------------------------------------------------------------------
конец
Автор: cluster
Дата сообщения: 07.09.2007 22:49
Ребят, тут такое дело..
В общем взял с работы набор скриптов для АД - добавление и создание ресурсов для пользователей, обработка членства для машин, создание групп безопасности для каждой OU и т.д.
На работе домен на Win2k. Не знаю, что там такого понаставлено, но дома, на виртуальной машине, на свежеразвёрнутом домене Win2k3 эти скрипты (естественно, поправленные под мою структуру) ругаются.

Первым делом хочу разобраться с пользователями. Учётки создаются вручную. Необходимо всех пользователей перебрать и создать .cmd файл, который в свою очередь будет создавать ресурсы (профиль и домашнюю директорию) с необходимыми правами.
Если у кого-то есть что-то подобное, оч прошу выложить сюда.
Скрипт, который у меня не работает:

[MORE=Скрипт]В нём применяются ещё и дополнительные JS-скрипты. Если надо для разбора полётов - могу выложить.

------------- НАЧАЛО ---------------
<?xml version="1.0" encoding="windows-1251" standalone="no"?>
<package>
    <job>
        <runtime>
            <description>Проверка и исправление аттрибутов пользователей и создание рабочих дисков и профилей</description>
            <example>

Пример:

UpdateUsers

</example>
        </runtime>
        <reference object="ADs" version="1.0"/>
        <object progid="Scripting.FileSystemObject" id="fso"/>
        <object progid="ADsSecurity" id="ads"/>
        <object progid="AccessControlEntry" id="ace"/>
        <object progid="ADODB.Connection" id="adCon"/>

<script language="VBScript" src="incITGbasic.vbs"/>
<script language="JScript" src="incITGbasic.js"/>
<script language="JScript" src="incITGgroups.js"/>
<script language="JScript" src="incITGobjects.js"/>

<script language="JScript"><![CDATA[

var scriptsPath = ".";

var resourcesServer = "server-2.inclus.org";
var resourcesRoot = "D:\\DFSfiles\\users";
var resourcesDFSRoot = "\\\\inclus.org\\files$\\users";

var scriptCreateResources;
var scriptCreateResourcesName = "createUsersResources.cmd";

var scriptMapResources;
var scriptMapResourcesName = "mapUsersResources.cmd";
var ForWriting= 2;

__doUser.prototype.apply = function (
    obj
) {
    WScript.StdOut.Write(obj.sAMAccountName + "...\n");

    scriptCreateResources.WriteLine("");
    scriptCreateResources.WriteLine("");
    scriptCreateResources.WriteLine("mkdir " + obj.sAMAccountName);

    scriptCreateResources.WriteLine("subinacl /subdirectories " + obj.sAMAccountName + " /setowner=NOVGARO\\" + obj.sAMAccountName);
//    scriptCreateResources.WriteLine("CACLS " + obj.sAMAccountName + " /G Administrators:F /Y" );
//    scriptCreateResources.WriteLine("CACLS " + obj.sAMAccountName + " /T /C /G NOVGARO\\" + obj.sAMAccountName +":C /E /Y" );
    scriptCreateResources.WriteLine("CACLS " + obj.sAMAccountName + " /E /G NOVGARO\\" + obj.sAMAccountName +":C" );

    scriptCreateResources.WriteLine("cd " + obj.sAMAccountName);
    scriptCreateResources.WriteLine("mkdir home");
    scriptCreateResources.WriteLine("mkdir profile");
    scriptCreateResources.WriteLine("cd ..");

    scriptCreateResources.WriteLine("net share DFSfiles--users--" + obj.sAMAccountName + "--profile$=\"%resourcesRoot%\\" + obj.sAMAccountName + "\\profile\" /cache:None /grant:full");
    scriptCreateResources.WriteLine("net share DFSfiles--users--" + obj.sAMAccountName + "--home$=\"%resourcesRoot%\\" + obj.sAMAccountName + "\\home\" /grant:full /cache:programs");

    scriptMapResources.WriteLine("dfscmd /map \"" + resourcesDFSRoot + "\\" + obj.sAMAccountName + "\\profile\" \\\\%resourcesServer%\\DFSfiles--users--" + obj.sAMAccountName + "--profile$ /restore");
    scriptMapResources.WriteLine("dfscmd /map \"" + resourcesDFSRoot + "\\" + obj.sAMAccountName + "\\home\" \\\\%resourcesServer%\\DFSfiles--users--" + obj.sAMAccountName + "--home$ /restore");
};

function __doUser (
) {
};


//try {
    main();
//} catch(e) {
//    WScript.StdOut.Write("[UpdateUsers] : При выполнении скрипта возникла ошибка " + (e.number & 0x3FFF) + ": \"" + e.description + "\".");
//};


function main()
{
    WScript.StdOut.Write("Проверка и исправление аттрибутов пользователей и создание рабочих дисков и профилей...\n");
    
    scriptCreateResources = fso.CreateTextFile(fso.BuildPath(scriptsPath, scriptCreateResourcesName), true);

    scriptMapResources = fso.CreateTextFile(fso.BuildPath(scriptsPath, scriptMapResourcesName), true);

    scriptCreateResources.WriteLine("@echo off");
    scriptCreateResources.WriteLine("set resourcesRoot=\"" + resourcesRoot + "\"");
    scriptCreateResources.WriteLine("mkdir %resourcesRoot%");
    scriptCreateResources.WriteLine("cd /d %resourcesRoot%");

    scriptMapResources.WriteLine("@echo off");
    scriptMapResources.WriteLine("set resourcesServer=" + resourcesServer);

    iterateObjects (
        objGaroUsers,
        new __doUser(),
        true
    );

    scriptCreateResources.Close();
    scriptMapResources.Close();
};

]]></script>
    </job>
</package>
------------- КОНЕЦ ---------------

У меня сначала ругается на <object progid="ADsSecurity" id="ads"/> - Недопустимое значение аттрибута progid. Если строку удалить, потом ещё будет ругаться.
[/MORE]
Автор: dias65
Дата сообщения: 09.09.2007 20:31
awsswaawsswa
а тэг "more" недоступен?
сорри за флуд
Автор: YNY
Дата сообщения: 10.09.2007 09:27

Цитата:
<![CDATA[ .....
...
]]>
-- убери эти теги


Добавлено:
и оставляй ссылку на источник
Автор: pashkin1979
Дата сообщения: 10.09.2007 21:05
Может кто-нить помочь скриптом, чтобы он удалял из указанного места ВСЕ папки, кроме нескольких, жестко указанных. Очень надо, а программировать не умею.
Автор: cluster
Дата сообщения: 10.09.2007 22:21
YNY

Цитата:
-- убери эти теги

теги удалил. теперь ругается на строку 104 - неверная ссылка на объект

103: .....
104: </script>
105:    </job>


Цитата:
и оставляй ссылку на источник

что это значит? я ничего не тёр больше.
Автор: YNY
Дата сообщения: 11.09.2007 05:04

Цитата:
и оставляй ссылку на источник

что это значит? я ничего не тёр больше.

Я имел ввиду то место откуда ты взял скрипт, просто когда ты просто копируешь через буфер ты мог лишних тегов набрать

Добавлено:

Цитата:
__doUser.prototype.apply = function (
obj
)
и др функции перепиши в одну строку
__doUser.prototype.apply = function ( obj)

Добавлено:
скопируй весь текст скрипта начиная с <?xml и заканчивая </package> , не удаляя ничего, в текстовый файл, затем смени расширение на xml и открой в IE.
Ты для своих нужд могешь скопировать все, что лежит внутри тела <![CDATA[ ]]>, в текстовый документ (Mscrt.txt) и затем используя теги <script id=0 language=VBScript src="путь к твоему Mscrt.txt">...</script> в основном окне вызывать ф-ции из него
или просто сохрани в Mscrt.html, добавив теги

<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<!--<script id=0 language=jScript src="Mscrt.txt">
</script>-->
<script language=JScript >
тело <![CDATA[ ]]>
</script>
<body >
....
</body>
</html>

Добавлено:
сменив синтаксис на vbScript-овский можешь сохранить как *.vbs -- и все должно воркать!
Автор: Oldster
Дата сообщения: 11.09.2007 06:53
cluster
вот мой скрипт
[more]
<job id="Example">
    <runtime>
        <description>
Имя: multilang.wsf
Кодировка: Windows
Описание: Использование функции InputBox в JScript-сценарии
        </description>
    </runtime>
    <script language="VBScript">
Function InputName (str) ' Описываем функцию на языке VBScript
' Вводим имя в диалоговом окне
InputName = InputBox(str, "Окно ввода")
End Function
    </script>
    <script language="JScript">
var str,t_folder;
var RootDSE,DefaultDomain,GroupObj,objUser;

var FullName,
TelNumber,
login,
description,
office,
EMail;

path_1 = "\\\\mydomain.ru\\dfs\\Users";


//Поехали...
do {
FullName = InputName("Введите ФИО");    
}while (FullName == "");

if (FullName != "undefined"){
    do{
     login = InputName("Введите login");
    }while(TestUser(login) != false);
    if (login != "undefined"){
        EMail = InputName("Введите почтовый домен:\n1-mydomain.ru (по умолчанию)\n2-mydomain_1.ru");
        if (EMail != "undefined"){
            if (EMail == "" || EMail == "1"){
                EMail = login + "@mydomain.ru";
            }else{
                EMail = login + "@mydomain_1.ru";
            }
            //Не обязательные параметры
            TelNumber = InputName("Введите номер телефона");
            if (TelNumber != "undefined"){
                description = InputName("Описание пользователя");
                if (description != "undefined"){
                    office = InputName("Введите номер комнаты");
                    if (office != "undefined"){
                        
                        //ввод данных завершен!
                        //Добавляем инфу в AD
                        RootDSE=GetObject("LDAP://RootDSE");
                        GroupObj=GetObject("LDAP://CN=Users," + RootDSE.Get("DefaultNamingContext"));
                        
                        objUser = GroupObj.Create("user","cn=" + FullName);
                        objUser.Put("samAccountName",login);
                        objUser.SetInfo();
                        objUser.DisplayName = FullName;
                        objUser.UserPrincipalName = login + "@mydomain.ru";
                        objUser.SetPassword("1234567");
                        objUser.AccountDisabled = false;
                        objUser.description = description;
                        objUser.title = description;
                        objUser.mail = EMail;
                        //Оффис
                        objUser.physicalDeliveryOfficeName = office;
                        //номер тел.
                        objUser.telephoneNumber = TelNumber;
                        objUser.profilePath = "\\\\mydomain.ru\\dfs\\users\\profiles\\" + login;
                        objUser.SetInfo();
                        
                        //Заставляем пользователя сменить пароль при очередном логоне
                        objUser.Put("pwdLastSet",0);
                        objUser.SetInfo();
                        //********************************************
                        //В AD завели юзера
                        

                        //Создание папок для пользователя.
                        if (FolderUser(login,path_1)) t_folder = "Ok";
                        else t_folder = "Error";
                        //********************************************

                        str = "Создан пользователь:\nФИО: " + FullName + "\n";
                        str += "login: " + login + "\n";
                        str += "Электрическая почта: " + EMail + "\n";
                        str += "Внутренний телефон: " + TelNumber + "\n";
                        str += "Офис: " + office + "\n";
                        str += "Описание: " + description + "\n";
                        str += "-------------------------------\n";
                        str += "Папки на сервере созданы: " + t_folder + "\n";
                        
                        WScript.Echo(str);
                    }
                }
            }
        }
    }
}
            
    

function TestUser (log_in){
    var objConnection, objCommand, objCommand, objRecordSet,login, temp; //Для юзеров    
    if (log_in != ""){
        objConnection = WScript.CreateObject("ADODB.Connection");
        objConnection.Open("Provider=ADsDSOObject;");
        objCommand = WScript.CreateObject("ADODB.Command");
        objCommand.ActiveConnection = objConnection
        objCommand.CommandText = "<GC://dc=mydomain,dc=ru>;(objectCategory=User);cn,sAMAccountName,userAccountControl;subtree";
        objRecordSet = objCommand.Execute;
        
        temp = 0;
        
        while (!objRecordSet.EOF){
            //Логин
     login = new String (objRecordSet.Fields("sAMAccountName"));
     login = login.toLowerCase();
    
     if (login == log_in){
     WScript.Echo ("Такой логин уже занят: " + objRecordSet.Fields("cn"));
     temp = 1;
     break;
     }
         objRecordSet.MoveNext;
        }
        objConnection.Close;
    }else{
        WScript.Echo ("Пустого логина не бывет!!!");
        return true;
    }
    
    if (temp == 1) return true;
    else return false;
}

function FolderUser (log_in , path_1){
    var WshShell;

    WshShell = WScript.CreateObject ("WScript.Shell");
    
    if (WshShell.Run("%comspec% /c mkdir " + path_1 + "\\AppData\\" + log_in,1,true)) return 0;
    if (WshShell.Run("%comspec% /c cacls " + path_1 + "\\AppData\\" + log_in + " /T /E /C /G mydomain\\"+log_in + ":F",1,true)) return 0;
    //"cacls $path\\AppData\\$login /T /E /C /G mydomain\\$login:F"
    if (WshShell.Run("%comspec% /c mkdir " + path_1 + "\\Desktops\\" + log_in,1,true)) return 0;
    if (WshShell.Run("%comspec% /c cacls " + path_1 + "\\Desktops\\" + log_in + " /T /E /C /G mydomain\\"+log_in + ":F",1,true)) return 0;
    
    if (WshShell.Run("%comspec% /c mkdir " + path_1 + "\\Documents\\" + log_in,1,true)) return 0;
    if (WshShell.Run("%comspec% /c cacls " + path_1 + "\\Documents\\" + log_in + " /T /E /C /G mydomain\\"+log_in + ":F",1,true)) return 0;
    
    if (WshShell.Run("%comspec% /c mkdir " + path_1 + "\\Mail\\" + log_in,1,true)) return 0;
    if (WshShell.Run("%comspec% /c cacls " + path_1 + "\\Mail\\" + log_in + " /T /E /C /G mydomain\\"+log_in + ":F",1,true)) return 0;
    
    if (WshShell.Run("%comspec% /c mkdir " + path_1 + "\\Profiles\\" + log_in,1,true)) return 0;
    if (WshShell.Run("%comspec% /c cacls " + path_1 + "\\Profiles\\" + log_in + " /T /E /C /G mydomain\\"+log_in + ":F",1,true)) return 0;
    
    return 1;
    
}
    </script>
</job>
[/more]
Делает следующее (кроме ответов на очевидные вопросы):
- проверяет на наличее существующих логинов (если такой логин уже есть, то предлагает ввести другой)
- создает структуру каталогов для юзверя на сервере + дает доступ на них.
- пасс у узера по умолчанию - 1234567 и требует смены при первом логоне.
Автор: cluster
Дата сообщения: 11.09.2007 10:32

Цитата:
скопируй весь текст скрипта начиная с <?xml и заканчивая </package> , не удаляя ничего, в текстовый файл, затем смени расширение на xml и открой в IE.
Ты для своих нужд могешь скопировать все, что лежит внутри тела <![CDATA[ ]]>, в текстовый документ (Mscrt.txt) и затем используя теги <script id=0 language=VBScript src="путь к твоему Mscrt.txt">...</script> в основном окне вызывать ф-ции из него
или просто сохрани в Mscrt.html, добавив теги

<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<!--<script id=0 language=jScript src="Mscrt.txt">
</script>-->
<script language=JScript >
тело <![CDATA[ ]]>
</script>
<body >
....
</body>
</html>

Добавлено:
сменив синтаксис на vbScript-овский можешь сохранить как *.vbs -- и все должно воркать!

Блин, я, если честно, не понимаю, зачем мне открывать скрипт в IE.
Тело <![CDATA[ ]]> содержит рабочий скрипт. зачем нам тоже самое пихать в Mscrt.txt?
И что для моих целей писать в
<body >
....
</body>
Автор: YNY
Дата сообщения: 11.09.2007 11:31

Цитата:
cluster

я не пользуюсь js скриптами или контейнирами в xml формате, по этой причине все выше изложенное

Добавлено:
я ничего не говорил про <body> -- че хочешь то и суй.



Добавлено:
по правилам синтаксиса js

function function_name(function_param) {
.....;
.....;
}
";" - не ставится после объявления функции (см. пример выше), но ставится после вызова функции:

function_name();

Проверяй синтаксис!
Автор: yazzi
Дата сообщения: 11.09.2007 21:50
Помогите плиз запускаю на сервере скрипт

Function GetCurrentUserName
' Объявляем переменные
Dim ColUserName, objUserName
' Создаем коллекцию экземпляров класса Win32_ComputerSystem
Set ColUserName = objService.ExecQuery _
("SELECT * FROM Win32_ComputerSystem")
' Перебираем коллекцию
For Each objUserName In ColUserName
' Возвращаем имя активного пользователя
GetCurrentUserName = objUserName.UserName
Next
End Function

до этого получаются все компьютеры из домена
Почему на компе где стоит Windows Xp получает имя активного пользователя
а на компе где стоит WIndows 2000 получает имя активного пользователя тока тогда когда залогинен по админом, а если по обычным юзером то выдает Null.
Автор: YNY
Дата сообщения: 12.09.2007 07:21

Цитата:
yazzi


strComputer = "."
Set objService= GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

-- проверял в W2k на виртуалке: работает для админа, для пользователя, опытного пользователя и (ск всего) для др.

дает то чего тебе нада
Автор: cluster
Дата сообщения: 12.09.2007 11:28
Oldster

Цитата:
вот мой скрипт Подробнее...

Пробую твой скрипт.. При запуске ругается на строку 1, символ 1 - "Предполагается наличие инструкции"

Добавлено:
Извиняюсь, переименовал в *.wsf и скрипт запустился.
Автор: inetimon
Дата сообщения: 12.09.2007 14:28
Подскажите как из скрипта запустить программу от имени другого пользователя ???
например:

Код:
Dim WshShell
set WshShell = CreateObject("wscript.Shell")
WshShell.Run ("notepad.exe")
Автор: yazzi
Дата сообщения: 12.09.2007 22:22
YNY
если ты сидишь на этом компе то дает проблема состоит в том что если скрипт запускается на серваке то он говорит что фиг тебе а не имя активного пользователя
Автор: YNY
Дата сообщения: 13.09.2007 06:40

Цитата:
yazzi

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

Добавлено:
inetimon

Цитата:
ругается на строку 1, символ 1


Вот как выглядит мной переработаный твой скрипт и никаких ошибок не выдает:

'имя активного пользователя -
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Function GetCurrentUserName
' Объявляем переменные
Dim ColUserName
DIM objUserName
' Создаем коллекцию экземпляров класса Win32_ComputerSystem
Set ColUserName = objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem")
' Перебираем коллекцию
For Each objUserName In ColUserName
' Возвращаем имя активного пользователя
GetCurrentUserName = objUserName.UserName
    msgbox GetCurrentUserName
Next
End Function

GetCurrentUserName

причем, если развернуть блокнот на все окно то <<Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
>> должно влазить в одну строчку целиком иначе ставь _ перед переносом строки
Автор: awsswaawsswa
Дата сообщения: 13.09.2007 07:21
Простенький скрипт в логин пользователя для подключения личног сетевого ресурса как диск - и переименование его согластноименю пользователя из домена:

' VBScript подключенне сетевого диска.
' ----------------------------------------'
'
On Error Resume Next

Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName, strUserName
'
Dim ADSysInfo
Dim sUserName

Set ADSysInfo = CreateObject("ADSystemInfo")
Set sUserName = GetObject("LDAP://" & ADSysInfo.UserName)

'WScript.Echo sUserName.cn
'WScript.Echo sUserName.displayname
'WScript.Echo sUserName.description

' Буква монтирования диска и каталог
strDriveLetter = "S:"
strRemotePath = "\\Server\Home"
strNewName = "Личная папка " + sUserName.cn
mapped = false

' Подключение сетевого диска
' (strLocalDrive, strRemoteShare, [persistent], [strUser], [strPassword])

Set objNetwork = CreateObject("WScript.Network")
Set oDrives=objNetwork.EnumNetworkDrives
strUserName = objNetwork.UserName

For i = 0 to oDrives.Count - 1 Step 2
' WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
If oDrives.Item(i)=strDriveLetter Then mapped = true

Next

'WScript.echo "mapped = " & mapped
If mapped Then objNetwork.RemoveNetworkDrive strDriveLetter
If mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath _
& "\" & strUserName

If Not mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath _
& "\" & strUserName

' Переименование каталога
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strDriveLetter).Self.Name = strNewName

WScript.Quit


' End of script.


Добавлено:
отладочные надписи закоментированы - но для обучения и понимания можете убрать ` и потренироваться
Автор: strizhakovs
Дата сообщения: 13.09.2007 10:01
Всем доброго времени суток!
Помогите решить одну проблемку.
Есть простой скрипт по созданию группы в АД. Проблемма состоит в том, что в сети два домен-контролера(S1 и S2), которые между собой синхронизируются. Скрипт создает группу на контролере S1 потом идет синхронизация на S2. А мне нужно чтобы он сразу создавал его на S2. Как это можно сделать.
Вот сам скрипт:

Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("DefaultNamingContext")
Set objOU = GetObject("LDAP://ou=HR,dc=NA," & strDNSDomain)
Set objGroup = objOU.Create("Group", "cn=Vendors")
objGroup.Put "sAMAccountName", "vendors"
objGroup.Put "groupType", ADS_GROUP_TYPE_LOCAL_GROUP
objGroup.MailEnable
objGroup.SetInfo
Автор: YNY
Дата сообщения: 13.09.2007 16:51

Цитата:
от имени другого пользователя ???

???---какова другова пользователя, выражайся точней, если с правами админа, то см стр в обратном порядке-пример такго скриптика (запуск от админа) есть


Добавлено:

Цитата:
strizhakovs


Цитата:
Скрипт создает группу на контролере S1


А откуда ты его запускаешь? Возмона, что если ты его поместишь (в шару) на S2 и, там запустив, ты получишь чего хочешь!
Автор: strizhakovs
Дата сообщения: 13.09.2007 18:02
YNY

Скрипт я запускаю со своей рабочей машины, которая находится в домене, и которая при логоне зацепилась за домен контролер S1. Можно конечно, сделать логоф и потом логон, в надежде на то, что при нововом логоне она подцепится ко второму домен контролеру или принудительно прилогониться ко второму домен контролеру. Но это не то.
Наверняка в скрипте можно явно указать, чтобы он создавал объекты на конкретном домен контролере. Вариант запускать скрипт на домен контролере не подходит, в силу ряда причин... Его нужно запускать именно на третьей машине находящейся в домене...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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