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

» Автоматизация администрирования

Автор: alecsandrb
Дата сообщения: 18.03.2005 11:38
Подскажите, пожалуйста, скрипт которым я смог назначить переменные окружения для пользователя домена (Пример: TEMP=C:\temp, TMP=C:\temp и т.д.). Если это можно сделать через групповые политики то подскажите как?
И еще каким образом назначить пользователю перенаправление папок (если можно пример).
Автор: AlexSSS
Дата сообщения: 18.03.2005 11:52
alecsandrb
Для Win9X это делается c помощью winset.exe
winset USERNAME="Vasja"

входит она в состав Win98 или ее надо искать в инете - не помню
Автор: alecsandrb
Дата сообщения: 18.03.2005 13:10
А для пользователей Win2k/XP как на контроллере домена переменные окружения установить?
Автор: YFred
Дата сообщения: 18.03.2005 13:29
Помогите пожалуйста...
Есть такая задачка:
Мне привозят комп, переставляю Виндузу (с нуля). На этом компе необходимо установить сетевой принтер.
Вопрос:
1. Как установить сетевой принтер, если компьютер в данный момент не в сети?
или
2. Возможно ли написать скрипт/батник для установки принтера после подключения компа в сетку.
Автор: AlexSSS
Дата сообщения: 18.03.2005 13:55
alecsandrb
> А для пользователей Win2k/XP как на контроллере
> домена переменные окружения установить?
этого я так и не нашел. Ставил переменные окружения, однако они сохранялись только в текущей сессии скрипт. После закрытия скрипта они пропадали

Посмотри реестр, возможно их можно прописать через него. Но я сам этого не пробовал
добавлено - нашел [HKEY_CURRENT_USER\Environment]
Если записать туда значение, то они появятся после следующего логона пользователя.

YFred
> Возможно ли написать скрипт/батник для установки
> принтера после подключения компа в сетку.
Для Windows 2000/XP без проблем

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.AddWindowsPrinterConnection "\\PrintServer1\Xerox300"
WshNetwork.SetDefaultPrinter "\\PrintServer1\Xerox300"

Это и создаст соединение и скопирует драйвера с сервера

Для Win98 IMHO самый простой вариант - устанавливаешь нужный драйвер на компе, который в сетке. Делаешь экспорт веток реестра, где прописался этот принтер. Находишь в Windows\System все файлы, которые относятся к принтеру.
А скриптом копируешь эти файлы на машину и импортируешь ветки реестр.
Я раньше так делал, чтобы на все машины сразу подключить 3 принтера. Но это было давно, подробностей толком не помню
Автор: YFred
Дата сообщения: 18.03.2005 14:42
AlexSSS
Извени если мой вопрос покажется глупым, но как запустить это:

Цитата:
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.AddWindowsPrinterConnection "\\PrintServer1\Xerox300"
WshNetwork.SetDefaultPrinter "\\PrintServer1\Xerox300"
???
Я сохраняю в файл с расширением .js запускаю - ошибка.
Автор: AlexSSS
Дата сообщения: 18.03.2005 14:54
> Я сохраняю в файл с расширением .js запускаю - ошибка.
дай расширение VBS
Автор: alecsandrb
Дата сообщения: 19.03.2005 11:15
Кто-нибудь может подсказать как можно получить OU для пользователя Username в виде текстовой строки. OU может быть вложенной и хотелось бы получить полный вариант: OU1/OU2/.. .
Автор: Jovanotti
Дата сообщения: 19.03.2005 12:01
alecsandrb
Может поможет ?
http://www.osp.ru/win2000/worknt/qna/410_9.htm
Автор: AlexSSS
Дата сообщения: 19.03.2005 12:52
alecsandrb
вставь в Эксель следующий макрос
distinguishedName - то, что тебе нужно
добавив в запрос дополнительные поля, можно получить любую другую инфу из AD

Sub getuserinfo()
Cells.Clear

Set objConnection = CreateObject("ADODB.Connection")
objConnection.provider = "ADsDSOObject"
objConnection.Open ("Active Directory Provider")

CommandText = "Select cn, name, distinguishedName"
CommandText = CommandText + " from 'LDAP://DC=main,DC=blrt'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

n = 1
While Not objRecordset.EOF
Cells(n, 1).Value = objRecordset.fields("cn").Value
Cells(n, 2).Value = objRecordset.fields("Name").Value
Cells(n, 3).Value = objRecordset.fields("distinguishedName").Value
objRecordset.MoveNext
n = n + 1
Wend
End Sub
Автор: Smitis
Дата сообщения: 20.03.2005 00:13
alecsandrb

Цитата:
А для пользователей Win2k/XP как на контроллере домена переменные окружения установить?

Через логин-скрипт утилкой setx, например

Код:
TEMP=с:\temp
setx TEMP %TEMP%
setx TMP %TEMP%
Автор: alecsandrb
Дата сообщения: 20.03.2005 06:44
Smitis

Я думаю что вариант с добавлением в реестр данных о временной папке вернее, т.к. твой скорее всего выполниться в сессии и на время этой сессии и установит этот параметр а после того как скрипт выполниться, он (параметр) изменится на системный по умолчанию.

AlexSSS

Спасибо за совет, но это не совсем то о чем я пмсал.
Мне нужен скрипт который для текущего пользователя (который сейчас соединяется с сервером) определяет в каких он OU автоматом затем формирует строку типа:
\\domain\shared dir\ou1\ou2\$username
Это для того чтобы указать автоматом рабочую папку пользователя.
Автор: AlexSSS
Дата сообщения: 20.03.2005 20:40
alecsandrb
понял. Тогда лови вариант 2

' определение текущего UserName
' Этот вариант проходит для Windows 2000/XP и выше
Set WshShell = CreateObject("Wscript.Shell")
UserName = WshShell.ExpandEnvironmentStrings("%username%")

Set objConnection = CreateObject("ADODB.Connection")
objConnection.provider = "ADsDSOObject"
objConnection.Open ("Active Directory Provider")

' Запрос информации по учетной записи пользователя
CommandText = "Select cn, name, distinguishedName, canonicalName, sAMAccountName"
CommandText = CommandText + " from 'LDAP://DC=dom1,DC=dom2'"
CommandText = CommandText + " where sAMAccountName='" + UserName + "'"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

If Not objRecordset.EOF Then
' Если запись для этого пользователя найдена то
' Процедура обработки distinguishedName или canonicalName
End If

В последнем IF--END IF размещается процедура формирования пути исходя из distinguishedName или canonicalName.

1. distinguishedName выглядит следующим образом
"CN=Ivanov Petr,OU=Managers,OU=Firm,DC=dom1,DC=dom2"
и путь вычисляется таким образом

dn = objRecordset.fields("distinguishedName").Value
myArray = Split(dn, ",")
Path = ""
For Each rec In myArray
If Left(rec, 3) = "OU=" Then
Path = Mid(rec, 4) + "\" + Path
End If
Next

получается путь в виде "Firm\Managers\"

2. canonicalName выглядит следующим образом
"dom1.dom2/Firm/Managers/Ivanov Petr"
как видишь, здесь вообще достаточно заменить "/" на "\" и вырезать имя домена, подставив на его место твои " \\domain\shared dir"
Автор: Smitis
Дата сообщения: 20.03.2005 22:04
alecsandrb

Цитата:
Я думаю что вариант с добавлением в реестр данных о временной папке вернее, т.к. твой скорее всего выполниться в сессии и на время этой сессии и установит этот параметр а после того как скрипт выполниться, он (параметр) изменится на системный по умолчанию.

Обрати внимание - я использую вызов утилиты SETX! Эта утилита (SETX.EXE) как раз и предназначена для таких целей.
Автор: alecsandrb
Дата сообщения: 21.03.2005 05:24
Вопрос может и не по теме но где можно посмотреть состав объектов Active Directory
чтобы можно было не догадываться о возможном значении того или иного параметра а знать точно что он будет содержать и значить?
Автор: AlexSSS
Дата сообщения: 21.03.2005 08:01
alecsandrb
> где можно посмотреть состав объектов Active Directory
поставь Windows Server 2003 Administration Tools Pack (или для 2000-го)
утилита ADSI Edit
Автор: alecsandrb
Дата сообщения: 21.03.2005 11:06
Подскажите каким образом из скрипта установить права пользовотеля (группы) на папку на сервере? Все примеры показывают как посмотреть эти установки для пользователя (группы) или же наооборот для каталога (кто что может делать в каталоге), а я хотел бы при создании пользователя например создать ему несколько папок и раздать права (папка1 - чтение, папка2 - полный доступ).
Автор: kuvsh
Дата сообщения: 21.03.2005 12:04
У мнея вопрос наверное покажется смешным, но так как я профан то очень нужна ваша помощь.
Итак есть задача - удаленно на всех компах в домене удалить Касперского с помощь программы RemoveKav.exe. В данном случае легче побегать 5 минт и снести, но важно именно решение такой задачи.
1. Сделал батничек такого вида:
net use P: /delete
net use P: \\file_server\d\file_arhive\Antivirus
P:\RemoveKAV.exe
net use P: /delete
Но тут возникла проблема - требует подтверждения. Пробовал найти ключи чтоб автоматом подтверждал - то ли нет их, то ли не пашут.
И еще, в идеале хотелось бы понять или посмотреть решение задачи на WSH, причем более сложной:
1. делаем проверку - стоит ли Касперский - если да то запускаем RemoveKAV (опять таки чтоб без подтверждений). Если Касперского нет, то скрипт завершаем
2. Возможно создание файла отчета.
Спасибо заранее за любую помощь.
Автор: leputain
Дата сообщения: 21.03.2005 13:25
а куда обычно кладут скрипты для машин/пользователей? в sysvol/netlogon?
Автор: merlkerry
Дата сообщения: 21.03.2005 14:56
leputain

Цитата:
а куда обычно кладут скрипты для машин/пользователей? в sysvol/netlogon?

ну да, на sysvol/netlogon и кладут
Автор: Jovanotti
Дата сообщения: 21.03.2005 15:55
kuvsh
Не пробовал RemoveKAV
Но думаю следует выполнить в связке с прогой їremotexec

Можно попоробовать сделать скрипт использущий стандартный инсталлер KAVа
выбирая в нем пункт "деинсталировать"
Так думаю даже проще.
Принцип могу показать на автоматичской установке FARа
Автор: Alan Mon
Дата сообщения: 21.03.2005 16:20
alecsandrb
cacls /T, cacls /E
Автор: Klesk
Дата сообщения: 21.03.2005 20:40
Прошу прощения, но я потерял сообщение про настройку акаунта эл. почты, поэтому без цитаты...

У меня вот какой вопрос - как сделать, чтобы в поле SMTP Display Name отображалось Иванов Иван Иванович, а не Ivanov (к примеру).
Автор: Garreth
Дата сообщения: 21.03.2005 20:54
Господа! А есть ли механизм отбора пользователей с разными ОС? Т.е. если ты на Windows 98, то тебе выполнять run.bat с Kixtart. А если ты под Windows 2000/xp, то kix32. Или это можно оформить скриптом? Подскажите, плиз!
Автор: AlexSSS
Дата сообщения: 21.03.2005 22:08
Garreth
лови реальный кусок скрипта, это logonscript.bat

@ECHO OFF
if (%OS%) == (Windows_NT) kix32.exe ks_nt.kix
if NOT (%OS%) == (Windows_NT) %0\..\kix32.exe ks_98.kix
EXIT

для всех виндусовых операционок киксовый скрипт запускается через kix32.exe, но немного разные строки запуска. Подробности есть на Микрософте.

Внутри киксового скрипта NT4/Windows2000/WindowsXP/Windows2003 определяются
If @INWIN=1
; for Windows NT/2000/XP only
endif

дополнительные сведения об операционках можно получить через @ProductType, @Build

PS. Я бы советовал использовать одни и те же скрипты для разных операционок. Большинство вещей реализуется одинаково для любых ОС. Если какие-то процедуры реализуются по разному для разных операционок, то нужный код запускатьчерез If @INWIN
Автор: Garreth
Дата сообщения: 21.03.2005 23:29
AlexSSS
уже в третий раз - спасибо!!
Остается придумать, как на 300 пользователей прописать разом один параметр....


Добавлено:
Вот село некошенное - элементарно делается при помощи оснастки AD Users and Computers в версии 2003. Сорри за беспокойство!
Автор: AlexSSS
Дата сообщения: 22.03.2005 00:14
Garreth
Прежде, чем ставить скрипты в домен, рекомендую всегда проверять корректность их работы.

Я поступаю для KIX так
1. На диске создан каталог, в который заброшены все EXE и DLL из поставки KIX
2. В этом же каталоге размещаю батник для записи скрипта и сам скрипт. Запускаю батник, он запускает скрипт и все проверяется на локальной машине.
Во время отладки бывает полезно выводить какие-то промежуточные результаты на экран. Это делается с помощью оператора ?
Включить трассировку скрипта можно в скрипте командой DEBUG "ON".

Если не уверен в каких-то действиях скрипта, в нем для начала можно поставить ограничение его действия на конкретных пользователей или группах
IF @UserID="vasja"
IF InGroup("IT")
убеждаешься по факту, что с ними все в порядке, потом убираешь ограничение.

Если ты еще занимаешься прописыванием нового мейлсервера и будут возникать срочные вопросы, можешь писать мне напрямую на мейл. Вначале напиши свой мейл через личные сообщения, а там дальше спишемся
Автор: kuvsh
Дата сообщения: 22.03.2005 09:37
Вообщем написал я его... Правдо ИМХО кривоват он и доработать нада... от советов не откажусь :
[more]'**************************'
'* File: removekav.vbs *'
'* Author: kuvsh *'
'**************************'
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "K:", "\\file_server\d\file_arhive\Antivirus"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "K:\RemoveKAV.exe"

'Проблему с необходимостью двух подтверждений решил двумя циклами
KL = true

do while KL
if WshShell.AppActivate("RemoveKAV") then
WriteWord()
KL = false
end if
WScript.Sleep 1
loop

CL = true

do while CL
if WshShell.AppActivate("RemoveKAV") then
WriteWord()
CL = false
end if
WScript.Sleep 1
loop

function WriteWord()
WshShell.SendKeys "{ENTER}"
end function


Wscript.Sleep 4000
WshNetwork.RemoveNetworkDrive "K:"[/more]

Теперь у меня возникло несколько вопросов.
1. Хотел как в батнике сначала удалить мап драйв, но здесь попытка удалить отсутствующий диск приводит к ошибке и окончанию скрипта.
2. Перед удалением диска я поставил фиксированую паузу... можно ли как нибудь сделать, чтобы удалять диск в тот момент, когда к нему закончилось обращение.
3. Хотелось бы еще понять, как сохранять отчет такого типа:
Пользователь такой-то применил скрипт. Касперский удален на машине такой то.

Заранее благодарен за ответы
Автор: Jovanotti
Дата сообщения: 22.03.2005 10:07
kuvsh

Цитата:
1. Хотел как в батнике сначала удалить мап драйв, но здесь попытка удалить отсутствующий диск приводит к ошибке и окончанию скрипта

Сделай проверку на наличие буквы диска который хочешь отмонтировать
Примерно if exist ....
Автор: merlkerry
Дата сообщения: 22.03.2005 13:09

Цитата:
Сделай проверку на наличие буквы диска который хочешь отмонтировать
Примерно if exist ....


лучше заюзать метод WScript.Network.EnumNetworkDrives()

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


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