Упс... Ошибочка вышла, не туда запостил.
» Автоматизация администрирования. Часть 2
Приветствую. Проблема вот в чем. Есть домен, есть группы. есть скрипт для создания нового пользователя, но он не добавляет пользователя в группы. Задача: сделать какой-нить gui для выбора групп, в которые добавиться созданный пользователь. Помогите кто чем )
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
Код: 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
Yazzi, спасибо, конечно. Но опять же проблем бы не было, если просто прописывать группу в инпутбоксе. Нужно, чтоб скрипт показал список групп на домене и дал выбрать несколько и добавил пользователя в эти группы
Добавлено:
Цитата:
Вот это не совсем понял, и какой номер тогда нужно ввести
Добавлено:
откуда берется strComputer???
Цитата:
потом не создается объект
Цитата:
Добавлено:
КЛЕВО!!! СПАСИБО!!!
Добавлено:
Цитата:
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 & "")
Добавлено:
КЛЕВО!!! СПАСИБО!!!
Подскажите, как должен выглядеть скрипт, чтобы при входе пользователя в домен,
в реестре (если такой ветки-нет) - создавалась ветка HKEY_CURRENT_USER/Software/RIT/The Bat, путем импорта из файла реестра (допустим с именем 1.reg)
А если такая ветка есть, то она бы удалялась и заново бы импортировалась из этого же файла.
(Думаю, это не самый лучший вариант, удалять, а потом импортировать, но мне кажется самый простой для написания скрипта).
Конечно, было бы лучше, чтобы построчно сверялся файл с веткой реестра и импортировались только необходимые (изменненные) значения, но я думаю, это сильно замороченно.
Заранее спасибо за помощь.
--------------
Вопрос снят. Это оказалось тривиально.
в реестре (если такой ветки-нет) - создавалась ветка HKEY_CURRENT_USER/Software/RIT/The Bat, путем импорта из файла реестра (допустим с именем 1.reg)
А если такая ветка есть, то она бы удалялась и заново бы импортировалась из этого же файла.
(Думаю, это не самый лучший вариант, удалять, а потом импортировать, но мне кажется самый простой для написания скрипта).
Конечно, было бы лучше, чтобы построчно сверялся файл с веткой реестра и импортировались только необходимые (изменненные) значения, но я думаю, это сильно замороченно.
Заранее спасибо за помощь.
--------------
Вопрос снят. Это оказалось тривиально.
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
Код: 'Скрипт выполняет действие в зависимости от наличия ветки в реестре
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
многоуважаемые гуру автоматизации администрирования
как скриптиком проверить наличие определенного файла на фпт и локально ?
как скриптиком проверить наличие определенного файла на фпт и локально ?
Помогите, уважаемые человеки!
Админ домена со своего компьютера запускает скрипт для получения через wmi списка установленных программ на удалённом компьютере домена. Ну так вот, на некоторых компьютерах попытка получения списка приводит к ошибке, а именно запрос
Код: Select * from Win32_Product
Админ домена со своего компьютера запускает скрипт для получения через wmi списка установленных программ на удалённом компьютере домена. Ну так вот, на некоторых компьютерах попытка получения списка приводит к ошибке, а именно запрос
Код: Select * from Win32_Product
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
Есть возможность смотреть через реестр. Вот Код. Данный скрипт Смотрит в реестре софт а потом записывает его в текстовый файл. Лучше будет если это скрипт будет выполняться при заходе пользователя на комп, а текстовики где нибудь на серваке хранить.
[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
yazzi
Спрячь простыню под тег more.
niichavo
yazzi
Советую использовать Spiceworks.
"Все уже украдено до нас" (c)
Спрячь простыню под тег more.
niichavo
yazzi
Советую использовать Spiceworks.
"Все уже украдено до нас" (c)
PhoenixUA
Во, может ты посоветуешь что. Нужно что каждый раз при заходе пользователя собиралась информация о софте, харде и если есть какие то различия от преведущего отчета надо выдать сообщение админу. По хорошему отчеты надо хранить в базе данных.
Во, может ты посоветуешь что. Нужно что каждый раз при заходе пользователя собиралась информация о софте, харде и если есть какие то различия от преведущего отчета надо выдать сообщение админу. По хорошему отчеты надо хранить в базе данных.
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
Спасибо, я умею через реестр. Задача была другая. Нужно было удалить программу на удалённом компьютере. Я это делал через скрипт
Код:
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
подскажите пожалуйста как взять при помощи vbs последнюю строку текстового файла и послать её темой в письме.
спасибо.
спасибо.
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
Например так:
Код:
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
Vby
спасибо большое, то что надо. завтра потестим.
спасибо большое, то что надо. завтра потестим.
всё сработало на ура. сенкс.
есть другой вопросик.
у меня из скрипта выполняется батник.
можно ли дождаться его выполнения а только потом идти дальше ?
а сейчас у менястоит
Цитата:
но это не совсем удобно так там происходит закачка по FTP а по времени это может быть по разному.
т.е. задача дождаться когда выполниться батник и только тогда идти дальше.
спасибо.
есть другой вопросик.
у меня из скрипта выполняется батник.
можно ли дождаться его выполнения а только потом идти дальше ?
а сейчас у менястоит
Цитата:
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "BackUpLogs.bat " & objYear & " " & objMonth & " " & objDay
WScript.sleep(600000)
но это не совсем удобно так там происходит закачка по FTP а по времени это может быть по разному.
т.е. задача дождаться когда выполниться батник и только тогда идти дальше.
спасибо.
slech
Вроде можно так:
Код:
filepath = "BackUpLogs.bat" & objYear & " " & objMonth & " " & objDay
Set ret = objShell.Exec filepath
Do While ret.Status = 0
WScript.Sleep 100
Loop
Вроде можно так:
Код:
filepath = "BackUpLogs.bat" & objYear & " " & objMonth & " " & objDay
Set ret = objShell.Exec filepath
Do While ret.Status = 0
WScript.Sleep 100
Loop
Правильней второе.
http://www.ss64.com/wsh/run.html
WshShell.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
http://www.ss64.com/wsh/run.html
WshShell.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
Подскажите, пожалуйста, команду (например, в батнике), которая без лишних вопросов очищала бы ПОЛНОСТЬЮ (т.е. ВСЁ - вложенные файлы, папки и т.д.) заданную папку на винте.
FighterForLife
А чем тебе RMDIR не нравится?
А на скрипте можно так:
Код:
Dim fso, MyF
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyF = fso.GetFolder("c:\MyFolder")
MyF.Delete
А чем тебе RMDIR не нравится?
А на скрипте можно так:
Код:
Dim fso, MyF
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyF = fso.GetFolder("c:\MyFolder")
MyF.Delete
vladk1973
%) эммммммм.... я просто АБСОЛЮТНО не знаком с предметом, поэтому прошу не пинать! куда мне запихнуть предложенный код и что с ним дальше делать? И еще вопрос: не удалит ли скрипт саму папку - она ДОЛЖНА остаться, только ее содержимое должно быть очищено!
И что такое РМДИР - можно подробнее, линк, например?
%) эммммммм.... я просто АБСОЛЮТНО не знаком с предметом, поэтому прошу не пинать! куда мне запихнуть предложенный код и что с ним дальше делать? И еще вопрос: не удалит ли скрипт саму папку - она ДОЛЖНА остаться, только ее содержимое должно быть очищено!
И что такое РМДИР - можно подробнее, линк, например?
Может кто подскажет, голову уже сломал, есть батник следующего содержания:
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 то содержимое его даже не начинает обрабатываться.
В чем может быть проблема?
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 то содержимое его даже не начинает обрабатываться.
В чем может быть проблема?
Цитата:
was1978
out.bat должен ск всего цеплять файл mess.txt и соотв обрабатывать, хотя че гадать то, дай содержимое out.bat
Добавлено:
Оператор Описание
перенаправления
> Записывает данные на выходе команды вместо командной строки в файл
или на устройство, например, на принтер.
< Читает поток входных данных команды из файла, а не с клавиатуры.
>> Добавляет выходные данные команды в конец файла, не удаляя при
этом существующей информации из файла.
>& Считывает данные на выходе одного дескриптора как входные данные
для другого дескриптора.
<& Считывает входные данные одного дескриптора как выходные данные
другого дескриптора.
| Считывает выходные данные одной команды и записывает их на вход
другой команды. Эта процедура известна под названием «канал».
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 с двоеточием - заменилась на смайлик
WinRAR.exe a c:\shed\mess.zip mess.txt
blabla.exe seting.txt
del c:\shed\mess.txt
del c:\shed\mess.zip
Добавлено:
хм, в конце файла метка d с двоеточием - заменилась на смайлик
was1978
попробуй
call scan.bat > mess.txt
попробуй
call scan.bat > mess.txt
PhoenixUA
спасибо, теперь понял
спасибо, теперь понял
Ребят подскажите как в коде использовать персонализацию 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
Код:
' Удаленное выполнение команды из другой учетной записи
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
abasov
Код: Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
Код: Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
Стоит задача - ежедневно, кроме выходных отправлять на определенный е-мейл письмо с определенной темой и определенным вложением. Какой софтиной это можно реализовать?
Цитата:
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, истории становления российского интернета. Сделано для людей.