Модераторы: bartram, Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полезные скрипты 
:(
    Опции темы
localhost
Дата 4.6.2007, 15:16 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Уважаемые копипэйстэры других форумов, если берёте эти скрипты, то обязательно давайте ссылку на эту тему. Akella©

А то вот ребята с сисадмин.ру своровали, а ссылку на эту тему не поставили
http://sysadmins.ru/topic79925-195.html
------------------------------------------------------------------------------------------------------------------------------


Предлагаю в этой ветке выкладывать скрипты, которые в той или иной мере облегчают различные административные задачи.
Начну, пожалуй  smile 

Получение серийных номеров ОС

Код

' Скрипт для получения серийных номеров ОС Windows на компьютерах локальной сети
' Получение номера осуществляется путем извлечения бинарного ключа реестра и пе-
' редача его на расшифровку функции GetKey. Скрипт перед подключением проверяет
' доступность компьютера с помощью утилиты ping. Данное решение обосновано тем,
' что использование класса Win32_PingStatus возможно только на компьютерах под
' управлением WinXP и Win2k3

On Error Resume Next

'**********************************************************************************
' Инициализация данных

Const HKEY_LOCAL_MACHINE = &H80000002
Const ADS_SCOPE_SUBTREE = 2

strComputer = ""

Dim fso
Dim file

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("key_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")
 
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
strValueName = "DigitalProductId"

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

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location from 'LDAP://DC=mydomain, DC=local' " _
& "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute

'**********************************************************************************

objRecordSet.MoveFirst

Wscript.Echo "Processing information. This might take several minutes."

Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value
    
'   Проверяем доступность компьютера с помощью команды PING 
'    и анализа выходного потока

    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strComputer)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)

'    Если компьютер отвечает, подключаемся к его WMI, извлекаем
'    ключ реестра, передаем его на расшифровку функции GetKey

    If InStr(strPingResults, "ttl=") Then
     Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
                             & strComputer & "\root\default:StdRegProv")
     oReg.GetBinaryValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
        strWinKey = GetKey(strValue)
        WScript.Echo (strComputer & ": " & strWinKey)
        file.WriteLine("******************************************************")
        file.WriteLine(strComputer & ": " & strWinKey)
        
'    Определяем операционную(ые) систему(ы) на компьютере        

        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
        Set colItems = objWMIService.ExecQuery( _
         "SELECT * FROM Win32_OperatingSystem",,48) 
        For Each objItem in colItems 
         Wscript.Echo " OS Name: " & objItem.Name
         file.WriteLine(objItem.Name)
         file.WriteLine("******************************************************")
        Next
        
        objRecordSet.MoveNext
        
'    Если компьютер не отвечает - выводим сообщение и перемещаемся к следующему

    Else
     WScript.Echo(strComputer & ": Не отвечает...")
        objRecordSet.MoveNext
    End If
Loop

WScript.Echo("Script completed!")

'**********************************************************************************
'    Функция разбора ключа реестра (by PaulD)
'    Вход: Ключ DigitalProductId в ветке 
'    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
'    Выход: Лицензионный ключ
'    Прим.: Функция взята с http://forum.ixbt.com/topic.cgi?id=67:28
'    
Function GetKey(rpk)

    Const rpkOffset = 52
    i = 28
    szPossibleChars="BCDFGHJKMPQRTVWXY2346789"
 
    Do 'Rep1
        dwAccumulator = 0
        j = 14
        Do 
            dwAccumulator = dwAccumulator*256 
            dwAccumulator = rpk(j + rpkOffset) + dwAccumulator
            rpk(j + rpkOffset) = (dwAccumulator\24) and 255 
            dwAccumulator = dwAccumulator Mod 24
            j = j - 1
        Loop While j >= 0
        i = i - 1
        szProductKey = Mid(szPossibleChars, dwAccumulator + 1, 1)&szProductKey
        If (((29 - i) Mod 6) = 0) and (i <> -1) then 
            i = i - 1 : szProductKey = "-"&szProductKey
        End If
    Loop While i >= 0 'Goto Rep1
 
GetKey = szProductKey

End Function


!!! Вместо mydomain пишем имя домена.


Список установленных программ на всех компьютерах домена

Добавлено @ 15:20
Код

' Скрипт осуществляет инвентаризацию установленных программ на компьютерах
' локальной сети
' Процедура ViewSoft взята из репозитория MS
' http://www.microsoft.com/technet/scriptcenter/scripts/apps/user/usapvb11.mspx

' 1. Инициализируем необходимые данные

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Dim fso
Dim file
strComputerName = ""

' 2. Последовательно выбираем компьютеры из каталога и применяем к ним процедуру ViewSoft

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("soft_list.txt", 2, True)

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

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location from 'LDAP://DC=mydomain, DC=local' " _
& "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
   strComputerName = objRecordSet.Fields("Name").Value
   ViewSoft(objRecordSet.Fields("Name").Value)
   file.WriteLine (objRecordSet.Fields("Name").Value)
   objRecordSet.MoveNext
Loop

file.Close

' 3. Процедура просмотра установленных приожений

Sub ViewSoft (strComputerName)

Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = strComputerName
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "InstallDate"
strEntry3 = "VersionMajor"
strEntry4 = "VersionMinor"
strEntry5 = "EstimatedSize"

Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
file.WriteLine ("***********************************************************")
file.WriteLine("Installed Applications on " & strComputer & vbCrLf)
file.WriteLine ("***********************************************************")
For Each strSubkey In arrSubkeys
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
   strEntry1a, strValue1)
  If intRet1 <> 0 Then
    objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry1b, strValue1
  End If
  If strValue1 <> "" Then
    file.WriteLine(VbCrLf & "Display Name: " & strValue1)
  End If
  objReg.GetStringValue HKLM, strKey & strSubkey, _
   strEntry2, strValue2
  If strValue2 <> "" Then
    file.WriteLine("Install Date: " & strValue2)
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry3, intValue3
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry4, intValue4
  If intValue3 <> "" Then
     file.WriteLine("Version: " & intValue3 & "." & intValue4)
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry5, intValue5
  If intValue5 <> "" Then
    file.WriteLine("Estimated Size: " & Round(intValue5/1024, 3) & " megabytes")
  End If
Next
End Sub



Это сообщение отредактировал(а) Akella - 18.4.2008, 19:38
PM MAIL   Вверх
Akella
Дата 4.6.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 73
Всего: 329



Получение списка пользователей и компьютеров домена

Код

'***************************************************************** 
'* Имя: Users_Computers_List.vbs                                 * 
'* Язык: VBScript                                                * 
'* Назначение: Формирование списка учётных записей пользователей *
'*             и компьютеров домена с указанием даты их создания * 
'*****************************************************************
Const strResFile = "C:\Users_Computers.txt"
Set objRoot = GetObject("LDAP://RootDSE")
strDomName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
strAttributes = "cn,whenCreated"
arrCmdText = Array("<LDAP://" & strDomName & ">;(&(objectCategory=Person)(objectClass=User));" & strAttributes & ";Subtree", _
                    "<LDAP://" & strDomName & ">;(objectCategory=Computer);" & strAttributes & ";Subtree")
arrCapLines = Array("|Пользователь|Дата создания|", "|Компьютер|Дата создания|")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Sort On") = "cn"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.CreateTextFile(strResFile, True)
For i = LBound(arrCmdText) To UBound(arrCmdText)
    objCommand.CommandText = arrCmdText(i)
    Set objRSet = objCommand.Execute
    If objRSet.RecordCount > 0 Then
        objFile.WriteLine(arrCapLines(i))
        objRSet.MoveFirst
        Do Until objRSet.EOF
            objFile.WriteLine("|" & objRSet.Fields(0).Value & "|" & DateValue(objRSet.Fields(1).Value) & "|")
            objRSet.MoveNext
        Loop
    End If
    If i < UBound(arrCmdText) Then objFile.WriteLine(vbCrLf)
Next
objFile.Close
Set objFile = Nothing
Set objFS = Nothing
Set objRSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
WScript.Echo "Готово."


Это сообщение отредактировал(а) Akella - 16.11.2007, 16:22
PM MAIL   Вверх
localhost
Дата 5.6.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Море полезных примеров на Microsoft ScriptCenter
PM MAIL   Вверх
Akella
Дата 6.6.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 73
Всего: 329



Мог бы быть полезен скрипт, который меняет настройки учетной записи в MS Outlook  smile



Добавлено @ 08:06
Код

Set objUser = GetObject _
  ("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
 
If objUser.AccountDisabled = FALSE Then
      WScript.Echo "The account is enabled."
Else
      WScript.Echo "The account is disabled."
End If

неплохой скрипт, но вот если бы вставить его В цикл по всем учетный записям, чтобы можно было знать, кто в онлайне, а кто нет

Это сообщение отредактировал(а) Akella - 6.6.2007, 08:18
PM MAIL   Вверх
Валк
Дата 6.6.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет



Посмотрите пожалуйста следующий скрипт, он предназначен для присоединения сетевого диска, индивидуального для каждого пользователя, с проверкой наличия доступа к сетевому ресурсу:

Подключение сетевого диска с проверкой прав

Код
Dim WshNetwork
Dim FSO

Set WshNetwork = WScript.CreateObject("WScript.Network")
Set FSO = CreateObject("Scripting.FileSystemObject")

If FSO.FolderExists("\\S1\UserDocs\") Then
    If Not(FSO.FolderExists("\\S1\UserDocs\" & WshNetwork.UserName)) Then
    FSO.CreateFolder "\\S1\UserDocs\" & WshNetwork.UserName
    End If
    WshNetwork.MapNetworkDrive "M:", "\\S1\UserDocs\" & WshNetwork.UserName
End If

Set WshNetwork = Nothing
Set FSO = Nothing

Если за кусок кода проверки наличия директории и присоединения сетевого диска я уверен, то вот проверка на доступность сетевого ресурса \\S1\UserDocs\ у меня вызывает сомнения.

Это сообщение отредактировал(а) Akella - 16.11.2007, 16:23
PM MAIL WWW   Вверх
localhost
Дата 6.6.2007, 12:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Закрытие процесса по имени на всех online компьютерах домена

Код

'*******************************************************************************
' Скрипт, последовательно просматривает список компьютеров в AD
' и вырубает заданный процесс.
'*******************************************************************************

' Инициализируем данные

Set objRoot = GetObject("LDAP://RootDSE")
Set objShell = CreateObject("WScript.Shell")

Const ADS_SCOPE_SUBTREE = 2
strProcName = ""
strComputerName = ""
intWasKilled = 0
strDomainName = objRoot.Get("DefaultNamingContext")

Set objRoot = Nothing

' Пользователь задает имя процесса

WScript.Echo("Введите имя процесса:")
strProcName = WScript.StdIn.ReadLine

' Инициализируем и получаем доступ к AD, формируем список компьютеров для просмотра

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

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location from 'LDAP://" _
& strDomainName & "'" & "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

' В цикле последовательно к каждому компьютеру применяем функцию KillProc

Do Until objRecordSet.EOF
   strComputerName = objRecordSet.Fields("Name").Value
   WScript.Echo (strComputerName & " Поиск ...")
   
' Проверяем доступность компьютера с помощью команды PING 
' и анализа выходного потока

    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strComputerName)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)

'    Если компьютер отвечает, подключаемся к его WMI
    
    If InStr(strPingResults, "ttl=") Then
        intWasKilled = KillProc (strComputerName, strProcName)
        WScript.Echo(" Passed. Killed (" & bWasKilled & ")")
        objRecordSet.MoveNext
    Else
     WScript.Echo(strComputerName & ": Не отвечает...")
        objRecordSet.MoveNext
    End If
Loop



'*******************************************************************************
' Функция уничтожения заданного процесса на заданном компьютере
' Вход: имя компьютера, имя процесса
' Выход: количество убитых процессов
'*******************************************************************************

Function KillProc (strComputerName, strProcName)

On Error Resume Next

strComputer = strComputerName

' С помощью моникера winmgmts получаем доступ к WMI целевого компьютера

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
' Просматриваем список процессов, находим требуемый

Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & strProcName & "'")

' Kill It :)

For Each objProcess in colProcessList
    objProcess.Terminate()
Next

' Возвращаем результат (кол-во найденных и завершенных процессов)

KillProc = colProcessList.Count

End Function


Это сообщение отредактировал(а) Akella - 16.11.2007, 16:25
PM MAIL   Вверх
localhost
Дата 7.6.2007, 10:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Список компьютеров домена с залогиненными на них пользователями

Код

' Скрипт опрашивает компьютеры домена на предмет того, какой пользователь
' залогинен в данный момент на каждом компьютере

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objRoot = GetObject("LDAP://RootDSE")
strDomainName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing

strComputer = ""
Dim fso
Dim file

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("logged_user_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")

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

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location from 'LDAP://" & strDomainName & "'" _
& "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute

'**********************************************************************************

objRecordSet.MoveFirst

Wscript.Echo "Processing information. This might take several minutes."

Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value

' Проверяем доступность компьютера с помощью команды PING 
' и анализа выходного потока

    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strComputer)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)

'    Если компьютер отвечает, подключаемся к его WMI

    If InStr(strPingResults, "ttl=") Then
     Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
        
        Set colComputer = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
    
' Выводим список залогиненных пользователей в файл и на экран

        For Each objComputer in colComputer
             Wscript.Echo "Logged-on " &strComputer & " user: " & objComputer.UserName
             file.WriteLine("Logged-on " &strComputer & " user: " & objComputer.UserName)
        Next
        objRecordSet.MoveNext
        
' Если компьютер не отвечает - выводим сообщение и перемещаемся к следующему

    Else
     WScript.Echo(strComputer & ": Не отвечает...")
        objRecordSet.MoveNext
    End If
Loop



Вариант скрипта, выдающего имя пользователя на конкретном компьютере:

Код

WScript.Echo("Введите имя компьютера:")
strComputer = WScript.StdIn.ReadLine
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

Set colComputer = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
 
For Each objComputer in colComputer
    Wscript.Echo "Logged-on user: " & objComputer.UserName
Next


Это сообщение отредактировал(а) Akella - 16.11.2007, 16:26
PM MAIL   Вверх
Akella
Дата 7.6.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 73
Всего: 329



localhost, скрипты нужно запускать на КД или можно с любого компа?

Добавлено через 1 минуту и 29 секунд
кстати если на удаленном компе всё закрыто огненной стеной, то "Comp1: Не отвечает..."
PM MAIL   Вверх
localhost
Дата 7.6.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Цитата(Akella @  7.6.2007,  12:14 Найти цитируемый пост)
localhost, скрипты нужно запускать на КД или можно с любого компа?

C любого компа под доменным админом
Цитата(Akella @  7.6.2007,  12:14 Найти цитируемый пост)
кстати если на удаленном компе всё закрыто огненной стеной, то "Comp1: Не отвечает..." 

Само собой. Для доступа к WMI нужно открыть порт TCP 135
Подробнее о решении неполадок клиентских компьютеров при удаленной работе с WMI читаем тут и тут

Это сообщение отредактировал(а) localhost - 7.6.2007, 11:58
PM MAIL   Вверх
localhost
Дата 7.6.2007, 15:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Изменение описания компьютера
(имеется ввиду описание то, что видно в проводнике в сетевом окружении)

По просьбе Akella выкладываю скрипт, с помощью которого можно менять описание компьютера на всех машинах домена. Новое описание запрашивается у пользователя для каждого компьютера.
Код

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objRoot = GetObject("LDAP://RootDSE")
strDomainName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing

Set objShell = CreateObject("WScript.Shell")

strComputer = ""

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

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location from 'LDAP://" & strDomainName & "'" _
& "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value
    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 2 " & strComputer)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)
    
    If InStr(strPingResults, "ttl=") Then
        WScript.Echo ""
        WScript.Echo "Input a new Description for " & strComputer
        strNewDescription = WScript.StdIn.ReadLine
        
        Set objWMIService = GetObject("winmgmts:\\" & strComputer).InstancesOf("Win32_OperatingSystem") 
        For Each x In objWMIService
            x.Description = strNewDescription
            x.Put_
        Next
     objRecordSet.MoveNext
             
    Else
     WScript.Echo(strComputer & ": Not answer...")
        objRecordSet.MoveNext
    End If
Loop


Это сообщение отредактировал(а) Akella - 16.11.2007, 16:28
PM MAIL   Вверх
Akella
Дата 7.6.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 73
Всего: 329



молодец, хороший скрипт
PM MAIL   Вверх
mihanik
Дата 15.6.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 61
Всего: 109



Список компьютеров в одноранговой сети

Скрипт формирует список сетевых компьютеров в переменной MyList.
По окончании работы в MyList содержится многострочный текст, одна строка содержит одно DNS-имя компьютера...
Работает и в одноранговой сети...


Код

' Константы для работы с файлами
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' Переменные для работы с файлами
Dim fso, f
Dim MyFileName
Dim I
Dim MyList

' Переменные для работы с WScript.Shell
Dim WshShell, oExec

'  "придумаем" уникальное имя файла для размещения в c:\
Set fso = CreateObject("Scripting.FileSystemObject")
I = 0
MyFileName = "c:\netview.txt"

While (fso.FileExists(MyFileName))
    MyFileName = "c:\netview(" & cstr(i) & ").txt" 
    I = I + 1
Wend

' Выведем список компьютеров сети в файл
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c  net.exe view >> " & MyFileName)

' Ждём завершения формирования списка компьютеров...
Do While oExec.Status = 0
     WScript.Sleep 100
Loop

' Проверим существование файла...
If not (fso.FileExists(MyFileName)) then
    ' если файла нет, то завершаем работу с сообщением об ошибке...
    msgbox "Не удалось сформировать список доступных сетевых компьютеров!", VBCritical, "Ошибка!!!"
    WScript.quit
end if

'  Откроем файл и сформируем список компьютеров...
On error resume next
MyList = ""

Set f = fso.OpenTextFile(MyFileName, ForReading)

If Err.Number Then
    ' если не удалось открыть файл для чтения, то завершаем работу с сообщением об ошибке...
    msgbox "Не удалось сформировать список доступных сетевых компьютеров!", VBCritical, "Ошибка!!!"
    WScript.quit
end if

While F.AtEndOfStream <> True
    S = f.readline
    If Len (S)>2 Then
        If mid(S,1,2)="\\" Then
            S = Mid(s,3,instr(S," ")-3)
            MyList = MyList & S & VbCrLf
        end If
    end If
Wend

F.close

If Err.Number Then
    ' если во время работы произошли ошибки, то завершаем работу с сообщением об ошибке...
    msgbox "Не удалось сформировать список доступных сетевых компьютеров!", VBCritical, "Ошибка!!!"
    WScript.quit
end if

' удалим файл с диска...
fso.DeleteFile(MyFileName)
WScript.Sleep 100

If Err.Number Then
    ' если не удалось удалить файл , то сообщаем об этом
    msgbox "Не удалось удалить временный файл с именем" & vbcrlf & """" & MyFileName & """" & vbcrlf & _
         "Вы можете удалить его позже вручную." , VBCritical, "Ошибка!!!"
end if

' Выводим список компьютеров на экран...
msgbox MyList


Это сообщение отредактировал(а) Akella - 16.11.2007, 16:28


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Akella
Дата 15.6.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 73
Всего: 329



а в текстовый файл слабо?
PM MAIL   Вверх
mihanik
Дата 15.6.2007, 13:50 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 61
Всего: 109



Список компьютеров в одноранговой сети

Код

' Константы для работы с файлами
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' Переменные для работы с файлами
Dim fso, f
Dim MyFileName
Dim I
Dim MyList

' Переменные для работы с WScript.Shell
Dim WshShell, oExec

'  "придумаем" уникальное имя файла для размещения в c:\
Set fso = CreateObject("Scripting.FileSystemObject")
I = 0
MyFileName = "c:\netview.txt"

While (fso.FileExists(MyFileName))
    MyFileName = "c:\netview(" & cstr(i) & ").txt" 
    I = I + 1
Wend

' Выведем список компьютеров сети в файл
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c  net.exe view >> " & MyFileName)

' Ждём завершения формирования списка компьютеров...
Do While oExec.Status = 0
     WScript.Sleep 100
Loop


Всего и делов-то...
Т.е. мой предыдущий скрипт работает так...
1. Придумывает уникальное имя файла для размещения в с:\
2. Использует net view  для вывода списка компов в файл с найденным именем.
3. Открывает файл на чтение
4. Анализирует его содержимое, формирует список в переменной
5. закрывает файл.
6. удаляет файл
7. выводит результат на экран.

Т.е. если выбросить пункты, начиная с 3, то получиться то, что ты хочешь...
 smile

Добавлено @ 13:54
На этой же идее можно построить скрипт, дающий ответ "в сети ли компьютер, или нет"...

Это сообщение отредактировал(а) Akella - 16.11.2007, 16:29


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
localhost
Дата 16.6.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хирург-длятехкт
**


Профиль
Группа: Участник
Сообщений: 712
Регистрация: 8.11.2005
Где: Н.Новгород

Репутация: 37
Всего: 43



Цитата(mihanik @  15.6.2007,  14:50 Найти цитируемый пост)
На этой же идее можно построить скрипт, дающий ответ "в сети ли компьютер, или нет"... 

net view как раз и выводит список компьюютеров в сети, полученных от мастер-браузера. Единственное что, в развитии этой идеи для применения скриптов на всех компьютерах сети, придется парсить вывод данной команды. Другого способа для сетей без AD я не вижу.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.1941 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.