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

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

Автор: K2D
Дата сообщения: 28.09.2004 15:48
Кто нить знает скрипт для смены пароля локального админа , что бы мог менять не только в русском но и английском Виндовс 2000.
Автор: kibkalo
Дата сообщения: 28.09.2004 19:02
K2D - скрипт ОДИНАКОВ. Просто имя юзера переименуй с Администратор на Administrator. (можно работать вообще с SID - S-1-5-32-544 но объяснять что это и как юзать мне лениво. Удобнее тем, что работает и с переименованными аккаунтами первого администратора)
Автор: Ptrovich
Дата сообщения: 29.09.2004 07:19
kibkalo

Так а на что это повлияет? На то что я смогу юзать скрипты с удаленной машины на этой?
Или на то что я вообще смогу юзать скрипты на машине , на которой я включил эти два ключика? И вообще , я не могу понять, про какое понятие Remote идет речь, про удаленный комп вне локалки, тоесть из мира, или про удаленный комп любой, даже который находится в пределах локальной сети?
Автор: K2D
Дата сообщения: 29.09.2004 07:28
kibkalo

Видишь в чем дело скрипт то есть но необходимо чтобы он мог понимать русская или английская винда т.к. компов 1000 и нужно его просто запихать в logon.

Option Explicit
'On Error Resume Next
Dim strComputer
Dim objUser
strComputer = "имя_компа"
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user")
objUser.SetPassword "1q2w3e4r5t"
objUser.SetInfo
Автор: kibkalo
Дата сообщения: 29.09.2004 08:34
Ptrovich - с машины А скриптовать машину Б при отсутствии файервола и наличии маршрутизируемого доступа

K2D - политикой скрипт применишь ко всем компам. вместо имени компа везде юзай точку "." а про использование SID вместо имени юзера я уже намекал выше, больше не буду.
Автор: Jovanotti
Дата сообщения: 29.09.2004 09:05
kibkalo
насчет SID не думаю что так все просто
S-1-5-32-544 это ведь только группа локальных админов
а сам локальный админ
S-1-5-21-3579355071-3158467609-758797834-500
Я сам парился со сменой пароля в зависмимости от имени админа
ничего лучше чем использование формы запроса на указание ИМЕНИ ПОЛЬзователя
не нашел

------- часть кода ------ --------- ---------
username = InputBox(Message3,Title,"", 6000, 6000)
If username = "" Then
WScript.Echo Text1
WScript.Quit
Else
End If

pass = InputBox(Message,Title,"", 6000, 6000)
' Evaluate the user input
If pass = "" Then ' Canceled by the user
WScript.Echo Text1
WScript.Quit
Else
WScript.Echo Text2 + pass
End If

Set objUser = GetObject("WinNT://" & strComputer & "/" & username & ",user")
objUser.SetPassword pass
objUser.SetInfo

------------ ------------- --------------- -------------------


На сам понимаешь это не совсем автоматизазированно ,
хотя гибкое решение --- можно менять пароль ЛЮБОГО пользователя
Насчет SIDа ---- попробовал вместо имени загнать просто SID юзера ничего не вышло
выкинуло ошибку в строке
Set objUser = GetObject("WinNT://" & strComputer & "/" & username & ",user")

Автор: kibkalo
Дата сообщения: 30.09.2004 10:26
Jovanotti - намекну тебе немного - благо ты обычно понимаешь..
Локального администратора (первого) нельзя удалить из группы администраторов (хотя можно и юзера и группу переименовать). НО! У группы есть свойство MEMBERS.
Циклом берем всех Members и делаем их сначала Remove из группы потом Add в нее назад в цикле. Разумеется с TRY, CATCH, FINALLY на C#
Соответственно, когда ты пытаешься Remove переименованного администратора ты влетаешь в Catch (exception e) и там сбрасываешь ему пароль.
Уловил?

Добавлено
У меня есть предложение для продвинутых администраторов попробовать перейти с написания скриптов на VBScript на C#. Это реально стабильнее (ловим ошибки - exceptions), производительнее и намного более читаемо. К тому же функциональность намного больше.
Начну сам постить. Первый скрипт это то, чего многим администраторам крупных компаний не хватает - если ваш техсаппорт вводит компы в домен, но не раскидывает аккаунты компов по OU, а оставляет их в дефолтовом контейнере Computers, то для админа это головная боль, ибо к контейнеру отдельных политик не применишь, получается что к тем компам не применяются политики нужные подразделениям, а только общедоменные. Итак возникает вопрос, как бы отловить уродов, которые это не делают и надавать по шапке? Ясно что у объекта компутер есть owner, однако если там сотни объектов, то не станешь делать руками - нужно что-то автоматизировать. Благо в .NET Framework 2.0 (и соответственно в Visual Studio .NET 2005 - в частности в экспресс версии) появилась возможность опрашивать параметр ObjectSecurity - чем я сразу и воспользовался. Вот ниже скрипт. Компилять в Visual C# 2005


Цитата:
#region Using directives

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

#endregion

namespace ListComputerOwners
{
partial class Form1 : Form
{
private DataTable dt;
public Form1()
{
InitializeComponent();
List();
}
public static void Main()
{
Application.Run(new Form1());
}
private void ConstructorTable()
{
this.dt = new DataTable();
DataColumn dc1 = new DataColumn("PC");
dc1.DataType = Type.GetType("System.String");
DataColumn dc2 = new DataColumn("Owner");
dc2.DataType = Type.GetType("System.String");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
this.dataGridView1.DataSource = dt;
}
private void List()
{
this.Text = "OU=Computers,DC=my,DC=domain,DC=ru";
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry("LDAP://OU=Computers,DC=my,DC=domain,DC=ru");
foreach (System.DirectoryServices.DirectoryEntry result in entry.Children)
{
try
{
System.Security.Principal.NTAccount acc = (System.Security.Principal.NTAccount)(result.ObjectSecurity.GetOwner(Type.GetType("System.Security.Principal.NTAccount")));
DataRow dr=this.dt.NewRow();
dr[0]=result.Name;
dr[1]=acc.Value;
this.dt.Rows.Add(dr);
}
catch
{
DataRow dr = this.dt.NewRow();
dr[0] = result.Name;
dr[1] = "[]";
this.dt.Rows.Add(dr);
}
}
this.dt.AcceptChanges();
}
}
}

Автор: distance
Дата сообщения: 30.09.2004 11:51
kibkalo
смысла не вижу переходить на c#
у него есть ровно одно преимущество - поддержка gui
а администраторам - gui - разве надо надо?
а вот минусов есть:
- надо .net framework (20mb)
- надо компилировать
- для компиляции как ты сам сказал, необходим .net аж версии 2.0 и vs 2005 ))
а гдеж его взять-то? да и нет его еще...

итог: на wsh+jscript синтаксис почти тот-же (а не этот уродский vbscript), и делать можно все тоже самое. единственное неудобство - отсутствие модульности (решается инклудом в wsf-файл или созданием компонента)

вот когда .net будет по-дефолту распространяться с OS, вот тогда...
Автор: K2D
Дата сообщения: 30.09.2004 12:30
Не ребята самые удобные для админа это VBScript и JScript. Очень все просто и исполняется на ура.
Автор: kibkalo
Дата сообщения: 30.09.2004 14:42
distance - во первых я не зря указал, что оно для продвинутых админов. начинать с него не стоит. фреймворк есть по умолчанию уже везде (или ты живешь в НТ4 или 9х?) фреймворк 2.0 и студия 2005 нужны ТОЛЬКО для необходимости работы с owner'ом объекта и правами. На бейсике оно не реализуемо.
.NET 1.0 включен в ХР, 1.0 сп2 в ХР сп1а, 1.1 в 2003, 1.1 сп1 в ХРсп2
K2D - про просто читай выше. А вот не дай бог твои скрипты кому-то еще придется править. Когда проекты разрастаются и появляется команда администраторов, вб вводит в ужас.

И разумеется в вб очень тоскливо с обработкой ошибок
Вот например как выглядит нормальный скрипт поиска специфического юзера в домене по такому параметру, как указанный в AD номер пейджера. (разумееется раз я объект нашел, могу сразу его менять)


Цитата:
using System;
using System.Data;
using System.Data.OleDb;

class Test_ActiveDirectoryConnection
{
static void Main(string[] args)
{
const int pager_number = 1234;
OleDbConnection objConnection = new OleDbConnection("Provider=ADsDSOObject");
try
{
objConnection.Open();
Console.WriteLine("Connection to Active Directory established successfully !");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

string objQuery = "Select Name, displayName, pager from 'LDAP://OU=Company,DC=my,DC=domain,DC=ru' " + "where objectCategory = 'CN=Person,CN=Schema,CN=Configuration,DC=my,DC=domain,DC=ru' and pager = '" + pager_number.ToString() + "'";
OleDbCommand objCommand = new OleDbCommand(objQuery , objConnection);
OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCommand);
DataSet objDataSet = new DataSet();
try
{
OleDbDataReader objReader = objCommand.ExecuteReader();
while (objReader.Read())
{
Console.WriteLine(objReader.GetValue(0) + " , " + objReader.GetValue(1) + " , " + objReader.GetValue(2));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
objCommand.Dispose();
objConnection.Close();
objConnection.Dispose();
}
}
}


Еще раз замечу - C# максимально удобен админам крупных сетей, а не новичкам, которые и в вб то теряются
Автор: Ptrovich
Дата сообщения: 04.10.2004 08:12
А скажите пожалуйста, люди добрые есть где нибуть сборник скриптов по WSH для начинающих. Я уже весю тему себе на комп залил, уже на скриптцентр ссылались от МS и на другие ресурсы, но я нигде так и не нашел. Мож кто подскажет?
Автор: K2D
Дата сообщения: 04.10.2004 09:50
И все таки дайте подсказку как поступить чтобы можно одним скриптом и в англ. и в русской менять.

Option Explicit
'On Error Resume Next
Dim strComputer
Dim objUser
strComputer = "имя_компа"
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user")
objUser.SetPassword "1q2w3e4r5t"
objUser.SetInfo


Ptrovich попробуй эту ссылку http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=b4cb2678-dafb-4e30-b2da-b8814fe2da5a
Автор: amitophia
Дата сообщения: 04.10.2004 23:33
Jovanotti

Цитата:
насчет SID не думаю что так все просто
S-1-5-32-544 это ведь только группа локальных админов
а сам локальный админ
S-1-5-21-3579355071-3158467609-758797834-500

зато RID у него всегда 500, а в начале S-1-5-21
Можно взять SID любого локального юзера и заменить RID на 500.

K2D
Ведь имя админа может быть любым. И на аглицкой XP его можно сделать Администратор, (а на немецкой вообще какой-нибудь Das Administrator )
ИМХО с SIDом вариант стабильнее (думаю, по SIDу несложно получить имя юзера)
Автор: K2D
Дата сообщения: 05.10.2004 10:36
Я разобрался сам ,уже давно, как сделать чтобы мог понимать русскую и английскую Винду , но хотел посмотреть примеры может кто тоже етим занимался. А на счет СИДА неочень удобно, У меня скрипт заливается через политики на каждый OU. Например в AсtiveDirectory создан OU програмисты и все их компы занесены туда их 20шт. и есть OU бухгалтера их 10 шт., я через политику устанавливаю logon скрипт , т.е у каждого компа в OU пароль локального админа свой и я его знаю могу поменять в любой момент вот и все... И когда появляются новые компы(которые нам привозят черт знает откуда) проблем с паролями лок.админа нет.
Автор: Raredemon
Дата сообщения: 05.10.2004 13:16
2 all
Вопрос интересный возник, может кто поможет....
Предыстория: долгое время не обслуживаемый толком домен....
Задача: проверить соответствие юзеров в OU, списку юзеров секьюрити группы соответствующей данному OU.
Пример: OU - Administration, SG - Administration, user - Vasya заведен в OU - Administration, входит ли он в SG - Administration?
Можно конечно руками, но когда SG несколько десятков, а юзеров несколько сотен, крышу сорвет пока проверишь... причем это надо сделать как-то более по "нашему" методу и потом делать это регулярно....
Если кто поможет буду очень признателен....
Автор: Jovanotti
Дата сообщения: 06.10.2004 09:21
Думаю это будет в тему ...
Аудит учетных записей пользователей в Active Directory
Автор: GTHack
Дата сообщения: 07.10.2004 09:16
можно ли скриптом установить стартовую страничку?
Автор: JcVai
Дата сообщения: 07.10.2004 09:46
GTHack
Легко - просто правь в реестре значение "Start Page" по адресу "HKCU\Software\Microsoft\Internet Explorer\Main"
Автор: GTHack
Дата сообщения: 07.10.2004 10:03
а так чтоб без лишних вопросов - типа "добавить ли значение или не добавлять ?"

просто хочу всем юзерам в домене разом установить стартовую страницу внутреннего сайта, лишние вопросы не нужны
Автор: Alan Mon
Дата сообщения: 07.10.2004 10:58
Вообще-то если у тебя домен, проще это сделать через GP.
Конфигурация пользователя\Конфигурация Windows\Поддержка Internet Explorer\Адреса URL\Важные адреса URL.
Правда, действует она только на Win2000, XP.

Цитата:
а так чтоб без лишних вопросов - типа "добавить ли значение или не добавлять ?"

regedit /s
Автор: AlexSSS
Дата сообщения: 07.10.2004 11:14
GTHack
> можно ли скриптом установить стартовую страничку?

легко
смотришь, где она находится в реесте и скриптом прописываешь туда нужный адрес
Автор: GTHack
Дата сообщения: 07.10.2004 11:28
так и сделал, всем спасибо, жаль по 98м пришлось бегать вручную прописывать
Автор: distance
Дата сообщения: 07.10.2004 11:33
kibkalo
к слову, на компе установлена Win2000, sp4
dotnet в комплект не входит
но так или иначе я собираюсь переползать на dotnet, по крайней мере на jscript.net
(хотя вроде бы и его тоже нужно компилировать)
насчет поиска в AD по номеру пейджера я бы не сказал что это типовая задача ))
но как демонстрация новых возможностей пример полезен. выборка из AD через sql-запрос - весьма неплохо, осознал я-то по старинке делаю - Filter, Enumerator...
было бы неплохо, если бы показал, какие ещё трюки можно делать "по-новому", а типовые примеры мы сами придумаем
Автор: AlexSSS
Дата сообщения: 07.10.2004 11:39
GTHack, а зачем вручную, если делать это через скрипт, то операционка уже неважна

кроме того
1. пользователь может сбросить домашнюю страницу
2. при посещении интернета можно случайно ткнуть на установку другой домашней страницы
и что, каждый раз будешь бегать прописывать нужные пути???

пример моего скрипта, который прописывает нужные параметры для IE. Правда, он на KIX-е, но идею понять легко

$path = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"

$err = WRITEVALUE($path, "EnableHttp1_1","00000001", REG_DWORD)
$err = WRITEVALUE($path, "ProxyEnable", "00000001", REG_DWORD)
$err = WRITEVALUE($path, "UrlEncoding", "00000001", REG_DWORD)
$err = WRITEVALUE($path, "ProxyOverride","10.0.*.*;<local>" , REG_SZ)
$err = WRITEVALUE($path+"\Cache", "Persistent","0",REG_DWORD)


Добавлено
для установки домашней страницы

$path = "HKCU\Software\Microsoft\Internet Explorer\Main"
$err = WRITEVALUE($path, "StartPage","www.yandex.ru" , REG_SZ)
Автор: GTHack
Дата сообщения: 07.10.2004 12:32
и как ты заставиш этот скрипт выполнится на 98ой ?
скрипт на логин в GP не проканает ...

Добавлено
... и еще - как этот скриптец будет выглядеть на vbs
а то я в vbs не силен
Автор: JcVai
Дата сообщения: 07.10.2004 13:25
GTHack

Код:

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set StdOut = WScript.StdOut
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
oReg.SetStringValue HKEY_CURRENT_USER,strKeyPath,"Start Page","about:blank"
Автор: AlexSSS
Дата сообщения: 07.10.2004 13:44
> и как ты заставиш этот скрипт выполнится на 98ой ?
> скрипт на логин в GP не проканает ...
вешаешь скрипт на конкретного пользователя в Logon Script (закладка profile на пользователе в Active Directory users and computers)
и он будет запускаться хоть на win95
Автор: GTHack
Дата сообщения: 08.10.2004 05:33
всем спасибо
Автор: GTHack
Дата сообщения: 13.10.2004 10:38
еще вопросик - можно ли сразу всем пользователям один и тот же скрипт повесить ?
а то у меня довольно много юзеров на 98х
Автор: JcVai
Дата сообщения: 13.10.2004 12:36
GTHack
Воспользуйся советом AlexSSS для всех пользователей.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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