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

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

Автор: CrackMe
Дата сообщения: 04.07.2008 17:58
Упс... Ошибочка вышла, не туда запостил.
Автор: Bugavka
Дата сообщения: 11.07.2008 04:10
Приветствую. Проблема вот в чем. Есть домен, есть группы. есть скрипт для создания нового пользователя, но он не добавляет пользователя в группы. Задача: сделать какой-нить gui для выбора групп, в которые добавиться созданный пользователь. Помогите кто чем )
Автор: yazzi
Дата сообщения: 11.07.2008 09:36
Bugavka

Код: Sub Adduser
' Объявляем переменные
Dim strComputer, strUser, Res,Text,Title,objComputer, objUser, s
Dim ObjGroup, strGroup, myArray, Flag, a
On Error Resume Next
' Извлекаем имена компьютера, пользователя
strComputer = objDocument.all.selStation.Value
Title="Добавление пользователя"
Text = "Введите имя пользователя"
strUser = InputBox(Text, Title)
If strUser=vbcancel Then
WScript.Echo "Error"
End If
If strUser = "" Then
Text = " Вы не ввели имя пользователя"
WshShell.Popup Text, 0, Title, vbCritical
Else
Text="Вы точно хотите добавить пользователя " & strUser & " на компьтере " & strComputer
Res=MsgBox(Text,vbOkCancel+vbInformation+vbDefaultButton1,Title)
If Res=vbOk Then
'Связываемся с компьютером
Set objComputer = GetObject("WinNT://"& StrComputer & "")
If Err.Number <> 0 Then
Text = "Произошла ошибка при подключении к комьютерю " & strComputer & vbCrLf & "Описание: " & Err.Description
WshShell.Popup Text, 0, Title ,vbCritical
Err.Clear
Else
' Создаем объект класса User
Set objUser = objComputer.Create("user",strUser)
' Ввод пароля
s=InputBox("Введите пароль нового пользователя",Title)
objUser.SetPassword s
objUser.SetInfo
'Обработка ошибок
If Err.Number <> 0 Then
If Err.Number = "-2147022672" Then
Text = "Ошибка при добавление пользователя " & strUser & vbCrLf &_
"Описание: Такой пользователь уже существует"
WshShell.Popup Text, 0, Title, vbCritical+vbDefaultButton1
Else
Text = "Ошибка при добавление пользователя " & strUser & vbCrLf & "Описание: " & Err.description
WshShell.Popup Text, 0, Title ,vbCritical
' Очищаем свойства объекта Err
Err.Clear
End If
Else
For Each ObjGroup In objComputer
If ObjGroup.class = "Group" Then
strGroup = strGroup & ObjGroup.name &";"
End If
Next
myArray = Split (strGroup, ";",-1,1)
Flag = False
While Flag <> True
a = 0
strGroup = "0: Не добавлять пользователя к группе" & vbCrLf
While Flag <> True
If myArray(a) <> "" Then
strGroup =strGroup & a+1 & ": " & myArray(a) & vbCrLf
a = a+1
Else
Flag = True
End If
Wend
Flag = False
Text = "Введите номер группы к которой вы хотите добавить пользователя" &_
vbCrLf & strGroup
a = InputBox (Text, Title)
If a = 0 Then
WshShell.Popup "Вы отказались от добавления пользователя в группу",_
0, Title, vbOKOnly
Flag = True
Else
a = a - 1
strGroup = myArray(a)
Set ObjGroup = objComputer.Create("group", strGroup)
Err.Clear
ObjGroup.put strUser, strGroup
ObjGroup.setInfo
ObjGroup.add objUser.ADSpath
Text = "Хотите добавить пользователя еще в одну группу"
Res=MsgBox(Text,vbYesNo+vbInformation+vbDefaultButton1,Title)
If Res <> vbNo Then
Text = "Пользоователь добавлен"
WshShell.Popup Text, 0, Title, 1
Flag = True
End If
End If
Wend
End If
End If
Else
Text = " Вы отказались от добавления нового пользователя"
WshShell.Popup Text, 0, Title, vbOKOnly
End If
End If
End Sub
Автор: Bugavka
Дата сообщения: 11.07.2008 09:48
Yazzi, спасибо, конечно. Но опять же проблем бы не было, если просто прописывать группу в инпутбоксе. Нужно, чтоб скрипт показал список групп на домене и дал выбрать несколько и добавил пользователя в эти группы

Добавлено:

Цитата:
For Each ObjGroup In objComputer
If ObjGroup.class = "Group" Then
strGroup = strGroup & ObjGroup.name &";"
End If
Next

Вот это не совсем понял, и какой номер тогда нужно ввести

Добавлено:
откуда берется strComputer???

Цитата:
strComputer = objDocument.all.selStation.Value


потом не создается объект

Цитата:
Set objComputer = GetObject("WinNT://"& StrComputer & "")




Добавлено:
КЛЕВО!!! СПАСИБО!!!
Автор: Malboro
Дата сообщения: 11.07.2008 19:51
Подскажите, как должен выглядеть скрипт, чтобы при входе пользователя в домен,
в реестре (если такой ветки-нет) - создавалась ветка HKEY_CURRENT_USER/Software/RIT/The Bat, путем импорта из файла реестра (допустим с именем 1.reg)
А если такая ветка есть, то она бы удалялась и заново бы импортировалась из этого же файла.
(Думаю, это не самый лучший вариант, удалять, а потом импортировать, но мне кажется самый простой для написания скрипта).
Конечно, было бы лучше, чтобы построчно сверялся файл с веткой реестра и импортировались только необходимые (изменненные) значения, но я думаю, это сильно замороченно.
Заранее спасибо за помощь.


--------------
Вопрос снят. Это оказалось тривиально.
Автор: abasov
Дата сообщения: 15.07.2008 06:17
Malboro

Код: 'Скрипт выполняет действие в зависимости от наличия ветки в реестре
On Error Resume Next
'Set WshShell = CreateObject("WScript.Shell")
Set WshShell = WScript.CreateObject("WScript.Shell")
systemroot = WshShell.ExpandEnvironmentStrings("%Systemroot%")
const HKLM = &H80000002
'подключение к WMI
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If

'ReadKey "читабельна ветка?"
ReadKey "SOFTWARE\Microsoft\Office\11.0\Registration\{90110419-6000-11D3-8CFE-0150048383C9}"
'**************************************************************************************************
Function ReadKey(strKey)
'Чтение параметров раздела
intRes = objReg.EnumValues(HKLM, strKey, sNames, Types)
If not intRes <> 0 Then


wscript.sleep 2000
'WshShell.run( systemroot & "\regedit /s \\server\fs\standartpo\Office2003\newpath.reg")

WSHShell.RegWrite "HKLM\SOFTWARE\Microsoft\Office\11.0\Common\Internet\LocationOfComponents", "\\server\fs\standartpo\Office2003\"
WSHShell.RegWrite "HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{90110419-6000-11D3-8CFE-0150048383C9}\SmartSourceDir", "\\server\fs\standartpo\Office2003\"


' WScript.Echo intRes & ": удалась прочитать раздел ""HKLM\" & strKey & """"
Else
' WScript.Echo intRes & ":Не удалась прочитать раздел ""HKLM\" & strKey & """"
WScript.Quit
End If

' Next

End Function
Автор: GTHack
Дата сообщения: 16.07.2008 09:41
многоуважаемые гуру автоматизации администрирования
как скриптиком проверить наличие определенного файла на фпт и локально ?
Автор: niichavo
Дата сообщения: 17.07.2008 11:24
Помогите, уважаемые человеки!

Админ домена со своего компьютера запускает скрипт для получения через wmi списка установленных программ на удалённом компьютере домена. Ну так вот, на некоторых компьютерах попытка получения списка приводит к ошибке, а именно запрос
Код: Select * from Win32_Product
Автор: yazzi
Дата сообщения: 18.07.2008 09:49
niichavo
Есть возможность смотреть через реестр. Вот Код. Данный скрипт Смотрит в реестре софт а потом записывает его в текстовый файл. Лучше будет если это скрипт будет выполняться при заходе пользователя на комп, а текстовики где нибудь на серваке хранить.
[more=Скрипт]

Код:
Option Explicit
Dim Name
Dim Version
Dim InstallDate
Dim HelpLink
Dim HelpTelephone
Dim Publisher
Dim StrTemp
Dim a
Dim Flag
Dim StrComputer
Dim objReg
Const HKEY_LOCAL_MASHINE=&H80000002
Const ForWriting = 2
' On Error Resume Next
StrComputer=InputBox("ВВедите имя компьютера", "ВВод имени компьютера")
StrTemp=""
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strcomputer &"\root\default:StdRegProv")
GetSoftInfo "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Name=Split(Name,";",-1,1)
Version=Split(Version,";",-1,1)
InstallDate=Split(InstallDate,";",-1,1)
HelpLink=Split(HelpLink,";",-1,1)
HelpTelephone=Split(HelpTelephone,";",-1,1)
Publisher=Split(Publisher,";",-1,1)
StrTemp=""
a=0
Flag=False
While Flag <> True
If Name(a)="" Then
Flag=True
Else
StrTemp=StrTemp & "[InstalledProducts" & a & "]" & vbCrLf &_
"ProductName=" & Name(a) & vbCrLf &_
"Version=" & Version(a) & vbCrLf &_
"Publisher=" & Publisher(a) & vbCrLf &_
"ProductID=?" & vbCrLf &_
"ProductKey=?" & vbCrLf &_
"HelpLink=" & HelpLink(a) & vbCrLf &_
"HelpTelephone=" & HelpTelephone(a) & vbCrLf &_
"InstallDate=" & InstallDate(a) & vbCrLf &_
"RegCompany=?" & vbCrLf &_
"RegOwner=" & vbCrLf & vbCrLf
a =a +1
End If
Wend
TextOut StrTemp, "D:\temp\123\out.txt"
WScript.Echo "End"

'-----------------------------------------------------------------
Function GetSoftInfo(strKey)
Dim intRes
Dim sNames
Dim Types
Dim Param
Dim Val
Dim strSubKey
Dim i
Dim j
Dim TimeCounter
Dim CountName
Dim CountVersion
Dim CountHelpLink
Dim CountInstallDate
Dim CountHelpTelephone
Dim CountPublisher
CountName=0
CountVersion=0
CountHelpLink=0
CountInstallDate=0
CountHelpTelephone=0
CountPublisher=0
On Error Resume Next
'Чтение параметров раздела
intRes=objReg.EnumValues(HKEY_LOCAL_MASHINE, strKey, sNames, Types)
If intRes <> 0 Then
StrERROR= StrERROR & ": не удалась прочитать раздел ""HKEY_LOCAL_MASHINE\" & strKey & """" & vbCrLf
ErrorCounter=1
End If
If IsArray(sNames) Then
i=0
For Each Param In sNames
If Types(i)=1 Then
intRes=objReg.GetStringValue(HKEY_LOCAL_MASHINE, strKey, Param, Val)
Elseif Types(i)=2 Then
intRes=objReg.GetExpandedStringValue(HKEY_LOCAL_MASHINE, strKey, Param, Val)
Elseif Types(i)=3 Then
intRes=objReg.GetBinaryValue(HKEY_LOCAL_MASHINE, strKey, Param, Val)
Elseif Types(i)=4 Then
intRes=objReg.GetDWORDValue(HKEY_LOCAL_MASHINE, strKey, Param, Val)
Elseif Types(i)=7 Then
intRes=objReg.GetMultiStringValue(HKEY_LOCAL_MASHINE, strKey, Param, Val)
End If
If intRes <> 0 Then
StrERROR= StrERROR & ": не удалась прочитать значение параметра ""HKEY_CURRENT_USER\" & _
strKey & "\" & Param & """" & vbCrLf
End If
If Types(i)=3 Then
For j=0 To UBound(Val)
Val(j)=Right("00" & Hex(Val(j)), 2)
Next
Val=Join(Val)
Elseif Types(i)=7 Then
Val=vbCrLf & Join(Val, vbCrLf)
End If
If Param="DisplayName" Then
Name=Name & Val & ";"
CountName=1
ElseIf Param="DisplayVersion" Then
Version=Version & Val & ";"
CountVersion=1
ElseIf Param="HelpLink" Then
HelpLink=HelpLink & Val & ";"
CountHelpLink=1
ElseIf Param="InstallDate" Then
InstallDate=InstallDate & Val & ";"
CountInstallDate=1
ElseIf Param="HelpTelephone" Then
HelpTelephone=HelpTelephone & Val & ";"
CountHelpTelephone=1
ElseIf Param="Publisher" Then
Publisher=Publisher & Val & ";"
CountPublisher=1
End If
i=i + 1
If TimeCounter=4 Then
TimeCounter=0
End If
TimeCounter=TimeCounter + 1
Next
If CountName=1 Then
If CountVersion=0 Then
Version=Version & ";"
End If
If CountHelpLink=0 Then
HelpLink=HelpLink & ";"
End If
If CountInstallDate=0 Then
InstallDate=InstallDate & ";"
End If
If CountHelpTelephone=0 Then
HelpTelephone=HelpTelephone & ";"
End If
If CountPublisher=0 Then
Publisher=Publisher & ";"
End If
End If
End If
'Обход подразделов
intRes=objReg.EnumKey(HKEY_LOCAL_MASHINE, strKey, sNames)
If intRes <> 0 Then
StrERROR= StrERROR & ": не удалась прочитать подразделы ""HKEY_CURRENT_USER\" & strKey & """" & vbCrLf
ErrorCounter=1
End If
If IsArray(sNames) Then
For Each strSubKey In sNames
GetSoftInfo strKey & "\" & strSubKey
Next
End If
If Err.Number <> 0 Then
StrERROR=StrERROR & "GetSoftInfo: Number: " & Err.Number & " Description: " & Err.Description & vbCrLf
Err.Clear
ErrorCounter=1
End If
End Function

'-----------------------------------------------------------------
' Процедура для записи информации в файл
Sub TextOut (Text, File)
' Объявляем переменные
Dim objFSO, FOut
' Создаем объект FileSystemObject
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
' Открываем выходной файл для записи
Set FOut=objFSO.OpenTextFile (File,ForWriting,true)
' Записываем текстовую строку в файл
FOut.WriteLine Text
' Закрываем выходной файл
FOut.Close
End Sub
Автор: PhoenixUA
Дата сообщения: 18.07.2008 09:59
yazzi
Спрячь простыню под тег more.

niichavo
yazzi
Советую использовать Spiceworks.
"Все уже украдено до нас" (c)
Автор: yazzi
Дата сообщения: 18.07.2008 10:10
PhoenixUA
Во, может ты посоветуешь что. Нужно что каждый раз при заходе пользователя собиралась информация о софте, харде и если есть какие то различия от преведущего отчета надо выдать сообщение админу. По хорошему отчеты надо хранить в базе данных.
Автор: niichavo
Дата сообщения: 18.07.2008 10:42
yazzi
Спасибо, я умею через реестр. Задача была другая. Нужно было удалить программу на удалённом компьютере. Я это делал через скрипт

Код:
strComputer = "pupkin"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product Where Name = 'Windows XP'")

For Each objSoftware in colSoftware
objSoftware.Uninstall()
Next
Автор: slech
Дата сообщения: 19.07.2008 19:44
подскажите пожалуйста как взять при помощи vbs последнюю строку текстового файла и послать её темой в письме.

спасибо.
Автор: Vby
Дата сообщения: 20.07.2008 18:05
slech
Например так:

Код:
last_line = getlastline("с:\1.txt")

Set objEmail = CreateObject("CDO.Message")

objEmail.Bodypart.CharSet = "windows-1251"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Login"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Pass"
objEmail.From = "admin@domain.com"
objEmail.To = "user@domain.com"
objEmail.Subject = last_line
objEmail.Textbody = text
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp_server"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send

function getlastline (ascfile)
set fs = createobject("scripting.filesystemobject")
set file = fs.GetFile(ascfile)
set stream = file.OpenAsTextStream
stream.skip file.size
line = stream.line
stream.close
set stream = file.OpenAsTextStream
for i=1 to line-2
stream.skipline
next

getlastline = stream.readline
if not stream.atendofstream then
getlastline = stream.readline
end if

end function

Автор: slech
Дата сообщения: 20.07.2008 19:22
Vby
спасибо большое, то что надо. завтра потестим.
Автор: slech
Дата сообщения: 21.07.2008 11:41
всё сработало на ура. сенкс.
есть другой вопросик.
у меня из скрипта выполняется батник.
можно ли дождаться его выполнения а только потом идти дальше ?
а сейчас у менястоит

Цитата:

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "BackUpLogs.bat " & objYear & " " & objMonth & " " & objDay
WScript.sleep(600000)


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

спасибо.
Автор: niichavo
Дата сообщения: 21.07.2008 14:01
slech

Вроде можно так:

Код:
filepath = "BackUpLogs.bat" & objYear & " " & objMonth & " " & objDay
Set ret = objShell.Exec filepath
Do While ret.Status = 0
WScript.Sleep 100
Loop
Автор: PhoenixUA
Дата сообщения: 21.07.2008 15:00
Правильней второе.
http://www.ss64.com/wsh/run.html
WshShell.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
Автор: FighterForLife
Дата сообщения: 22.07.2008 11:19
Подскажите, пожалуйста, команду (например, в батнике), которая без лишних вопросов очищала бы ПОЛНОСТЬЮ (т.е. ВСЁ - вложенные файлы, папки и т.д.) заданную папку на винте.
Автор: vladk1973
Дата сообщения: 22.07.2008 12:18
FighterForLife
А чем тебе RMDIR не нравится?
А на скрипте можно так:

Код:
Dim fso, MyF
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyF = fso.GetFolder("c:\MyFolder")
MyF.Delete
Автор: FighterForLife
Дата сообщения: 22.07.2008 13:00
vladk1973
%) эммммммм.... я просто АБСОЛЮТНО не знаком с предметом, поэтому прошу не пинать! куда мне запихнуть предложенный код и что с ним дальше делать? И еще вопрос: не удалит ли скрипт саму папку - она ДОЛЖНА остаться, только ее содержимое должно быть очищено!

И что такое РМДИР - можно подробнее, линк, например?
Автор: was1978
Дата сообщения: 23.07.2008 06:26
Может кто подскажет, голову уже сломал, есть батник следующего содержания:

scan.bat > mess.txt
out.bat

Файл scan.bat в свою очередь со следующим содержимым:

echo Bla-bla
netsh diag connect iphost 111.111.111.111 41134
echo Bla-bla
netsh diag connect iphost 111.111.111.111 41134
echo Bla-bla
netsh diag connect iphost 111.111.111.111 41134
echo Bla-bla
netsh diag connect iphost 111.111.111.111 41134
echo Bla-bla
netsh diag connect iphost 111.111.111.111 41134

Так вот до обработки out.bat дело почему то не доходит, out.bat не срабатывает.

Если строку out.bat заменить на out.bat > out.txt, то создается файл out.txt нулевого размера и содержимого и все.
Если строку out.bat заменить содержимым файла out.bat то содержимое его даже не начинает обрабатываться.


В чем может быть проблема?
Автор: YNY
Дата сообщения: 23.07.2008 06:53

Цитата:
was1978

out.bat должен ск всего цеплять файл mess.txt и соотв обрабатывать, хотя че гадать то, дай содержимое out.bat

Добавлено:
Оператор Описание
перенаправления
> Записывает данные на выходе команды вместо командной строки в файл
или на устройство, например, на принтер.
< Читает поток входных данных команды из файла, а не с клавиатуры.
>> Добавляет выходные данные команды в конец файла, не удаляя при
этом существующей информации из файла.
>& Считывает данные на выходе одного дескриптора как входные данные
для другого дескриптора.
<& Считывает входные данные одного дескриптора как выходные данные
другого дескриптора.
| Считывает выходные данные одной команды и записывает их на вход
другой команды. Эта процедура известна под названием «канал».
Автор: was1978
Дата сообщения: 23.07.2008 08:07
if not exist mess.txt goto d
WinRAR.exe a c:\shed\mess.zip mess.txt
blabla.exe seting.txt
del c:\shed\mess.txt
del c:\shed\mess.zip


Добавлено:
хм, в конце файла метка d с двоеточием - заменилась на смайлик
Автор: PhoenixUA
Дата сообщения: 23.07.2008 09:42
was1978
попробуй
call scan.bat > mess.txt
Автор: was1978
Дата сообщения: 23.07.2008 10:05
PhoenixUA

спасибо, теперь понял
Автор: abasov
Дата сообщения: 23.07.2008 11:53
Ребят подскажите как в коде использовать персонализацию kerberos или ntlm?


Код:
' Удаленное выполнение команды из другой учетной записи
On Error Resume Next
Dim appl, strUser, strPassword, strComputer


'=========================================================
appl="regedit /s ""\\fs\Standart_PO\Office2003\outlook\outlook.reg""" 'команда
strUser = "backup\admin" 'имя пользователя

strPassword = "xxxxxx"
'=========================================================
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")


Set objServices = objSWbemLocator.ConnectServer(strComputer, "root\CIMV2", strUser, strPassword, Null, Null, 0)

If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If

Set objClass = objServices.Get("Win32_Process")

Res = objClass.Create(appl, Null, Null, PID)

If Res <> 0 Then
WScript.Echo "Код ошибки: " & Res
else If Res = 0 then
WScript.Echo "Выполнено"
End If
End If
Автор: niichavo
Дата сообщения: 23.07.2008 16:17
abasov

Код: Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
Автор: Vadimka_DDD
Дата сообщения: 24.07.2008 00:44
Стоит задача - ежедневно, кроме выходных отправлять на определенный е-мейл письмо с определенной темой и определенным вложением. Какой софтиной это можно реализовать?
Автор: YNY
Дата сообщения: 24.07.2008 04:32

Цитата:
was1978

1-для запуска Winrara к нему должен быть прописан полный путь типа E:\"SProgram Files"\WinRAR\WinRAR.exe, причем строки с пробелами пиши в кавычках

2-в строке: blabla.exe seting.txt, отсутствует какой-то оператор перенаправления

Добавлено:
1--> + если скрипт (bat) лежит не в той же папке, что и архиватор или если не заполнена какя нить переменная среды окружения с путем к винрару

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

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


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